0

setCpu に似た CPU ガバナーを変更するアプリを作成しています。

私が抱えている問題は、ガバナー ファイル (システム ファイル) を書き込んでいるときに、IOException (不正なファイル番号) が発生し、ランダムに発生するように見えることがあります。

onCreate メソッドでルートをリクエストし、プロセスをフィールドとして保持しています。

private Process suProcess;

public void onCreate(Bundle ...) {
    ...    
    suProcess = Runtime.getRuntime().exec("su");
    ...

システムファイルを書く必要があるとき、これは私のコードです:

try {
    DataOutputStream out = new DataOutputStream(suProcess.getOutputStream());
    out.writeBytes("echo " + FILE_CONTENTS + " > " + SYSTEM_FILE);
    out.flush();
    out.close();
} catch (IOException e) { 
    e.printStackTrace();
}

これはルート権限を処理する適切な方法ですか? そして、なぜIOExceptionがランダムに発生するのですか? (うまくいくときとうまくいかないときがあります)

4

1 に答える 1

0

どうやらこの質問にはあまり関心がありませんが、私の解決策はここにあります。

電話

Runtime.getRuntime().exec("su");

onCreate で、ユーザーが使用中に SU ダイアログに対処する必要がないようにします。

次に、システム ファイルを書き込むときに、別の SU プロセスを作成します (アプリケーションには既に su 権限が必要です)。

try {
    Process suProcess = Runtime.getRuntime().exec("su");
    DataOutputStream out = new DataOutputStream(suProcess.getOutputStream());
    out.writeBytes("echo " + FILE_CONTENTS + " > " + SYSTEM_FILE);
    out.flush();
    out.close();
} catch (IOException e) { 
    e.printStackTrace();
}
于 2013-03-11T22:28:25.133 に答える