【问题标题】:Cyanogenmod change permission to system filesCyanogenmod 更改系统文件的权限
【发布时间】:2015-09-06 09:49:40
【问题描述】:

我已经为 ROOT android 设备构建了一个应用程序。它是开源的,源代码是here。 我的问题是,当代码尝试读取文件“/sys/block/mmcblk0/queue/scheduler”时,我收到此错误

06-20 16:17:10.190: W/System.err(7458): java.io.FileNotFoundException: /sys/block/mmcblk0/queue/scheduler: open failed: EACCES (Permission denied)

这只发生在 cyanogenmod 操作系统中,我也尝试过使用 carbon 操作系统并且工作正常! 请注意,即使通过 adb 更改权限,我也无法读取文件。

当我以 root 身份通过 adb shell 连接到我的设备并点击以下命令时

cat /sys/block/mmcblk0/queue/调度器

我得到这个输出

noop deadline [row] cfq 

清单

...
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.ACCESS_SUPERUSER" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!--These permissions needed for ads-->
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
...

读取内容文件的函数

public static String getStringOfFile(String file) {
    String cpuFreq = "";
    RandomAccessFile reader;
    try {
        reader = new RandomAccessFile(file, "r");
        cpuFreq = reader.readLine();
        reader.close();
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    return cpuFreq;
}

【问题讨论】:

    标签: android permissions cyanogenmod


    【解决方案1】:

    您收到错误只是因为the file does not exist。看起来您正在尝试访问一些调度程序文件,但这些文件的位置通常取决于内核实现。您可以确保不会在所有内核的同一位置找到该特定文件,也不会出现在每个设备上。

    【讨论】:

    • 该文件存在于路径中。我已经用 adb shell 进行了检查。当我通过设备中的 adb shell 以 root 身份连接时,我也得到了这个输出:noop deadline [row] cfq
    • 好的,这是权限问题。您无法使用 Java 代码访问该文件。使用cat命令以超级用户权限读取文件。
    • 我真的无法理解这里到底发生了什么。我已经尝试了很多代码,但没有。我也试过这个stackoverflow.com/questions/3021054/…。检查 zed_0xff 帖子。请记住,我不能只读取该文件“/sys/block/mmcblk0/queue/scheduler”。例如,我可以很好地读取文件“/sys/devices/system/cpu/cpu0/cpufreq/stats/time_in_state”!
    猜你喜欢
    • 2012-08-03
    • 2015-04-02
    • 1970-01-01
    • 2014-08-28
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 2012-12-29
    相关资源
    最近更新 更多