C++在大规模、高性能计算,游戏开发、嵌入式应用开发,以及传统的客户端软件和构件开发中是十分强大的。如今智能手机市场发展,一日千里,手机机能的提高,智能手机普及率的扩大,3g时代的来临,手机已经成为微型移动计算机了,各大移动厂商已经把手机系统平台之争看做手机的未来之争,占有移动平台的优势,谁就占有了未来,在智能手机平台,各种中高级的应用会层出不穷,C++的地位会更加巩固,作用会大大的发展。
目前中国三大运营商为了抢占3G平台的先机,现在都加强与终端厂商和软件厂商的深度合作,建设自己的手机系统平台。
Google公司08年推出Android手机操作系统,基于Linux2.6开放平台设计,并不断丰富完善。Android平台的图形渲染能力比其它几家强,同时还内置了Google 的Gmail,Gtalk等原有业务,能看出在国外市场,用惯Google的用户,会感到设计很贴心。
随后,中国移动推出了Ophone OS开放智能操作系统平台,也是基于Linux 2.6,兼容Android的所有应用,这样首先保证了一定数量的应用软件可提供用户。同时,还内置了中国移动的全部增值服务,为用户提供更丰富的应用体验。这里还包括MMarket(网上软件下载商店),专门向中国移动将近5亿的手机用户销售个人软件作者的各类手机应用软件,7:3分成,个人作者可以拿7成。这可以说是我们工程师的福音,多了条子创业之路。中国移动还有众多的商业客户,行业OA办公软件系统的市场也不可小靚啊。所以,Ophone未来给大家带来的发展机会,值得关注。
Android和Ophone OS的开发语言C/C++,Java,这个正是他,他们架构的绝妙之处,众所周知,C/C++是老牌语言在中低层的应用开发中游不可替代的地位,但开发效率的问题一直是他天生的缺点,Java可以说天生就是来弥补C++的不足的,在高层的业务开发中java是很强的力量,PC机的很多领域只能用C/C++来开发,这对于目前手机操作系统硬件低等原因来说,C/C++必定是不二的选择,而Java来讲,和硬件关系不密切,不过安全性很高,怎么样才能把这两种语言有机的结合在一起呢
JNI在平台应用情况和好处
我们首先介绍一下java的性能问题,Java程序其本身的缺陷,那就是其效率问题。由于Java是一种介于解释型和编译型之间的语言,其对内存的管理是通过JVM虚拟机来实现的,同样的程序,如果用编译型语言C来实现,其运行速度一般要比Java快得多,这就迫使开发者寻求一种java和C/C++相结合的模式来弥补彼此的不足,于是JNI(Java Native Interface,Java本地化方法)技术运用而生, 目前JNI技术在很多平台上如wince/mobile,linux,symbian都有了很大的应用,不过在这些平台上并没有发挥JNI技术的绝对优势,为了让JNI技术能够发挥出自身的绝对力量,于是Ophone OS系统制定出来完美的解决方案
下面我就通过在Ophone平台上的多媒体实例来讲一下C/C++与java是怎么结合工作的
Ophone OS的OpenCore模块概述
OpenCore的另外一个常用的称呼是PacketVideo,它是Ophone OS的多媒体核心。OpenCore是这套多媒体框架的软件层的名称。在Ophone OS的开发者中间,二者的含义基本相同。对比Android的其它程序库,OpenCore的代码非常庞大,它是一个基于C++的实现,定义了全功能的操作系统移植层,各种基本的功能均被封装成类的形式,各层次之间的接口多使用继承等方式。
多媒体框架在Ophone OS系统中的位置(红包标记)
从框架图可以看出多媒体处理Libraries层,这说明Ophone OS的媒体层是通过os方式供上层使用,实际上一般都是用c/c++来实现,然后层过上层语言,比如Java的JNI方式去调用
媒体的编解码库使用了OpenMAX 1L interface接口进行展,这使得和具体的硬件不相关,为厂家的移植带来了方便
OpenCore本身集成了目前流行的媒体格式,如本地文件3GP,MPEG-4等等,在线播放的http,rtsp/rtp流媒体协议
配套的Ophone OS源码OpenCore模块源码下载
Ophone OS开源项目是用Git进行版本控制的,大家可以到
http://code.google.com/p/msysgit/downloads/list 上下载Git-1.6.4-preview20090730.exe,然后安装,安装完运行开始菜单->Git->Git Bash,会出现一个dos窗口,输入git clone git://android.git.kernel.org/platform/external/opencore.git回车,下载完成后的源码在C:\Documents and Settings\Administrator\opencore目录,当然大家也可以自己创建一个空目录,运行Git,在Git提供的shell,切换路径到你刚才创建的目录下(cd命令)
下面我们对PVPlayer进行简单的说明
下面是通过JNI方式调用
MediaPlayer mp;
mp = MediaPlayer.create(this,xxx.mp3);
mp.prepare();
mp.start();
以上的简单的一个播放mp3格式的程序,他的巧妙之处在于,Ophone是基于Linux平台的开源手机操作系统,提供了软件开发,所以Ophone手机的内部核心依然是linux, 不过Ophone提供了比Linux更为安全的开发模式,Linux支持c++上层开发,这样就会使得一些不良开发者,借助这一有利优势,开发一些恶性操作,不过Ophone系统屏蔽这一缺陷,有过C/C++开发底层,java通过JNI的方式来调用,这样即不失C/C++的高效率,又同时增加了系统的安全性,使得jni技术实现跨平台开发同时兼顾效率的有效方法