Permissions 如何将Linux(Android)ARM64可执行文件分为大小部分?

Permissions 如何将Linux(Android)ARM64可执行文件分为大小部分?,permissions,executable,android-10.0,lzma,upx,Permissions,Executable,Android 10.0,Lzma,Upx,背景 我有一个Android应用程序,它使用本机ARM64可执行文件(基本上是GCC工具链,在第一次运行时提取到应用程序目录(/data/data/%package%/somePath)来做一些工作。由于文件位于/data/data/。不再具有可执行权限 已确认的解决方案 使可执行文件看起来像共享库(libsomething.so),由Android通过AndroidManifest.xml中的Android:extractNativeLibs=“true”提取到/data/app/%packa

背景

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

已确认的解决方案

使可执行文件看起来像共享库(libsomething.so),由Android通过
AndroidManifest.xml
中的
Android:extractNativeLibs=“true”
提取到
/data/app/%package%
dir中,并被允许具有可执行权限。符号链接可能有助于模拟以前的文件结构

问题

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

问题和提案

如何将可执行文件分为一小部分(分为
/data/app/%package%
和一大部分(或仅在
/data/data/%package%
中存在的可执行文件)?其思想是,小可执行文件只是“加载并运行”一个普通的。它的好处是,普通的可执行文件是用7zip压缩的,由于7zip使用了更好的压缩比,它使apk的大小更小

我一直在寻找使用的方向,但没有经验(注意,我必须在Mac机器上准备可执行文件(或Linux上有VM或Docker)才能在Android ARM64上运行)。我也一直在考虑创建7z sfx,但这似乎很棘手(同样,它必须在x86_64上创建并在ARM64上运行)。我还发现了一些问题(建议使用
memexec()
fexecve()
),但我不确定什么是最佳方式

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

另外,由于不同的原因,作为高级替代品的应用程序包和动态交付模块是不受欢迎的

UPX是Android 10的开箱即用(似乎是安全问题)