Jni实现步骤
步骤
配置ndk路径
ctrl+shift+alt+s
,ndk location配置app下 build.gradle
1
2
3
4
5
6
7
8
9
10
11
12// 指定生成lib so文件的名称
defaultConfig{
ndk{
moduleName "MyJniLib"
}
}
// 指定jni路径
sourceSets{
main{
jni.srcDirs = ['src/main/jni','src/main/jni/']
}
}修改gradle.properties文件
1
android.userDeprecatedNdk=true
设置native接口
1
2
3
4
5
6
7
8package com.lyloou.secretjni;
public class Ujni {
static {
System.loadLibrary("MyJniLib");//之前在build.gradle里面设置的so名字,必须一致
}
public static native String getSec(int type, int hashcode);
}build项目,生成Ujni.class文件
通过Ujni.class文件生成头文件
1
javah -d jni -classpath MyProject/app/build/intermediates/classes/debug/com.lyloou.secretjni.Ujni
编写c文件
将上一步骤生成的头文件,放在main/jni文件夹下
另外新建一个cpp文件实现业务逻辑。获取so文件
编译运行后,在build/intermediates/ndk/debug/lib文件夹下得到一系列包含so文件的文件夹。只需要保留so文件即可运行项目,jni文件备份起来吧。
参考资料
Android NDK 运行错误:java.lang.UnsatisfiedLinkError: Couldn’t load XXX indLibrary returned null
方法1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18//目录结构一定要改成这个样子
|---src
|---main
|---jniLibs
|---arm64-v8a
|---libhello-jni.so
|---armeabi
|---libhello-jni.so
|---armeabi-v7a
|---libhello-jni.so
|---x86
|---libhello-jni.so
|---x86_64
|---libhello-jni.so
|---mips
|---libhello-jni.so
|---mips64
|---libhello-jni.so方法2[推荐]
1
2
3
4
5
6android {
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}