您的位置:首页 > 移动开发 > Android开发

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



顶部菜单栏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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息