我正在尝试从 android 应用程序(Android Jelly bean (4.1.2))中启动本机应用程序。我可以从 adb 手动启动本机应用程序,但它不是从 android 启动的。本机应用程序位于AsyncTask内部,由doInBackground函数启动。我用来在 android 中启动应用程序的命令是:
process = Runtime.getRuntime().exec("/data/data/MyAppDir/CAL_Android > /data/data/MyAppDir/out.txt 2>&1 &");
我将命令简化如下,但仍然没有启动:
process = Runtime.getRuntime().exec("/data/data/MyAppDir/CAL_Android");
我调试问题的各种尝试:
- 启动一个简单的命令,例如来自 android 的“touch file.txt”。作品
- 将本机应用程序移至 /data/local/tmp。不工作。
- 将执行权限更改为 777 (rwxrwxrwx)。不工作。
- 除了应用程序的所有者之外,将所有者更改为 root。不工作。
- 尝试使用线程(实现 Runnable而不是extends AsyncTask)。不工作。
- 使用“su -c”(“su -c /data/data/MyAppDir/CAL_Android”)执行命令。不工作。
- 将要执行的命令放在 shell 脚本中并从 Android 调用 shell 脚本。不工作。
我检查了 dmesg 输出,我得到的错误是:
<7>[14156.022980] CAL_Android: unhandled page fault (11) at 0x0000000c, code 0x017
<1>[14156.023010] pgd = e6204000
<1>[14156.026306] [0000000c] *pgd=b0728831, *pte=00000000, *ppte=00000000
<4>[14156.032777]
<4>[14156.034242] Pid: 9408, comm: CAL_Android
<4>[14156.051821] CPU: 0 Tainted: G W (3.4.0-ge11b2fc-dirty #1)
<4>[14156.061557] PC is at 0x4012aa22
有人可以告诉我问题是什么吗?
编辑: dmesg 输出不正确。再检查几次后,我没有在 dmesg 中收到错误消息。坠机似乎是由于不同的未知原因而发生的。但是我已经添加了无法从android启动本机应用程序的原因的答案。希望这可以帮助面临类似问题的人。