1、JNI的认识
问题:JNI是什么?有什么用?
JNI是java native Interface的缩写,
简单的说就是在android 程序中应用c/c++程序。
2、JNI的简单配置
场景:android 访问jni,获取返回值,显示在界面上
JNI环境的配置
我的环境:
android studio 2.1.1
android-ndk-r10b
1)、创建一个新的AS项目
作为有经验的安卓开发人员,你一定知道怎么创建项目的
2)、在Project Structrue下设置ndk路径
注意查看local.propertites文件下面是不是有ndk的配置
3)、在app下面的build.gradle下进行ndk的设置
同步代码
3)、新建ndk管理类
用类来管理jni的方法
注意:static{}里面加载库 这个库是在app 下面build.gradle里面对ndk的配置 两者要一致。
Jni方法使用native方式来进行
4)、 新建Jni文件夹
new —folder—JNI folder
5)、将native方法转换为.h文件
使用as自带的命令行窗口
—进入到java目录下
—然后就在java目录下生成了.h文件
6)、对.h文件的改造
一般情况下c的相关文件是放在jni下边的,将.h文件剪切到jni目录下边
7) 将.h文件重命名为.c文件并且修改.c文件(不推荐使用)
推荐使用:
新建一个c++文件,在新建的文件中include 上面生成的.h,实现.h的方法,
8)、在MainActivity里面获取到JNI的值 打出就可以了
运行效果:
3、配置的过程中遇到的问题
问题集:
1、 目前使用的android studio 是正式版本的2.1.1
使用ndk-9,各种百度,各种折腾,查各种博客,各种弄还是有问题,这个时候查看ndk是不是版本不对,两者不兼容什么的,最后在官网中下载了ndk-10 ,最后完成了没有错的编码。
2、 对javah的使用
异常:javah不是内部命令或批处理文件
========没有配置java的环境导致的问题
========完整配置java环境
包括JAVA_HOME、path和CLASSPATH的配置,注意CLASSPATH的配置是在系统环境变量下进行的配置。
3、 基本配置完成,开始运行的时候出现下列错误
Error:(13, 0) NDK integration is deprecated in the current plugin.
<a href="http://tools.android.com/tech-docs/new-build-system/gradle-experimental">Consider trying the new experimental plugin</a><br><a href="useDeprecatedNdk">Set "android.useDeprecatedNdk=true" in gradle.properties to continue using the current NDK integration</a>
=============================直接双击系统就直接加上了
4、 运行结果出现下列异常
Error:Execution failed for task ':app:compileDebugNdk'.
> com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'E:\android-ndk-r10b\ndk-build.cmd'' finished with non-zero exit value 2
=========================AS的bug 在jni目录下边不能只有一个文件
解决方法:可以在jni下面新建一个空的.c文件