在Android中使用Runtime.getRuntime()创建新流程

时间:2014-04-01 09:03:29

标签: java android runtime.exec

在网上搜索我遇到的问题后,我找到that回答。

简而言之,我需要从Android应用程序中生成一个新进程,并运行一个简单的C程序。 我创建了简单的C程序,就像下一个程序一样:

int main()
{
 printf("This is the message before sleep() function\n");
 while(1){
    Sleep(1000); 
 }
 printf("This is the message after 1 second");
 return 0;
}

我在下一个命令(gcc myProgram.c -o myProgram)中使用Cygwin编写了C程序。

我将该文件放在assest文件夹中,然后在程序开始时将其复制到内部设备内存到文件夹"data/data/packageName/files/myProgram"

现在我想执行程序,当我检查时,adb shell - > ps我想看到两个同名的进程,但我找不到它。

我正在尝试运行这样的程序:

  

Runtime.getRuntime()。exec(“chmod 755   数据/数据/包/文件/ MyProgram“);

这不起作用,我找不到两个过程,我不知道这是不是正确的方法。

我做错了什么?

感谢。

1 个答案:

答案 0 :(得分:3)

您需要将二进制文件部署到文件系统,并将其部署到未标记为不可执行的位置(这就是为什么/sdcard/和其他常见位置无法帮助的原因)。您需要选择与平台匹配的可执行文件版本(armeabi,或x86或mips)。您应该确保您部署的文件具有eXecutable权限。

确保所有这一切的最简单方法是将二进制文件的arm版本复制到${project_root}/libs/armeabi/lib_myProgram_.so,并将其他相关ABI复制到/data/data/。现在,APK构建器将打包二进制文件,安装程序将解压缩它们(具有eXecutable权限)到/lib/lib_myProgram_.so your.package.name.with.dots Runtime.getRuntime().exec(getContext().getApplicationInfo().nativeLibraryDir + "lib_myProgram_.so");

完成所有这些操作后,您只需从Java调用(可以从Activity或Service调用以下行,可以访问 context ):

{{1}}