0

我正在编写一个应用程序来更改类似于 setCpu 的 cpu 调节器。

我遇到的问题有时是在编写调控器文件(系统文件)时,我得到一个 IOException(错误的文件号),它似乎是随机发生的。

我在我的 onCreate 方法中请求 root 并将进程保留为一个字段:

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();
}

这是处理root权限的正确方法吗?为什么我会随机收到 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 回答