官网下载地址:https://developer.android.com/ndk/downloads/index.html
也可以去这里下载:http://www.androiddevtools.cn/
选择Linux版本即可。
解压缩下载得到的压缩包,移动到想要放置的位置。
我放在home/Android文件夹下
打开终端,输入gedit ~/.bashrc
打开配置文件,添加如下环境变量
export NDK_HOME=/home/sxy/Android/android-ndk-r13b
export PATH=$PATH:${NDK_HOME}
保存退出,输入source ~/.bashrc
使之生效。
在android studio中新建工程NDKDemo,然后在工程下新建一个module作为ndk库文件。我这里取名ndklibrary
在ndklibrary的src/main/java下新建java文件JNIUtils,并添加代码
package com.sxy.ndklibrary;
/**
* Created by sxy on 17-3-4.
*/
public class JNIUtils {
static {
System.loadLibrary("NDKLibrary");
}
public static native String getStringFromNative();
}
点击Build –> Make Module ‘ndklibrary’
编译成功后会在ndklibrary/build/classes/debug/com/sxy/ndklibrary下生成JNIUtils.class文件。
点击View –> Tool Windows –> Terminal,打开Android Studio中的Terminal 命令行工具。
把路径跳转至ndklibrary/src/main目录下。使用javah命令生成.h头文件。
sxy@sxy-ThinkPad-E560:~/AndroidStudioProjects/NDKDemo$ cd ndklibrary/src/main
sxy@sxy-ThinkPad-E560:~/AndroidStudioProjects/NDKDemo/ndklibrary/src/main$ javah -d jni -classpath ../../build/intermediates/classes/debug com.sxy.ndklibrary.JNIUtils
命令执行成功后会在main文件夹下生产jni文件夹,里面有生成的头文件com_sxy_ndklibrary_JNIUtils.h
在jni文件夹下新建com_sxy_ndklibrary_JNIUtils.c文件,用来实现native方法
#include "com_sxy_ndklibrary_JNIUtils.h"
/*
* Class: com_sxy_ndklibrary_JNIUtils
* Method: getStringFromNative
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_sxy_ndklibrary_JNIUtils_getStringFromNative
(JNIEnv *env, jclass jobj){
return (*env)->NewStringUTF(env,"this is my JNI!!!!");}
打开项目中的local.properties文件添加NDK路径
ndk.dir=/home/sxy/Android/android-ndk-r13b
打开ndklibrary中的build.gradle,在defaultConfig中添加
ndk {
moduleName "NDKLibrary"
abiFilters "armeabi", "armeabi-v7a", "x86"
}
注意:这里的moduleName须跟JNIUtils中System.loadLibrary("NDKLibrary");
里的名称相同。
此时编译项目遇到 Error: Your project contains C++ files but it is not using a supported native build system错误,参考http://blog.csdn.net/lanuage/article/details/53072303
在工程目录下的gradle.properties文件的末尾加上一句:Android.useDeprecatedNdk=true 。得以解决。
打开app的build.gradle文件,在dependencies中写入compile project(':ndklibrary')
添加依赖关系。