1

/system/bin/...私は基本的にアプリケーションjavaコマンドから常駐するプロセスを開始したいと考えています。あらゆる種類のRuntime.process.exec()オプションを試しましたsuとのouputStream組み合わせも試しましたが、何もアプリケーションを起動できません。私はデバイスとエミュレーターでコードを使用していますが、両方ともうまくいきません。ADB Shell から同じコマンドを正常に実行できます (ルート権限があるため)。

デバイスはルート化されており、adb を使用してデバイスをデバッグすると # が表示され、adb 経由で su に入ることができます。私の検索に基づいて、(adbシェルからpsを実行した後)アプリケーションレイヤーから(ls->toolbox、ps->toolbox)などのlrwz--x--x権限で任意のコマンドを実行できることがわかりましたが、私はツールボックスにリンクされていない他のコマンドを実行できません。

これは実行されませんls:

Process p = Runtime.getRuntime().exec("su");
DataOutputStream os=new DataOutputStream(p.getOutputStream());
os.writeBytes("ls \n");
os.flush();

しかし、これは実行されlsます:

Process p = Runtime.getRuntime().exec("ls");

ここでこれについて何か助けを得ることができれば、本当に感謝しています! いろいろ調べた上で投稿しています。

4

2 に答える 2

2

コマンドの標準入力に送信ls \nするのではなく、実行してみてください。su

su -c ls

対話型シェルを開始するのではなく、昇格された特権でコマンドを実行するよう-cに要求するオプション。su(1)

于 2012-05-03T21:58:51.357 に答える
0

シェル スクリプト ファイル (例: init.sh) を作成し、次のコマンドを記述します。

リブート

このシェル スクリプトを Runtime.getRuntime().exec("sh init.sh"); で実行してみます。

これでドロイドが再起動した場合は、必要なコードを init.sh ファイルに記述して実行できます。

于 2012-05-03T07:57:15.317 に答える