欢迎来到天天文库
浏览记录
ID:36721450
大小:555.33 KB
页数:52页
时间:2019-05-14
《Android技术之JNI和HAL》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、Android技术之JNI和HAL内容提纲}jni的介绍和作用}jni在android系统中的应用}jni的编写和编译技术}hal的介绍}hal的编写技术www.farsight.com.cnAndroidApplicationSystemAPIApplicationFrameworkCoreJavalibrariesCcodeframeworkJNIDalvikVMAndroidlibrariesAndroidRuntimeUserSpaceHardwarelayersKernelAndroidportingwor
2、ksSpaceLinuxkernelAndroidcoreAndroiddevicesdriversDriversDriversHardwaresystemHardwaresystemwww.farsight.com.cnSpaceJNI的介绍}矛盾体:java应用程序如何与linux底层交互?android实现了很好的分层机制,从而使得开发者开发更加专注,但是android的应用层和框架层使用的开发语言为java,Java是一种平台无关性的语言,平台对于上层的java代码来说是透明的,而android是基于linu
3、x的一个操作系统,linux只提供了c/c++或者是汇编的接口给开发,因此,为了使得android系统运行正常,必须想办法把java语言与c/c++连接起来,这个连接器螺丝就是jni技术www.farsight.com.cnjni的概念}Java本机接口(JavaNativeInterface(JNI))是一个本机编程接口,JNI允许Java代码使用以其它语言(譬如C和C++)编写的代码和代码库www.farsight.com.cnjni在android系统中的应用}jni在android系统中得到了大量的运用,比如
4、wifi,3G,camera,g-sensor等等,只要是涉及到平台硬件,都需要用到jniwww.farsight.com.cnwifi框架WirelessSettings.javaWifiManager.javaWifiService.javaWifiNative.javaandroid_net_wifi_wifi.cppwifi.cexternal/wpa_supplicant/rt3070sta.kowww.farsight.com.cn摄像头的框架www.farsight.com.cn3G框架APP:Phon
5、eFrameworktelephonyjavaJNIFrameworktelephonyCsocketrild守护进程hal:特定模块的参考库linuxkernel:ppp协议3G模块www.farsight.com.cnGPS框架www.farsight.com.cnjni的编写}Java调用c/c++的框架:Java代码-->jni代码-->c/c++代码}写一个简单的Javaapp来调用C/C++代码打印“HelloWorld!”的过程。这个过程由下面这几个步骤组成:1.编写java代码,创建一个类(Hello
6、World.java)声明nativemethod。2,编写jni文件3,将jni实现文件编译成一个nativelibwww.farsight.com.cn第一步:编写java代码,创建一个类(HelloWorld.java),并且使用本地方法。}publicclassHelloActivityextendsActivity{}publicvoidonCreate(BundlesavedInstanceState){}super.onCreate(savedInstanceState);}setContentView
7、(R.layout.main);}this.fsSayHello();}}}static{}System.loadLibrary("hello_jni");//notice}}privatestaticnativeintfsSayHello();//noticedeclare}}www.farsight.com.cn}HelloActivity类声明一个本地fsSayHello()方法。还有个static初始化函数}native方法的声明:}和一般java程序语言的声明中有不同之处,如fsSayHello()。一个n
8、ative方法声明必须包含native修饰符www.farsight.com.cn第二步:构建jni函数,并且编译成本地库}jintJNI_OnLoad(JavaVM*vm,void*reserved)}{}jintresult=-1;}JNIEnv*env=NULL;}LOGI("JNI_OnLoad");}if(vm->GetEnv((vo
此文档下载收益归作者所有