安卓开发中如何在应用内调用可执行文件(如 adb 等)

2020-05-01 21:17:53 +08:00
 FlyfishXu

最近在做的工程需要在 apk 中调用 adb 等可执行文件,目前的思路是在将所需要的文件放在 res/raw 下,然后在需要调用的时候复制到 data/data/com.xxx.xxx/files 下,然后 chmod 0775 获取执行权限再通过 Runtime 执行。 这套方案在 Android 类原生系统上工作正常(如 Piexel Experience,RR,Lineage,Mokee 等),但是在部分深度定制的系统( MIUI 、EMUI )上遇到了: java.io.IOException: Cannot run program "/data/user/0/com.xxx.xxx/files/./adb": error=13, Permission denied 的问题

详细代码如下:

copyADB(filepath = R.raw.adb, filename = "adb") //提取文件到 com.xxx.xxx/files/下

Runtime.getRuntime().exec("chmod 0775 ${filesDir}/adb") //赋予执行权限

Runtime.getRuntime().exec("${filesDir}/./adb start-server") //启动 adb 服务(报错即为这一步)

望有类似开发经验的大牛解答 感激不尽

1247 次点击
所在节点    问与答
2 条回复
HaveYouTall
2022-09-19 12:40:16 +08:00
我也是遇到这个问题,请问你解决了吗,有没有大牛能够帮忙解答一下呀,谢谢啦
FlyfishXu
2023-08-09 23:45:04 +08:00
@HaveYouTall 不好意思好久没上 V2EX 了 解决了 我为此写了篇博客 可参考: https://flyfishxu.com/pack-elf-into-apk/

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/667962

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX