0

ルート化された Android フォンのルート ディレクトリ (例: /data/) でテキスト ファイルを読み書きする方法はありますか?

InputStream instream = openFileInput("/data/somefile");

動作しません

4

2 に答える 2

3

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使用され、コマンドの出力を取得するために使用されます。

于 2015-09-11T00:03:06.010 に答える
1

求めていることを実行できるようにするには、SU バイナリを介してすべての操作を実行する必要があります。

お気に入り...

try {
      Process process = Runtime.getRuntime().exec("su");
      process.waitFor();
    } catch (IOException e) {
      e.printStackTrace();
    } catch (InterruptedException e) {
      e.printStackTrace();
    }

書き込みよりも読み取りの方が簡単です。最も簡単な書き込みは、標準の Java API を使用してアクセスできる場所にファイルを書き込み、su バイナリを使用して新しい場所に移動することです。

于 2012-09-11T16:06:05.593 に答える