Android 加载sdcard中的so库
项目背景
最近项目与第三方合作,对方提供so接口,我们进行实现,要求我们将so库放在sdcard中。
我们知道sdcard中的so没有执行权限,那么直接通过dlopen打开sdcard中so的方式并不可取。不得已,在网上找的一种解决方法:将sdcard中的so库拷贝到应用的私有libs库,然后再使用dlopen方式进行打开。
当然dlopen是在c/c++里面进行调用的,如果我们需要java层面进行调用的话,可以使用System.load方法。
实现
1.拷贝sdcard so至 应用私有libs中
工具类方法如下:
public class NativeLibraryLoader {
public static boolean loadLibrary(Context context, String libPath, String libName) {
// 获取应用的私有模式的libs目录。
File libs_dir = context.getDir("libs", Context.MODE_PRIVATE);
Log.e("NativeLibraryLoader", libs_dir.getAbsolutePath());
String new_file_name = libs_dir.getPath() + "/" + libName;
String old_file_name = libPath + "/" + libName;
if (!copyLibrary(new_file_name, old_