JNI初步接触--认识、简单配置

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项目

jnidemo项目截图

作为有经验的安卓开发人员,你一定知道怎么创建项目的
2)、在Project Structrue下设置ndk路径

添加ndk环境

注意查看local.propertites文件下面是不是有ndk的配置
3)、在app下面的build.gradle下进行ndk的设置

新建库名

同步代码
3)、新建ndk管理类

NDK类

用类来管理jni的方法
注意:static{}里面加载库 这个库是在app 下面build.gradle里面对ndk的配置 两者要一致。
Jni方法使用native方式来进行
4)、 新建Jni文件夹
new —folder—JNI folder
5)、将native方法转换为.h文件
使用as自带的命令行窗口
—进入到java目录下

cd 目录

指定代码 编码

—然后就在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文件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值