0

AndroidアプリからPIDのstraceコマンドを実行しようとしています。コードセグメントは以下のとおりです。

Runtime.getRuntime().exec("strace -p 20436 -o /mnt/sdcard/sampleTrace11.txt");

sampleTrace11.txtファイルが作成されましたが、空です。シェルコマンドプロンプトから同じコマンドを実行すると、ファイルにデータが書き込まれます。誰か助けてくれませんか。

4

1 に答える 1

0

権限に関連していると思います。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これにより、あらゆる種類の便利なことを実行できます。

    • プロセスが完了するまで待ちます
    • その標準出力を見てください
    • その標準誤差を見てください
    • その戻りコードを取得します。
于 2013-02-11T21:46:32.063 に答える