在终端中
在Java文件里导入静态库,以及待实现的静态本地方法,如
static {
System.loadLibrary("native-lib");
}
public static native String sayHello();
1.编写好Java文件后,然后运行命令
javac xxx.java
生成 .class 文件
2.进入 main/java/ 目录下,运行命令
javah -jni 【包名】.【class文件名】
生成 .h 文件
3.新建一个jni文件夹,新建main.c,把.h里面的内容复制进去,并实现里面的函数。
4.build.gradle中,在defaultconfig里,添加
ndk {
// abiFilters "armeabi"
abiFilters "armeabi-v7a", "x86"
}
同样在build.gradle中,在Android内容的后面,添加
// ndk-build模式
externalNativeBuild {
ndkBuild {
// Provides a relative path to your ndkBuild script.
path file("src/main/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.执行常规调用方法即可
总结一下流程:
编写静态方法(用java声明)–>编译生成class文件—>编译生成h文件—->编写C文件(用C/C++实现)
—->配置NDK—->配置so库—->在Activity调用(Java调用C/C++)。
参考网址:
https://blog.youkuaiyun.com/wangliu1102/article/details/78919742
如果使用 android.useDeprecatedNdk=true 代码则会出现版本更替情况,参考网址:
https://blog.youkuaiyun.com/zxc514257857/article/details/95507073