jni的使用(详细)

jni的使用(详细)

ID:37276608

大小:1.16 MB

页数:28页

时间:2019-05-20

jni的使用(详细)_第1页
jni的使用(详细)_第2页
jni的使用(详细)_第3页
jni的使用(详细)_第4页
jni的使用(详细)_第5页
资源描述:

《jni的使用(详细)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、搭建JNI的开发环境具体步骤:双击打开。1、安装:android-ndk下载地址在Android官网,如下图:下载后解压就可以用了,它里面的文档需要经常去查看使用:2、安装Cygwin安装时只安装这两个即可:devel目录里面存放的是linux系统与编译相关的插件集合.shell目录里面存放的是linux系统的脚本相关的插件集合.配置Linux的环境变量既然Cygwin就是一个Linux运行环境,那么一定也可以配置环境变量,因为ndk中的命令要在Linux下运行的话,首先要进入到ndk命令所在目

2、录才能执行,这样很麻类,这时就可以配置Linux的环境变量了:找到:E:cygwinetc目录下的profile文件(没扩展名的),用记事本打开,找到第32行:PATH="/usr/local/bin:/usr/bin:${PATH}",首先要清楚在Linux下的目录结构是怎么样的,用cd..一直返回到Linux的根目录,然后输入ls命令,可以看到有一个sygdrive目录,用cdcygdrive进入该目录,这时可以看到:cdefg,这些就是硬盘的盘符,所以在Windows系统下的E:an

3、droid-ndk-r7b目录,在Linux中的表示为:/cygdrive/e/android-ndk-r7b,多个路径之间用:号分隔,配好的PATH为:PATH="/cygdrive/e/android-ndk-r7b:/usr/local/bin:/usr/bin:${PATH}"Cygwin中的命令使:3、安装CDT:插件安装好后会多出一个C/C++的视频:写一个ndkHelloWord的步骤:1.创建一个android工程2.JAVA代码中写声明native方法3.创建jni目录,编写

4、c代码,方法名字要对应查看Java中对JNI的规范:jni.h文件C语言的jobject是void*的别名C语言string是又jobject的别名在JNINativeInterface结构体里定义了很多的函数指针:通过函数指针就可以调用这些方法。怎么拿这个JNINativeInterface结果体呢?通过结构体指针就能拿到结构体:*JNIEnv而这里的JNIEnv*是一个结构体指针的指针,所以通过*env拿到的就是JNIEnv,然后再*JNIEnv就拿到了JNINativeInterface结

5、构体写成一个语句就是:*(*env)==JNINativeInterface结构体4.编译.c文件生成动态库编译C文件需要在项目的根目录下执行编译命令编译.c文件用的是ndk中的ndk-build命令,而这个命令需要运行在Linux的环境下,所以需要启动Cygwin程序,在Cygwin的命令窗口中进入到安卓项目的根目录,然后执行:/cygdrive/e/android-ndk-r7b/ndk-build命令,如下图:这里出了一个错误,第一句:AndroidNDK:YourAPP_BUILD_SC

6、RIPTpointstoanunknownfile:./jni/Android.mk说指向了一个未知的文件所以需要把一个叫:Android.mk的文件创建出来放到项目中的jni文件夹中à新建一个文件,输入文件名为:Android.mk这个Android.mk文件就是用来告诉编译器一些规,如要编译的是哪个C文件呀,编译出来的文件起个什么名字呀。5、创建Android.mk那这个Android.mk应该怎么写呢?可以查找帮助文档,如下图:把红色的拷到Android.mk文件中,然后指定交叉编译后的文

7、件名与指定要编译哪个C文件。接着再到Cygwin程序中执行/cygdrive/e/android-ndk-r7b/ndk-build命令,这时会报错这么一个错误:这是因为C文件中还有一些依赖的头文件还没导入,导入:#include,这时再运行就OK了,hello.c代码如下:#include#includejstringJava_com_itheima_ndkhelloword_DemoActivity_helloWorldFromC(JNIEnv*

8、env,jobjectobj){return(*(*env)).NewStringUTF(env,"hellofromc");}运行结果如下:编译成功后会在项目中生成这两些东西:调用Android.mk中起的名字hello,自动在前面加上lib,在后面加上.so6.Java代码load动态库.调用native代码加载之后,在需要的地方调用:helloWorldFromC()方法即可查看生成的动态库进入项目中的bin目录,把apk文件解压,可以看到在:ndkHelloWorld_2libarm

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。