将包含二进制文件的文件夹结构复制到本机库文件夹

Copy folder structure containing binaries to native libraries folder

我想在设备上复制和执行一些预编译的二进制文件,问题是相对文件夹结构需要与原始包中的相同(我不能将所有二进制文件移动到根文件夹)。

到目前为止我发现的是如何将没有 .so 扩展名的二进制文件复制到 lib 文件夹 here. It works as expected, once installed I can locate the binary using context.getApplicationInfo().nativeLibraryDir,但是当我将目录与二进制文件放在一起时,它无法使用命令找到它。

进一步调查显示该文件夹 被复制到 apk。我可以通过解压缩 apk 并找到复制在 /lib/arm64-v8a/.

的二进制文件来确认这一点

既然 apk 没问题,我做的下一步是检查实际复制到设备的内容。这可以在 /data/app/app.name.com+random_hash/lib/ 中找到,我确认文件夹 不会被复制到 ,只有根文件夹中的二进制文件会被复制。

我想知道的是,负责复制本机库的代码是否位于设备上且无法更改,或者应用程序是否可以通过某种方式配置为复制文件夹结构?

示例回购:https://github.com/D4no0/copy_native_binaries

代码在设备上,OS 的一部分:

“Android OS 不支持子目录。

安装APK时,.so库会解压到/data/app/your.app/lib/目录下。该目录被添加到 System.loadLibrary 搜索的库路径中,以便可以找到它。 System.loadLibrary不支持目录结构,因此不会提取lib/下子目录中的.so文件。"

以上答案来自一位致力于 Android 的 Google 员工,来自以下问题: https://issuetracker.google.com/issues/63707864#comment4

干杯, 杰罗姆