我正在尝试从Java Android App App 4.0(API Level 15)中打包并执行本机ARM二进制文件。
包装工作正常,将shell脚本和二进制文件添加到项目的assets文件夹(使用Android Studio),它们将与APK一起部署。
然后我按照these solutions将资产复制到文件系统。这是第一个问题,我似乎只能写入getFilesDir()
,但不是到 / data / local / tmp / 。非常好,所以我将文件复制到应用程序数据目录(解析为 /data/data/com.myapp/files / 。在此过程中,我还将文件的模式设置为是可执行的。
然后我尝试通过Runtime.getRuntime().exec()
执行二进制文件,这似乎适用于shellcripts但不适用于二进制文件。我可以用它来通过
cat /data/data/com.myapp/files/binary> /数据/本地的/ tmp /二进制
注意:cp无法正常工作,权限被拒绝。 Chmod 777再次运作。执行不起作用,权限被拒绝。我认为它与路径的安装方式有关。
通过adb执行整个过程。我可以看到该应用的用户ID与adb不同,因此可能与kernel limitations有关?我要求WRITE_EXTERNAL_STORAGE。
阅读this也意味着 / data / local / tmp / 应该是首选目的地。
现在的问题是:(如何)我可以提升我的应用程序的权限,以执行与adb相同的操作。
手机没有扎根。
答案 0 :(得分:0)
我通过执行一个shellcript(通过资产捆绑并在onCreate()方法中写入getFilesDir()
)解决了这个问题。这使用临时根环境来调用其他脚本,这些脚本在读/写时没有问题。
为什么它不会直接起作用,没有线索。
脚本位于GitHub。