【移动应用开发技术】详解AndroidStudio JNI +Gradle3.0以上JNI爬坑之旅_第1页
【移动应用开发技术】详解AndroidStudio JNI +Gradle3.0以上JNI爬坑之旅_第2页
【移动应用开发技术】详解AndroidStudio JNI +Gradle3.0以上JNI爬坑之旅_第3页
【移动应用开发技术】详解AndroidStudio JNI +Gradle3.0以上JNI爬坑之旅_第4页
【移动应用开发技术】详解AndroidStudio JNI +Gradle3.0以上JNI爬坑之旅_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

【移动应用开发技术】详解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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论