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