【发布时间】:2011-10-23 07:52:25
【问题描述】:
作为对先前问题 (Android ioctl - root permissions and usage) 的后续处理,是否可以创建单独的本机可执行文件并将其打包到 APK 中?
该应用需要 root 访问权限并且不会进入 Android 市场,但我希望能够在不使用将额外可执行文件推送到设备上的脚本的情况下安装它。
【问题讨论】:
标签: android deployment jar apk android-ndk
作为对先前问题 (Android ioctl - root permissions and usage) 的后续处理,是否可以创建单独的本机可执行文件并将其打包到 APK 中?
该应用需要 root 访问权限并且不会进入 Android 市场,但我希望能够在不使用将额外可执行文件推送到设备上的脚本的情况下安装它。
【问题讨论】:
标签: android deployment jar apk android-ndk
有一种简单的方法可以将可执行文件打包到 APK 中,并让系统安装程序负责解压此可执行文件,请参阅 How to package native commandline application in apk?。
诀窍(测试到 Jelly Bean 4.3)是将文件命名为“libmyexecutable.so”并将其放入您的 Android 项目的libs/armeabi(我假设是 ADT 或 ant 构建)。包管理器会将文件解压到设备上的/data/data/your.package.full.name/lib(这是一个符号链接,出于向后兼容性的原因,所以可能在未来的某些Android版本中这将不再起作用),具有可执行权限。
请注意,该文件具有all 读取和执行权限,因此您也可以在其他应用中使用Runtime.getRuntime().exec() 或system()。
更新:
现在,您应该将libs/armeabi-v7a 用于 32 位 ARM 可执行文件,并且您可能还需要准备相同可执行文件的 64 位 ARM 版本。
【讨论】:
Runtime.getRuntime().exec("/data/data/your.package.full.name/lib/libmyexec.so",什么都没有发生(但相同的命令在 adb shell 中有效)。
Process p = Runtime.getRuntime().exec("sh"),获取数据输出流并执行dos.writeBytes("path/to/lib/libexec.so)。谢谢:)
您可以将其放入资产中,并在首次运行时将其复制到应用程序的私有目录中。设置可执行位后,您应该能够运行它。
【讨论】: