欢迎来到天天文库
浏览记录
ID:50174234
大小:65.50 KB
页数:22页
时间:2020-03-06
《jni工作机制简介.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、Androidjava层与linux底层相互调用Android与linux底层程序互调用Android调用底层程序java程序如何访问windows,linux底层c++/c的程序?JNI-JavaNativeInterfaceJNI标准是java平台的一部分,它允许Java代码和其他语言写的代码进行交互。JNI是本地编程接口,它使得在Java虚拟机(VM)内部运行的Java代码能够与用其它编程语言(如C、C++和汇编语言)编写的应用程序和库进行交互操作JNI工作机制JAVAVMLinux组件(C,C++)Java类编译为Dex型式的Bytecode之后必须靠Dalvik虚拟机来执行JN
2、I开发环境-ndk(推荐)Android提供了windows和linux下的JNI开发环境ndk-NativeDevelopmentKit交叉编译器编译的代码符合arm-linux提供了用于编译的android基本sdk库提供了bash方式的编译命令,使用非常简单Linux下ndk配置linux下直接下载并解压ndk开发包即可Ndk-windows开发环境Ndk是在linux下运行的程序,在windows上需要模拟一个linux环境才能执行ndk。怎么模拟?cygwinWindows配置ndk步骤:1.下载windows版本的ndk,2.安装cygwin,并被指ndk环境3.每次编写好程
3、序代码后,启动cygwin,然后执行ndk编译命令编译JNI开发步骤1.采用标准c或c++语言编写程序2.类似于linux在makefile,android的jni编译需要.mk文件编译:采用命令ndk-bulid例子:1、我们选择ndk自带的例子hello-jni,我的位于E:android-ndk-r5sampleshello-jni(根据你具体的安装位置而定),2、运行cygwin,输入命令cd/cygdrive/e/android-ndk-r5/samples/hello-jni,进入到E:android-ndk-r5sampleshello-jni目录。3、输入$N
4、DK/ndk-build,执行成功后,它会自动生成一个libs目录,把编译生成的.so文件放在里面。($NDK是调用我们之前配置好的环境变量,ndk-build是调用ndk的编译程序)4、此时去hello-jni的libs目录下看有没有生成的.so文件举例我们首先用java编写helloworld应用程序(APK),这个代码很简单创建一个HelloWorldactivitypublicclassHelloWorldextendsActivity{privatestaticfinalStringTAG="HelloWorld";static{System.loadLibrary("hell
5、oworld");}privatenativeStringprintJNI();/Calledwhentheactivityisfirstcreated./@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);Log.d(TAG,"ActivitycallJNI:"+printJNI());}}C语言实现helloworld共享库使用javah工具,可以根据java源程序,生成Native代码的头文件jav
6、ahcom.simon.HelloWorld注意:该命令必须在bin/classes下执行执行后得到,一个头文件com_simon_Helloworld.h,这里包含有printJNI接口的C/C++声明创建com_simon_Helloworld.c文件#include#defineLOG_TAG"HelloWorld"#include/Nativeinterface,itwillbecallinjavacode/JNIEXPORTjstringJNICALLJava_com_simon_HelloWorld_printJNI(JNIEnvenv
7、,jobjectobj){LOGI("HelloWorldFromlibhelloworld.so!");return(env)->NewStringUTF(env,"HelloWorld!");}/Thisfunctionwillbecallwhenthelibraryfirstbeload.Youcandosomeinitinthelibray.returnwhichversionjniitsupport./jintJNI_On
此文档下载收益归作者所有