ルート化された Android フォンのルート ディレクトリ (例: /data/) でテキスト ファイルを読み書きする方法はありますか?
InputStream instream = openFileInput("/data/somefile");
動作しません
root ユーザーのみが /data フォルダーにアクセスできます。
SU バイナリを呼び出し、OutputStream を介して SU バイナリにバイトを書き込み (これらのバイトはコマンドです)、InputStream を介してコマンド出力を読み取ります。コマンドを
呼び出してcat
ファイルを読み取るのは簡単です。
try {
Process process = Runtime.getRuntime().exec("su");
InputStream in = process.getInputStream();
OutputStream out = process.getOutputStream();
String cmd = "cat /data/someFile";
out.write(cmd.getBytes());
out.flush();
out.close();
byte[] buffer = new byte[1024 * 12]; //Able to read up to 12 KB (12288 bytes)
int length = in.read(buffer);
String content = new String(buffer, 0, length);
//Wait until reading finishes
process.waitFor();
//Do your stuff here with "content" string
//The "content" String has the content of /data/someFile
} catch (IOException e) {
Log.e(TAG, "IOException, " + e.getMessage());
} catch (InterruptedException e) {
Log.e(TAG, "InterruptedException, " + e.getMessage());
}
ファイルの書き込みに OutputStream を使用しないでくださいOutputStream
。SU バイナリ内でコマンドを実行するためにInputStream
使用され、コマンドの出力を取得するために使用されます。
求めていることを実行できるようにするには、SU バイナリを介してすべての操作を実行する必要があります。
お気に入り...
try {
Process process = Runtime.getRuntime().exec("su");
process.waitFor();
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
書き込みよりも読み取りの方が簡単です。最も簡単な書き込みは、標準の Java API を使用してアクセスできる場所にファイルを書き込み、su バイナリを使用して新しい場所に移動することです。