現在、ルートとしてコマンドを実行するために、以下のようなことを行っています。しかし、全体が少し手動のように見えたので、少しグーグルで検索してroottoolsを見つけました。それは推奨される方法ですか、それとももっと良い方法がありますか?
コマンドが終了するのを待ち、出力を読み取り、値を取得できるようにしたいと考えています。
public static void deleteSystemApp(Context context, String app)
{
final String MOUNT_RW = "mount -o remount,rw -t rfs /dev/stl5 /system; \n";
final String MOUNT_RO = "mount -o remount,ro -t rfs /dev/stl5 /system; \n";
final String RM_APP = "rm -rf " + app + "; \n";
Process process;
try
{
process = Runtime.getRuntime().exec("su");
DataOutputStream os = new DataOutputStream(process.getOutputStream());
os.writeBytes(MOUNT_RW);
Toast.makeText(context, RM_APP, Toast.LENGTH_SHORT).show();
//os.writeBytes(RM_APP);
os.writeBytes(MOUNT_RO);
}
catch(IOException e)
{
e.printStackTrace();
}
}
Chris Stratton が指摘した問題に関する更新: アプリの引数を urlencoding して、"something; rm -rf /" または "something && rm -rf /" のようなものを渡してデバイスをワイプできないようにしました。しかし、さらに検討した結果、私は議論をサニタイズするという考えを完全に捨てました。そして、私のコードのその部分を削除しました。なんで?
- 自分のデバイスでこれを行う必要があるのはなぜですか?
- 他の誰かが悪意のある引数を渡すことができる場合、デバイスは既に侵害されています。