AndroidアプリからPIDのstraceコマンドを実行しようとしています。コードセグメントは以下のとおりです。
Runtime.getRuntime().exec("strace -p 20436 -o /mnt/sdcard/sampleTrace11.txt");
sampleTrace11.txtファイルが作成されましたが、空です。シェルコマンドプロンプトから同じコマンドを実行すると、ファイルにデータが書き込まれます。誰か助けてくれませんか。
権限に関連していると思います。run-as
fromを使用するのが良い方法ですadb shell
。たとえば、アプリケーションが であるとすると、次のようにしますcom.srooth.fancyapp
。
adb shell run-as com.srooth.fancyapp strace -p 20436 -o /mnt/sdcard/sampleTrace11.txt
これがうまくいかない場合は、 のパーミッションに関係があることがわかり、com.srooth.fancyapp
Java 内から実行したときに同じ結果が得られると期待できます。
考えられるパーミッションの問題:
アプリには SD カードへの書き込み権限がありません。この機能は、ユーザーとして実行されている他のすべてのアプリに継承されるためAndroidManifest.xml
、アクセス許可を指定することが重要です。
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
問題のプロセスがアプリケーションの一部でない場合は、別のユーザーとして実行されます。そのため、アプリケーションにはそれを検査する権限がありません。su -c
ルート化された電話を使用してコマンドラインに追加する以外に、これについてできることは何もありません。
他のいくつかのアイデア:
を使用する代わりに、クラスRuntime.getRuntime().exec()
を使用してみてください。ProcessBuilder
これにより、あらゆる種類の便利なことを実行できます。