【问题标题】:how to write on /sys/ ? Android如何在 /sys/ 上写入?安卓
【发布时间】:2013-03-19 12:53:21
【问题描述】:

我正在尝试写入 "/sys/devices/virtual/timed_output/vibrator/amp" 文件。

我可以很好地阅读它,问题是当我尝试写它时。

这是我的代码:

public static void writeValue(String filename, String value) {
    //FileOutputStream fos = null;
    DataOutputStream os = null;
    try {
        /*fos = new FileOutputStream(new File(filename), false);
        fos.write(value.getBytes());
        fos.flush();*/

        Process p;

        p = Runtime.getRuntime().exec("su");
        os = new DataOutputStream(p.getOutputStream());  

       os.writeBytes(value + " > " + filename + "\n");
       os.writeBytes("exit\n");

       Log.w(TAG, value + " >> " + filename);

       os.flush();           
    } catch (IOException e) {
        Log.w(TAG, "Could not write to " + filename);
    } finally {
        if (os != null) {
            try {
                os.close();
            } catch (IOException e) {
                Log.d(TAG, "Could not close " + filename, e);
            }
        }
    }
}

我总是收到来自Log.w(TAG, "Could not write to " + filename);的反馈

我该如何处理呢?我必须使用一些权限吗?是否要全部重新制作以匹配 root 访问权限?

【问题讨论】:

  • 你得到了什么异常?
  • 好吧,我没有打印出来,但因为它是一个系统文件,我只是猜想这是一个“不可以”的文件来写 xD 我只是想知道如何正确地做到这一点,用 root 命令猜测,但我不知道怎么做,只需要完成最后一部分代码
  • 我没有常规的 API 吗?
  • 不,没有 api AFAIK 可以写入系统文件 xD,这是危险的东西
  • 我的意思是,没有 API 可以打开/关闭振动器吗?或者你还想做什么?

标签: java android file-io root


【解决方案1】:

普通 SDK 应用程序只能读取系统的该部分。你需要root你的设备,并在su shell中执行命令来写。

另外,amp 文件并非在所有设备上都存在。

【讨论】:

  • 我猜普通的SDK写不出来(我读得很好)。我很明显,我在问如何更改我的代码以便能够写在上面。我知道 amp 文件,我确实会照顾没有它的设备,该 APP 主要是为我和朋友准备的,所以,我不太在意,不过,如果文件没有,我已经实现了不做任何事情的方法存在。
  • @Dunnow 我有一个开源应用程序here,它使用 su 写入受保护分区上的文件。你可以尝试修改得到的那个
  • 我在看,不知道是否看懂 os.writeBytes("pm create-user \"" + name + "\"\n"); os.writeBytes("退出\n");什么是 pm create-user 或 exit\n ?
  • @Dunnow 啊,这与修改文件无关。我在读取文件并修改内容后使用cat命令覆盖文件。
  • 好吧,我不介意覆盖文件,只要它上面有正确的值,你能把代码 sn-p 给我使用吗?自从我使用命令和常规表达式 u_u 以来,这已经很长时间了,我应该使用类似 os.writeBytes(value + " > "+fileToWritte +"\n"); ?
【解决方案2】:
os.writeBytes(value + " > " + filename + "\n");

错了。试试

os.writeBytes("echo '"+value + "' > " + filename + "\n");

os.writeBytes("echo -n '"+value + "' > " + filename + "\n");

.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多