JNI
Java的优点有: 跨平台性很强的,一次编译到处运行,一边编译一边执行, 不受病毒的干扰。但是美中不足,运行速度比C,C++ 等语言慢, 访问硬件底层比不上C++,C,一些应用需求却需要执行纯 Java 程序无法完成的一些任务。为此SUN公司为了突破JAVA的瓶颈, 就引入了JNI 的作用, JNI就是能够兼容C,扬长避短, 快速的访问硬件底层, 扩展我们软件的功能, 随心所欲的进行开发。对于移动开发而言, BREAW, SYMBIAN,等就是以C和C++为基础的, 而现在市场的新兴智能平台ANRDOID 和中国移动的Ophone也是以JAVA 开发为主, 也用到了JNI。而为什么笔者在本文力也推JNI 呢? 原因如下 : J2ME作为手机应用开发的先驱,由于它的出发点考虑比较低,开发出来的手机应用软件处处受到限制,特别是在底层方面比如手机壁纸,声音均衡器,声音的捕捉等是不能通过软件来设置。不能让我们随心所欲的开发、策划我们的软件。而我们从Android Library或Ophone Library的组成来看, 他是由一系列的c/c++库组成,这些库的能力通过JNI封装成java接口,由Application Framework层提供给开发者。这样JNI为的们访问手机的硬件底层提供接口和方便。这些底层有:声音均衡器,视频,地图,3D, 驱动编写,网络底层等,这样就可以用JAVA 做UI界面,JNI来调用系统的底层, 这样两结合起来就是既提高开发的速度,又提高了软件的运行速度。不久将来Android 或Ophone只要实现了J2me API(大势所趋),这样大量现有的J2ME的应用可以很容易的移植到Android 或Ophone上来,而且通过JNI可以很容易的增加调用底层的高级功能。市场前景很宽阔。下面我就介绍一下: java 调用JNI示例: class HelloWorld { public native void displayHelloWorld();//声明调用C的方法 static { System.loadLibrary("hello");//导入C的文件,并运行C的MAIN() 方法. } public static void main(String[] args) {// 运行主程序 new HelloWorld().displayHelloWorld();//生成 } } 声明native方法:如果你想将一个方法做为一个本地方法的话,那么你就必须声明改方法为native的,并且不能实现。其中方法的参数和返回值在后面讲述。 Load动态库:System.loadLibrary("hello");加载动态库. C 的代码: #include /* Header for class HelloWorld */ #ifndef _Included_HelloWorld //声明C文件( 标识为C,语言代码) #define _Included_HelloWorld #ifdef __cplusplus extern "C" { //调用C的标志 #endif JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld // 方法主体 (JNIEnv *, jobject); #ifdef __cplusplus } #endif #endif 从以上的代码我们可以看出, 调用JNI 就是首先是写好C文件, 然后在要调用它的JAVA文件声明调用方法, 在方法里面调用 System.loadLibrary() 即可。 这样方便,代码量少, 实用, 有一定的C语言基础的人, 几分钟就可以入门了, 根本不用那么长的时间来看。 没有C语言的人看了几天的C入门, 也很快上手的。 JNI 调用功能,目前只在中国移动OPHONE和ANDROID 被引入了,Symbian 、Wm、Brew等平台,还不能通过JNI方式很好的调用底层硬件,影响了软件体验的完美程度。这一点仅仅是平台差异对未来软件人性化设计的影响差异。软件的人性化差异,会影响用户的规模,市场的规模,这点大家都很清楚。如果再加上市场因素,比如,Symbian、Wm虽然现在很流行,但是后来居上的Android和Ophone,尤其是Ophone,借助中国移动在7亿手机用户市场70%的市场占有率和大把的商业、企业客户,未来在这2个市场上销售手机娱乐软件和行业移动自动办公软件,市场的商机肯定比其它光有产品而没有市场控制力的国外厂家要强,这一点也很明显。 所以我们了解熟悉JNI的用法,也可以很方便把我们现有的软件产品,快速移植到Android或Ophone平台上来。 最近看新闻,说移动在广州和几个自由软件作者刚签约,在移动的MM在线软件销售商店上卖。3,7分成,工程师拿7成,看着挺让人羡慕。以后自己有灵感开发个有意思的手机娱乐软件卖卖,又多了条生财之路。 3G市场起来,估计后面跟风的软件开发公司也会多,移动软件工程师比咱们做pc软件开发的工程师挣得多,唉。。。 如果大家也有兴趣,我给大家介绍2个网站: Gphone Android可以去这里看看http://bbs.android123.com/。有很多开发经验交流内容。 Ophone官方网站http://www.ophonesdn.com, 上面的大量的入门资料, 适合初、中,高级开发者, 包括了地图, 声效, 视频等方面资料应用,收获的效果可能超出你的想像。比如他在 开发社区上天天有资料更新, 有时用百度,谷歌看看搜不到资料,因为现在Ophone开发者越来越多, 而且他目前不断的在在丰富他的开发群,官网就成开发者的天堂,同时他也注重JNI的应用的推广, 我看了几次发现JNI在Ophone, Android 使用起来也比较得简单。 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/ddrr2009/archive/2009/11/05/4768505.aspx