Android Studio NDK JNI配置Demo超详细2016
2016-06-21 09:49
666 查看
项目需要用到NDK,今天上网搜出来的NDK相关文章大多数年代久远、有的居然还停留在Eclipse年代。
经过一番摸索、终于调试成功,也决定抽时间记录下下午的操作步骤、和使用新版本AS的同学们讨论。
开发环境
Android Studio 2.1.2
JDK 1.8
未安装NDK的同学不要担心、文章后面会提到,非常简单方便。
那么我们开始吧!
新建一个android项目:
![](https://img-blog.csdn.net/20160621093647369?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
顶部菜单栏File》Project Structure打开界面(也可以在顶部工具栏中单机对应图标)
![](https://img-blog.csdn.net/20160621093720417?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
打开界面后,左边列表第一个SDK Location
![](https://img-blog.csdn.net/20160621093753918?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
当时这里遇到两个问题
1.Android SDK路径中含有空格,界面下方会提示一行字,路径中含有空格会影响NDK的使用。
我把AndroidSDK文件夹搬到D:\Android路径下就解决了
2.还没下载NDK:
在Android NDK Location这一项的下面会有个DownLoad按钮,点击下载,当时我没有翻墙,直接下载完成,按照提示解压后就把NDK配置成功了。SO
EASY
(注意上一步未解决是不允许下载NDK的,路径中一定不能有空格。)
接下来先编写一个Java类
方法addInt红色警告,先不用管。
这里打开菜单Build》Clean Project
完成后再Build》Rebuild Project
我们发现app\build\intermediates目录下新生成了classes文件夹:
![](https://img-blog.csdn.net/20160621093858388?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
在AS Terminal中切换目录:
输入 cd app/build/intermediates/classes/debug
(或鼠标左键拖动debug到terminal中)
输入java命令
Javah -jni com.gzjck.jnidemo.JniUtils
发现debug文件夹中生成了一个文件com_gzjck_jnidemo_JniUtils.h
![](https://img-blog.csdn.net/20160621094009666)
看见这个.h文件是不是心里有点小激动呢
在src/main目录下新建一个jni文件夹。把这个.h文件剪切粘贴到jni文件夹
![](https://img-blog.csdn.net/20160621094037280)
这个.h文件不需要编辑。
再在jni文件夹创建一个JniTest.c文件
文件内容
到这里主要的Jni调用代码已经写好,还有一些地方需要我们配置。
App目录下的build.gradle文件如下修改:
此时运行的话,AS还会警告“当前开发工具和NDK版本不兼容”
所以我们要在项目中的gradle.properties文件最后添加
修改Activity文件代码
点击运行,在我的电脑上出现了一个错误:
![](https://img-blog.csdn.net/20160621094348284)
D:\workspace\test\JniDemo\app\build\intermediates\classes\debug
这个文件夹无法删除
这里我的解决方法是先关闭AS,在系统的文件管理器中进行删除。
删除后再次打开项目,运行,成功了显示了运算结果1+2=3
![](https://img-blog.csdn.net/20160621094411878)
好了今天的Demo就到这里了,代码下载地址http://download.csdn.net/detail/gzjck/9555157
经过一番摸索、终于调试成功,也决定抽时间记录下下午的操作步骤、和使用新版本AS的同学们讨论。
开发环境
Android Studio 2.1.2
JDK 1.8
未安装NDK的同学不要担心、文章后面会提到,非常简单方便。
那么我们开始吧!
新建一个android项目:
顶部菜单栏File》Project Structure打开界面(也可以在顶部工具栏中单机对应图标)
打开界面后,左边列表第一个SDK Location
当时这里遇到两个问题
1.Android SDK路径中含有空格,界面下方会提示一行字,路径中含有空格会影响NDK的使用。
我把AndroidSDK文件夹搬到D:\Android路径下就解决了
2.还没下载NDK:
在Android NDK Location这一项的下面会有个DownLoad按钮,点击下载,当时我没有翻墙,直接下载完成,按照提示解压后就把NDK配置成功了。SO
EASY
(注意上一步未解决是不允许下载NDK的,路径中一定不能有空格。)
接下来先编写一个Java类
package com.gzjck.jnidemo; /** * Created by gzjck on 2016/6/20. */ public class JniUtils { static{ System.loadLibrary("JniLib"); } public native int addInt(int a, int b); }
方法addInt红色警告,先不用管。
这里打开菜单Build》Clean Project
完成后再Build》Rebuild Project
我们发现app\build\intermediates目录下新生成了classes文件夹:
在AS Terminal中切换目录:
输入 cd app/build/intermediates/classes/debug
(或鼠标左键拖动debug到terminal中)
输入java命令
Javah -jni com.gzjck.jnidemo.JniUtils
发现debug文件夹中生成了一个文件com_gzjck_jnidemo_JniUtils.h
看见这个.h文件是不是心里有点小激动呢
在src/main目录下新建一个jni文件夹。把这个.h文件剪切粘贴到jni文件夹
这个.h文件不需要编辑。
再在jni文件夹创建一个JniTest.c文件
文件内容
#include "com_gzjck_jnidemo_JniUtils.h" JNIEXPORT jint JNICALL Java_com_gzjck_jnidemo_JniUtils_addInt (JNIEnv *env, jobject obj, jint a, jint b){ return a + b; }
到这里主要的Jni调用代码已经写好,还有一些地方需要我们配置。
App目录下的build.gradle文件如下修改:
buildTypes { release { mini 4000 fyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' ndk{ moduleName "JniLib" //生成的so名字 abiFilters "armeabi", "armeabi-v7a", "x86" //输出指定三种abi体系结构下的so库。 } } debug{ ndk{ moduleName "JniLib" //生成的so名字 abiFilters "armeabi", "armeabi-v7a", "x86" //输出指定三种abi体系结构下的so库。 } } }
此时运行的话,AS还会警告“当前开发工具和NDK版本不兼容”
所以我们要在项目中的gradle.properties文件最后添加
android.useDeprecatedNdk=true
修改Activity文件代码
package com.gzjck.jnidemo; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.widget.TextView; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); JniUtils jniUtils = new JniUtils(); TextView tv = (TextView)findViewById(R.id.tv); tv.setText("调用Jni运算的结果为: " + jniUtils.addInt(1, 2)); } }
点击运行,在我的电脑上出现了一个错误:
D:\workspace\test\JniDemo\app\build\intermediates\classes\debug
这个文件夹无法删除
这里我的解决方法是先关闭AS,在系统的文件管理器中进行删除。
删除后再次打开项目,运行,成功了显示了运算结果1+2=3
好了今天的Demo就到这里了,代码下载地址http://download.csdn.net/detail/gzjck/9555157
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Native 绘图方法
- 如何成为一名专家级的开发人员
- gitinspector+jenkins 开发代码统计CI
- .NET微信公众号开发之公众号消息处理
- Node.js开发者必须了解的4个JS要点
- 使用nodejs开发cli项目实例
- 谷歌Chrome浏览器扩展程序开发小记
- javascript demo 基本技巧
- jQuery插件开发汇总
- nodejs开发微博实例
- Egret引擎开发指南之创建项目
- Android开发自学笔记(二):工程文件剖析
- Java开发人员需知的十大戒律
- Web 开发常用工具 大家自己查找下载
- 三种Web开发主流技术的性价评价
- 在B/S开发中经常用到的JavaScript技术第1/3页
- 深入Android开发FAQ的详解
- Android生存指南之:开发中的注意事项