第一步编写需要交互的java类
public class SafetyUtil {
private static String jwtKey;
static {
System.loadLibrary("SafetyFile");
}
public static String getKey() {
if (jwtKey == null) {
jwtKey = getJwtKey();
}
return jwtKey;
}
private static native String getJwtKey();
}
第二步进入到这个类的路径下 执行javac SafetyUtil.java
D:\Android\AndroidCode\YN_Finance\app\src\main\java\com\yn\finance\util>javah -jni SafetyUtil.class
第三步 回退到包名外执行javah -jni com.yn.finance.util.SafetyUtil
D:\Android\AndroidCode\YN_Finance\app\src\main\java>javah -jni com.yn.finance.util.SafetyUtil
第四步 创建SafetyFile.c 并编写
#include <com_yn_finance_util_SafetyUtil.h>
//Java_com_yn_finance_util_SafetyUtil_getJwtKey
JNIEXPORT jstring
JNICALL Java_com_yn_finance_util_SafetyUtil_getJwtKey
(JNIEnv *env, jclass jobj) {
return (*env)->NewStringUTF(env,"xxx");//获取加密的key
}
第五步 将生成的.h文件拷贝到jni中 并编写Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
#LOCAL_MODULE表示生成的库的名字,前面的lib和后缀名不用写
LOCAL_MODULE := SafetyFile
LOCAL_SRC_FILES := SafetyFile.c
include $(BUILD_SHARED_LIBRARY)
编写Application.mk
APP_MODULES := SafetyFile
APP_ABI := all
第六步 进入jni文件夹
D:\Android\AndroidCode\YN_Finance\app\src\main\jni>ndk-build
会生成so文件夹
第七步
app.gradle中配置
defaultConfig{
...
ndk {
abiFilters "armeabi"
}
}