JNI---Java Native Inerface
1、编写 .java类
packagecom.vione.utils;
public class TestUtil {
static{
System.loadLibrary("testUtil");
}
public native String stringTest(String str);
}
2、根据.java类生产.h文件
(1)进入java目录 cd D:\AndroidStudioProjects\vione\app\src\main\java
(2)执行 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环境变量)
执行命令ndk-build

两个必要设置
1、在local.properties中设置NDK路径,也可以AndroidStudio中设置,我的NDK示例如下:

2、在app的build.gradle的android节点下设置:

这两处必要的地方该修改完毕后就可以调用我们生成的so文件了。
6.使用so文件
(1)可以拷贝到相应的引用文件中
(2)在TestUtil.java 文件loadLibrary方法

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