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 に変更しました。動作しませんでした。
- スレッドを使用してみました(extends AsyncTaskの代わりにRunnable を実装します)。動作しませんでした。
- "su -c" ("su -c /data/data/MyAppDir/CAL_Android") を使用してコマンドを実行します。動作しませんでした。
- 実行するコマンドをシェル スクリプト内に配置し、Android からシェル スクリプトを呼び出します。動作しませんでした。
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からネイティブアプリを起動できない理由への回答を追加しました。うまくいけば、これは同様の問題に直面している人に役立ちます。