android 读写文件so库,Android加载外部so库

前言

本篇作为记录,方便以后查阅。

正文

需求:需要加载其他厂商编译好的so库,需要从外部加载。

方法一:

直接将so库拷贝到app私有目录下,然后使用以下代码加载。

String soPath = Environment.getExternalStorageDirectory().toString() + "/libnative-lib.so";

File file = new File(soPath);

if (file.exists()){

File dir = context.getDir("libs", Context.MODE_PRIVATE);

String targetDir = dir.getAbsolutePath() + "/libnative-lib.so";

FileUtils.copySdcardFile(file.toString(), targetDir);

System.load(targetDir);

}

缺点:麻烦,不建议使用

方法二:

创建android native项目后,在Project视图下,app/src/main下创建jniLibs。如果对应的so只有32位arm的。需要在build.gradle文件下加入以下内容。

ndk{

abiFilters "armeabi-v7a"

}

1fe1d10d99db

image.png

方法三:

使用自定义配置,在Project的视图下,app目录下创建libs目录,然后将其他apk中的lib下的so库连目录一起拷贝过去,然后在build.gradle中加入以下代码

sourceSets {

main {

jniLibs.srcDirs = ['libs']

}

}