【发布时间】:2017-01-17 23:52:16
【问题描述】:
我的 32 位 ARM Android 应用程序带有 .so 文件,我在本机代码中使用 dlopen()。这很好用,我可以在/data/data/com.domain.app/lib/libX.so 位置打开它们。
如果我将 64 位二进制文件添加到我的包 (arm64-v8a) 并将其安装在 64 位 Android 设备上,那么将不存在 /data/data/com.domain.app/lib 目录。
经过一番调查,我发现 64 位 Android 设备上的 .so 文件最终位于不同的目录中:
/data/app/com.domain.app-1/lib/arm64
更糟糕的是,“-1”后缀各不相同,可能是“-2”或其他。
这是一种检查应用主目录中安装的内容的方法:
$ adb shell run-as com.steenriver.biplane '/system/bin/sh -c "pwd"'
/data/data/com.steenriver.biplane
$ adb shell run-as com.steenriver.biplane '/system/bin/sh -c "ls -al"'
drwxrwx--x u0_a108 u0_a108 2017-01-17 15:04 app_.gpg.classloader
drwxrwx--x u0_a108 u0_a108 2017-01-17 15:04 cache
drwxrwx--x u0_a108 u0_a108 2017-01-17 15:04 code_cache
drwxrwx--x u0_a108 u0_a108 2017-01-17 15:04 files
32 位设备将在此处列出 lib/ 条目。
是否有我可以执行的 Android 调用(使用 Java 或本机代码)来告诉我 .so 文件在哪里结束,以便我可以对它们进行 dlopen()?
【问题讨论】:
标签: android android-ndk shared-libraries arm64