1

背景

我有一个 Android 应用程序,它使用本机 ARM64 可执行文件(本质上是 GCC 工具链,/data/data/%package%/somePath在第一次运行时提取到应用程序目录())来做一些工作。由于Android 10中的更改文件/data/data/..不再具有可执行权限。

确认的解决方法

解决方法是使可执行文件看起来像共享库(libsomething.so),由 Android 提取到dir/data/app/%package%并允许具有可执行权限。符号链接可能有助于模仿以前的文件结构。android:extractNativeLibs="true"AndroidManifest.xml

问题

问题是所有可执行文件(又名新的“共享库”)都以 zip 压缩比打包到 android apk 中(因为 apk 本质上只是一个 zip 文件),如果它使用 7zip 存档并且总重量超过100Mb,这是 Android 上的应用程序限制(适用于 apk 文件)。

问题和建议

我如何将可执行文件分成一小部分(进入/data/app/%package%和大部分(或只是现有的可执行文件/data/data/%package%)?这个想法是小可执行文件只是“加载并运行”一个常规的。压缩常规可执行文件的好处使用 7zip,由于 7zip 具有更好的压缩比,它使 apk 的大小更小。

我一直在研究UPX的使用方向,但没有经验(注意我必须在 Mac 机器(或带有 VM 或 Docker 的 Linux)上准备可执行文件才能在 Android ARM64 上运行)。我也一直在考虑创建 7z sfx,但这似乎很棘手(再次,它必须在 x86_64 上创建并在 ARM64 上运行)。我还发现了一些类似的 QA(推荐memexec()fexecve()),但我不确定最佳方法是什么。

理想情况下,我希望有一些只接受 cmd 和常规可执行路径的小型“通用”ARM64 可执行文件(或者能够使用 Android NDK 从源代码编译它)。

PS。由于不同的原因,不希望将应用程序包和动态​​交付模块作为高级替代方案。

聚苯乙烯。UPX不适用于 Android 10(似乎是安全问题)。

4

0 回答 0