1

我正在尝试以编程方式在有根电话上设置最小/最大时钟速度。根据针对此问题提出的建议,我找到了一些文档,建议我将数据写入:

/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_min_freq

/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq

我已经有了

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

在我的清单中。我也可以成功读取这两个文件。当我尝试写入文件时,我得到了open failed: EACCES (Permission denied). 于是我试了...

Runtime.getRuntime().exec("su -c \"chmod 777 /sys/devices/system/cpu/cpu0/cpufreq/*\"");

...执行没有错误,但这没有任何区别。当我执行这两行中的第二行时发生错误:

File file = new File("/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_min_freq");
BufferedWriter bw = new BufferedWriter(new FileWriter(file));  

我不确定接下来我可以尝试什么。

编辑:按照 mrPjer 的建议,我运行了 adb shell。我输入su并导航到/sys/devices/system/cpu/cpu0/cpufreq. 然后我输入

chmod 777 scaling_max_freq

并通过键入确认权限已被接受

ls -l scaling_max_freq

果然它被列为-rwxrwxrwx。然后我输入

echo 124200 > scaling_max_freq

接着

cat scaling_max_freq

遗憾的是,据报道该文件未更改为“1512000”。

编辑:这个问题现在已经偏离了原来的标题,所以我将把最后一次编辑作为一个新问题发布。

4

1 回答 1

0

不要将系统文件的权限更改为全局可读/可写(您真的不应该这样做),而是尝试使用 root 访问权限直接编写文件。

您可以通过在 su 调用中使用 echo 而不是 chmod 轻松地做到这一点。例如

Runtime.getRuntime().exec("su -c \"echo 1234 > /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_min_freq\"");

exec 调用还应该返回一个 Process 对象,您可以在该对象上调用 waitFor() ,它将为您提供调用的返回码。如果这与零有任何不同,则说明出了点问题。

最后,确认您确实获得了 root 访问权限 - 执行 su 请求时,是否会弹出一个对话框询问您是否允许该操作?

此外,由于您正在编写支持 root 的应用程序,请查看 RootTools 库:https ://code.google.com/p/roottools/wiki/Usage 。

于 2014-11-13T15:56:49.190 回答