
我正试图在一部已root的手机上以编程方式设置minmax时钟速度。根据一个建议,在对 这个问题我发现 一些文件 这说明我把数据写到。
/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));
我不知道下一步该怎么做。
EDIT: 按照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"。
EDIT: 这个问题现在已经偏离了原来的标题 所以我把最后的编辑发到这里来 另一个问题.
投票
与其将系统文件的权限改为全局可读可写(你真的不应该这样做),不如尝试直接使用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.comroottoolswikiUsage.