JNI---Java Native Inerface
1、編寫 .java類
packagecom.vione.utils;
public?class TestUtil?{
static{
System.loadLibrary("testUtil");
}
public native String stringTest(String str);
}
2、根據(jù).java類生產(chǎn).h文件
(1)進入java目錄 cd?D:\AndroidStudioProjects\vione\app\src\main\java
(2)執(zhí)行 javah -d ../jni com.vione.utils.TestUtil

com_vione_utils_TestUtil.h

3.編寫.c文件
com_vione_utils_TestUtil.c
#include
JNIEXPORT?jstring?JNICALL?Java_com_vione_utils_TestUtil_stringTest
(JNIEnv?*env,jobject?obj,jstring?string)?{
return string;
};
4.在jni目錄下添加Android.mk文件(必須是這個名稱Android.mk)文件

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := demo //要生成的so庫的名稱,但實際為libdemo.so
LOCAL_SRC_FILES := demo.c //要使用的文件,剛才編寫的demo.c文件
include $(BUILD_SHARED_LIBRARY)
5.編譯so文件(必須配置ndk環(huán)境變量)
執(zhí)行命令ndk-build

兩個必要設置
1、在local.properties中設置NDK路徑,也可以AndroidStudio中設置,我的NDK示例如下:

2、在app的build.gradle的android節(jié)點下設置:

這兩處必要的地方該修改完畢后就可以調用我們生成的so文件了。
6.使用so文件
(1)可以拷貝到相應的引用文件中
(2)在TestUtil.java 文件loadLibrary方法

7、其他
在gradle.properties中添加 Android.useDeprecatedNdk=true
在build.gradle(app)中添加
sourceSets {
main{
jniLibs.srcDirs= ['libs']
jni.srcDirs= []
}
}