1、下载开发工具和NDK
- Android Studio下载
- NDK下载
- CMake : Android Studio默认使用CMake编译原生库,如果你只打算用ndk-build编译的话就不需要下载这个组件
- LLDB:使用它来调试本地代码
你可以使用SDK Manager来安装上述组件
2、创建项目,JNI包,JniTest.java类
package com.study.eric.jni;
public class JniTest {
static {
System.loadLibrary("app"); //jni模块加载名称
}
public native String getJniString(); //该方法是红色的,暂时不用理会
}
代码出现红色可查看我另一篇博客处理这个问题 http://blog.csdn.net/liangjiangli/article/details/72779342
3、执行javah生产c头文件
打开Terminal cd 到java包,然后执行命令:javah -classpath . -jni -o ../jni/JniTest.h com.study.eric.jni.JniTest,生产JniTest.h文件
为了方便使用javah命令使用,可以新建External Tools
$JDKPath$/bin/javah (我的是mac,windows的应该填入javah.exe的路径)
-classpath . -jni -o $ModuleFileDir$/src/main/jni/"JniTest.h" $FileClass$
$ModuleFileDir$/src/main/java
下面在JniTest.h所在目录新建com_study_eric_JniTest.c
#include "JniTest.h"
JNIEXPORT jstring JNICALL Java_com_study_eric_jni_JniTest_getJniString
(JNIEnv *env, jobject object) {
return (*env)->NewStringUTF(env, "Hello from JNI !");
}
4、执行ndk-build编译文件生产.so包
新建Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := app
LOCAL_LDFLAGS := -Wl,--build-id
LOCAL_SRC_FILES := \
/Users/daredos/Android/Study/app/src/main/jni/com_study_eric_JniTest.c \
LOCAL_C_INCLUDES += /Users/daredos/Android/Study/app/src/main/jni
LOCAL_C_INCLUDES += /Users/daredos/Android/Study/app/src/debug/jni
include $(BUILD_SHARED_LIBRARY)
新建Application.mk
APP_MODULES := app
APP_ABI := all
执行ndk-build
/Users/daredos/android-ndk-r13b/ndk-build (ndk安装路径)
$ModuleFileDir$/src/main
最终在目录生产libs文件夹
5、应用到项目
build.gradle添加.so包
sourceSets {
main.jni.srcDirs = []
main.jniLibs.srcDir "src/main/libs"
}
gradle.properties添加:android.useDeprecatedNdk=true
Java调用如下:
运行结果: