在网上搜索我遇到的问题后,我找到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“);
这不起作用,我找不到两个过程,我不知道这是不是正确的方法。
我做错了什么?
感谢。
答案 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}}