版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】详解AndroidStudioJNI+Gradle3.0以上JNI爬坑之旅
1.首先什么是JNI呢?JNI——(JavaNativeInterface),他是java平台的特性,不是安卓系统提供的。他定义了一些JNI函数,来让开发者可以通过调用这些函数来实现java代码调用C/C++代码。2.如何使用JNI呢?我们先将写好的C/C++代码编译成对应平台的动态库(windows是.dll文件,linux是.so文件)。下面我们来举个栗子:使用AndroidStudio来实现JNI3.要实现JNI先下载NDK,那么NDK又是什么呢?(面试宝典来了,赶紧掏出小本本)
4.下来我们new一个新工程:这个工程只包含一个MainActivity
5.我们来检查一下NDK下载好了没有,怎么检查呢?如下:检查SDKLocation里面的NDK路径:
检查perties文件里面有没有NDK路径:
6.下来我们要编写JNI接口啦,如下:JNI接口需要用native关键字修饰,我们会看到方法名报红,没关系,我们继续
7.我们先build一下工程,检查myJNIUtils.java编译后有没有生成class文件,在这个位置下:AndroidJNITest/app/build/intermediates/classes/debug/com/kissdream/androidjnitest/myJNIUtils.class
8.使用javah生成.h头文件,具体如下:打开Terminal,输入命令进入到debug目录下,命令如下:
cd/Users/apple/Desktop/AndroidJNITest/app/build/intermediates/classes/debug
然后使用javah+包名+文件路径来生成头文件,命令如下:
javahcom.kissdream.androidjnitest.myJNIUtils
检查头文件有没有生成:
我们发现这个路径下多了个.h文件AndroidJNITest/app/build/intermediates/classes/debug/com/kissdream
哈哈,没错这个就是我们要生成的头文件
9.生成了.h文件还不行,只是声明了方法,我们还需要去实现它,那么如何去实现他呢,如下:-我们在main下新建一个jni文件夹,如图:
.h文件内容如下:把生成的.h文件拷贝到jni文件夹下
在jni文件夹下,新建一个.c(c语言)或者.cpp(c++)的文件,来实现.h文件里声明的方法:
把.h文件里面声明的方法拷贝到新建的c++文件里面,然后在文件里面引入.h文件:
引入.h文件#include"com_kissdream_androidjnitest_myJNIUtils.h"
到这里我们的方法就实现完毕了10.方法我们实现了,但是我们如何调用呢,不要着急,Followme:首先引入动态库:
NameProvider就是你要生成d的.so文件的文件名下面我们来调用它
11.最重要的一步来了,生成so文件:这个在下也不会,于是就去百度了下,得到结果:在根目录perties下面加上:
android.useDeprecatedNdk=true意思就是允许使用低版本的NDK
在module下面的build.gradle下面加上ndk节点如下图:
NameProvider注意这个名字要跟你引入动态库的名字一样
需要这俩步就可以运行生成so文件了
然儿,并没有想象的那么顺利,报错了,我顿时心中飞过一万只草泥玛,上log:百思不得其姐啊,百度的答案大家都是这样做啊,为什么人家可以我的就不行呢,我的代码和他的一模一样啊
为什么人家可以我的就不行呢,我的代码和他的一模一样啊这句话作为程序员的我们很熟悉!难到我要放弃吗?nonono,作为程序员的我怎么能轻言放弃呢!每个人都有这样的经历,蓝瘦过、香菇过,到最后我们都找到我们的错误
来我们仔细看下Log,大概意思就是说:考虑使用CMake或ndk构建集成。要了解更多信息,请访问:
/r/studio-ui/add-native-code.html#ndkCompile
首先,您可以使用Android的ndk构建脚本示例插件为您生成:
/Users/apple/Desktop/AndroidJNITest/app/build/intermediates/ndk/debug/Android.mk
或者,你可以使用实验插件:
/r/tools/experimental-plugin.html
继续使用已弃用的NDK编译60天,设置
在perties
android.deprecatedNdkCompileLease=1512283120054(这个测试不起作用)
经过各种查资料,发现原来在gradle3.0以上以前这种方法不在支持
学习过程就不详细描述了,直接上结果:先通过SDKManager下载:CMake和LLDB
在build.gradle的defaultConfig节点下加入:在build.gradle的android节点下加入:
添加CMakeLists.tx
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 工业企业亩产效益综合评价修订办法
- 临床原发性膜性肾病肾功能进展风险分层
- 《食品安全》课件-淀粉的老化
- 景县恒丰机械配件有限公司新上缓冲垫、吸尘管及矿山机械配件项目环评报告
- 邢台荣越玻璃科技有限公司 节能防火玻璃及玻璃防雾镜生产项目环评报告
- 宏力重工有限公司年产600吨农机配件生产线扩建项目环评报告
- 景县华翔机械配件有限公司机械配件加工项目环评报告
- 全血及成份血在器官移植中的应用
- 污水处理设施维护操作流程
- 农业计划病虫害防治手册
- 2024年广东普通专升本《公共英语》完整版真题
- 供应链公司运营方案
- 静脉治疗护理技术操作规范
- 语文-2024届语用新题“语境+词义”解题指导
- 成套电气公司全员岗位职责及级别评定标准与月度绩效考核方案附全套绩效表
- 食品安全防护培训
- 单原子催化剂的合成与应用
- 酒精所致精神障碍的护理查房
- 设备售后服务协议书
- 框架结构毕业设计范例
- 人工智能应用培训
评论
0/150
提交评论