【发布时间】:2011-07-27 05:22:24
【问题描述】:
我有一个需要运行我编写的自定义二进制应用程序的 Android 应用程序。我已经使用 ndk 构建了二进制文件并将其打包在 res/raw 下的 apk 中
我做了这样的事情来首先运行 su 进程。
Process process;
process = Runtime.getRuntime().exec("su");
DataOutputStream os = new DataOutputStream(process.getOutputStream());
在此之后我该怎么做才能从资源中运行二进制文件?这里有另一个问题建议使用 AssetManager,但我不明白该怎么做。我检查了一些开源应用程序(android-wifi-tether 等),它们打包了二进制文件,但我在它们的源代码中的任何地方都没有看到 AssetManager,也不明白它们是如何做到的。
【问题讨论】:
-
您不能从资源中运行二进制文件。您必须将其复制到文件系统中允许可执行文件的位置。另请注意,“su”仅适用于一些根手机。
-
好的,所以这需要在应用程序第一次运行时完成..我会试一试
-
它可以工作,但文件不可执行。有没有一种java方法可以让它可执行,或者我只是做 Runtime.getRuntime().exec("chmod 770 /path/to/binary"); ?
-
通常最好为 chmod/fchmod 函数找到一个 java 包装器,或者从 ndk jni 代码中调用一个包装器,而不是启动一个单独的进程;但是,您的项目已经依赖于执行新流程的非官方能力,因此反对这样做的论据较弱。尽管您在路径中添加了对具有可用 chmod 可执行文件的系统的依赖项。
-
当心! 'libs' 文件夹在 android6 Galaxy s5 中不存在,因此此代码将导致异常。而是将库复制到应用程序目录下的“lib”目录。
标签: android c android-ndk