Android 动态加载Dex以及so文件
问题背景
在动态加载Dex,项目中包含有so文件,网上资料显示:应用安装后,so文件会保存在/data/data/<package>/lib
目录下,但是我遇到问题是,在32位终端so文件在/data/data/<package>/lib
下,但是在64位终端上so文件并不在/data/data/<package>/lib
下。
解决方案
之前我是将so搜索路径固定到/data/data/<package>/lib
,现在是通过context.getApplicationInfo().nativeLibraryDir
获取,它是/data/app/<package-1>/lib
的映射,如果是64位机器,对应目录是lib64
。安装和覆盖安装/data/app/<package-1>
中包名后缀1和2会轮换,所以使用context.getApplicationInfo().nativeLibraryDir
方式获取最保险。
实例代码
完整代码如下:
private void test() {
String dexPath = this.getFilesDir().getAbsolutePath()