Windows下Android ndk 配置
ndk包
本次安装用的是android ndk 版本为 android-ndk-r12b-windows-x86_64
环境变量配置
将解压后的ndk路径添加到PATH中,本机为“D:/ndk”
Android项目配置
1.新建Android项目,local.properties加入ndk.dir=D:\ndk
2.完成后,右键app -> new -> folder -> jnifolder
3.新建java类
public class HelloJni {
static {
System.loadLibrary("hello");
}
public native String sayHello();
}
4.gradle 配置
defaultConfig {
applicationId "nexecheck.kstech.com.test_android"
minSdkVersion 15
targetSdkVersion 24
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
sourceSets.main{
jniLibs.srcDir 'src/main/libs'
}
ndk{
moduleName 'hello'
}
}
需要在gradle.properties中设置android.useDeprecatedNdk=true
5.生成.h文件
需要在Java中使用调用NDK的方法,首先要先生成.h头文件,jni的.h文件很麻烦,我们可以通过javah命令自动生成。
在app/目录下运行命令:
javah -d src/main/jni/ -classpath build/intermediates/classes/debug/ com.example.jjz.jni.HelloJni 其中-d是生成.h文件的保存目录 -classpath是指定.class所在的目录,项目build成功之后,会在build/intermediates/classes/debug/目录里生成.class文件。 nexecheck.kstech.com.test_android.HelloJni是包名加上类名。 就可以在jni目录下得到一个com_example_jjz_jni_HelloJni.h的文件
6.实现.h文件
新建文件nexecheck_kstech_com_test_android_HelloJni.c文件实现sayHello方法。
#include <jni.h>
#include "nexecheck_kstech_com_test_android_HelloJni.h"
JNIEXPORT jstring JNICALL Java_nexecheck_kstech_com_test_1android_HelloJni_sayHello
(JNIEnv *env, jobject clazz){
return (*env)->NewStringUTF(env,"hello world jni");
}
7.创建成功后,进入project视图,在jni文件夹中创建Android.mk和Application.mk文件,内容如下:
Android.mk-----------------------------------------------------------
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := hello
LOCAL_SRC_FILES := nexecheck_kstech_com_test_android_HelloJni.c
include $(BUILD_SHARED_LIBRARY)
Android.mk-----------------------------------------------------------
Application.mk-----------------------------------------------------------
APP_MODULES:= hello
Application.mk-----------------------------------------------------------
详细配置请查阅
android_ndk文档:https://developer.android.google.cn/ndk/guides/application_mk.html
8.ndk-build
在../app/src/main/jni目录下,运行命令 ndk-build
结果:
D:\APPs\test_android\app\src\main\jni>ndk-build
[arm64-v8a] Compile : hello <= nexecheck_kstech_com_test_android_HelloJni.c
[arm64-v8a] SharedLibrary : libhello.so
[arm64-v8a] Install : libhello.so => libs/arm64-v8a/libhello.so
[x86_64] Compile : hello <= nexecheck_kstech_com_test_android_HelloJni.c
[x86_64] SharedLibrary : libhello.so
[x86_64] Install : libhello.so => libs/x86_64/libhello.so
[mips64] Compile : hello <= nexecheck_kstech_com_test_android_HelloJni.c
[mips64] SharedLibrary : libhello.so
[mips64] Install : libhello.so => libs/mips64/libhello.so
[armeabi-v7a] Compile thumb : hello <= nexecheck_kstech_com_test_android_HelloJni.c
[armeabi-v7a] SharedLibrary : libhello.so
[armeabi-v7a] Install : libhello.so => libs/armeabi-v7a/libhello.so
[armeabi] Compile thumb : hello <= nexecheck_kstech_com_test_android_HelloJni.c
[armeabi] SharedLibrary : libhello.so
[armeabi] Install : libhello.so => libs/armeabi/libhello.so
[x86] Compile : hello <= nexecheck_kstech_com_test_android_HelloJni.c
[x86] SharedLibrary : libhello.so
[x86] Install : libhello.so => libs/x86/libhello.so
[mips] Compile : hello <= nexecheck_kstech_com_test_android_HelloJni.c
[mips] SharedLibrary : libhello.so
[mips] Install : libhello.so => libs/mips/libhello.so