如何构建内置自定义可执行二进制文件的Android APK?
需求可行性结论
完全可以实现,不需要走运行时下载的方案,直接内置到APK即可。
推荐实现方式
有两种常用的内置方案,你可以根据自己的需求选:
方案1:放到jniLibs目录(最省事)
- 把你编译好的不同ABI架构的自定义ifconfig二进制,分别放到项目
src/main/jniLibs下对应架构的子目录(比如arm64-v8a、armeabi-v7a、x86_64等) - 把二进制文件重命名为
lib[自定义名称].so的格式,比如可以改成libmy_ifconfig.so,哪怕它本身不是动态库也没关系,系统只会识别后缀自动完成解压 - 应用安装时系统会自动将对应设备架构的文件解压到应用私有原生库目录,路径可以通过
context.getApplicationInfo().nativeLibraryDir获取,完整调用路径为nativeLibraryDir + "/libmy_ifconfig.so" - 系统解压后会自动赋予可执行权限,你直接用
ProcessBuilder调用该路径即可,不需要自己处理文件IO和权限配置
- 把你编译好的不同ABI架构的自定义ifconfig二进制,分别放到项目
方案2:放到assets目录
- 把不同ABI的二进制文件按自己的规则分类放到
assets目录下 - 应用首次启动时,判断当前设备的ABI架构,读取对应版本的二进制文件流,写入到应用私有目录(比如
context.getFilesDir()或者context.getCacheDir()) - 写入完成后调用文件的
setExecutable(true)方法,给文件添加可执行权限 - 后续直接调用私有目录下的文件路径即可
- 把不同ABI的二进制文件按自己的规则分类放到
注意事项
- 你的自定义ifconfig二进制必须提前针对所有你要适配的ABI架构完成交叉编译,否则会出现架构不匹配无法运行的问题
- 不要把二进制文件写入公共存储目录,Android 7.0及以上版本禁止在公共存储路径执行二进制文件,仅应用私有目录支持可执行权限配置
- 如果你自定义的ifconfig功能需要高权限操作,需要额外处理Root授权相关逻辑,普通应用权限可能无法运行部分网络相关操作
内容的提问来源于stack exchange,提问作者Quick33
相关产品推荐
相关产品推荐

