2

私はAndroidが初めてです。システム内のファイルの名前を変更するシェル コマンドを実行しようとしています。私はそれへのルートアクセス権を持っています。

シェル コマンド:

$ su
# mount -o remount,rw /system
# mv system/file.old system/file.new

私はこれを試しましたが、うまくいきません:

public void but1(View view) throws IOException{
    Process process = Runtime.getRuntime().exec("su");
    process = Runtime.getRuntime().exec("mount -o remount,rw /system");
    process = Runtime.getRuntime().exec("mv /system/file.old system/file.new");
}
4

2 に答える 2

4

プロセスの .xml ファイルにコマンドを記述することで、同じプロセスを使用して複数のコマンドを実行できますOuputStream。このようにして、コマンドは、コマンドが実行されているのと同じコンテキストで実行されますsu。何かのようなもの:

Process process = Runtime.getRuntime().exec("su");
DataOutputStream out = new DataOutputStream(process.getOutputStream());
out.writeBytes("mount -o remount,rw /system\n");
out.writeBytes("mv /system/file.old system/file.new\n");
out.writeBytes("exit\n");  
out.flush();
process.waitFor();
于 2013-04-09T10:36:32.420 に答える
0

suroot への切り替えはアプリケーションには適用されず、 に適用されsu、 に到達する前に完了するため、各コマンドは と同じプロセスにある必要がありますmount

代わりに、次の 2 つの exec を試してください。

...exec("su -c mount -o remount,rw /system");
...exec("su -c mv /system/file.old system/file.new");

また、mount -o remount,rw /system失敗してmount -o remount,rw /dev/<proper path here> /systemも成功するシステムをいくつか見たことがあることに注意してください。「ここの適切なパス」はメーカーごとに異なりますが、プログラムで収集できます。

于 2013-04-09T10:52:06.483 に答える