一、生成so库
1.1、创建Native项目
> 如图选择相应的Native选项,然后一直next下去即可
> 创建自己要加载so的java/kotlin文件
这里demo中创建的加载so的文件是MySoLib(这里可自主创建),需要着重注意的是这个文件的包名(全路径名),此处我的全路径名是"com.example.nativeprojecttest.testnative"(这个路径后在给到第三方使用这个so的时候会用到)
这里我的代码是:
package com.example.nativeprojecttest.testnative;
public class MySoLib {
static {
// System.loadLibrary("nativehook");
System.loadLibrary("nativeprojecttest");
}
public native String stringFromJNI();
}
那么在当前项目中使用这个so的时候,就可以直接用MySoLib来使用了,例如:
MySoLib lib = new MySoLib();lib.stringFromJNI();
在当前项目中用以上方式使用即可。
1.2、生成so
> 首先要在defaultConfig中配置ndk,内容如下:
defaultConfig {
applicationId "com.example.nativehook"
minSdk 24
targetSdk 34
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
ndk {
//选择要添加的对应 cpu 类型的 .so 库。
// abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a'
abiFilters 'armeabi-v7a', 'arm64-v8a'
// 还可以添加 'x86', 'x86_64', 'mips', 'mips64'
}
}
> 点击cmake
然后在build产物中可以找到相关的so文件了:
这样第一步就完成了,可以拿着这个so文件直接放到第三方的App中使用了。
二、第三方使用so
2.1 新建一个新第三方项目,新建的方式可以跟第一种一样,也可以新建一个全新的非Native的App项目,此处省略。
2.2 配置so路径
> 先创建存放so的目录
在module中创建libs目录并将第三方的so放到该目录下,如图所示:
> 在android节点按照如下方式配置:
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
> 调用so类创建
创建一个第一部分中说的那个类(路径相同,类名相同)
> 使用
然后使用方式跟上面方式相同,
MySoLib lib = new MySoLib();
lib.stringFromJNI();