【问题标题】:I can't change chmod to 777 in Android programmatically我无法以编程方式在 Android 中将 chmod 更改为 777
【发布时间】:2017-04-10 00:21:08
【问题描述】:

我有一个根设备,并且想要更改 /system/app 内的 apk(Prueba.apk) 的 chmod 权限,因此我将 RootTools 库与 BusyBox 一起使用。我的代码是:

        Command comando = new Command(0, "chmod 777 /system/app/Prueba.apk");
    try {
        RootTools.getShell(true).add(comando);
    } catch (IOException | RootDeniedException | TimeoutException ex) {
        ex.printStackTrace();
    }

但是当我检查时,在使用 Root 文件资源管理器运行该代码后,我发现 Prueba.apk 的 chmod 权限没有改变。

【问题讨论】:

    标签: java android root chmod roottools


    【解决方案1】:

    在运行需要 root 访问权限的代码之前,您应该尝试使用 su -c。

    /system/* 是只读的,命令应该由 root 运行,但首先/system 分区需要挂载为可读写。有多种方法可以做到这一点,但对于我的 Nexus 5x,这是可行的:
    mount -o rw,remount /system

    但是,此方法可能不起作用,因此请尝试使用不同的方式挂载 r/o here

    【讨论】:

    • 我确实使用 RootTools 库来执行 root 命令。
    【解决方案2】:

    问题是当我将系统分区挂载为 RW 时,我是这样做的:

            Command comando = new Command(0, "mount -o remount,rw -t yaffs2 /dev/block/mtdblock3 /system/app";
        try {
            RootTools.getShell(true).add(comando);
        } catch (IOException | RootDeniedException | TimeoutException ex) {
            ex.printStackTrace();
        }
    

    但正确的方法是让所有系统分区为 RW 而不仅仅是 /system/app 文件夹,所以我将代码更改为:

            Command comando = new Command(0, "mount -o remount,rw -t yaffs2 /dev/block/mtdblock3 /system";
        try {
            RootTools.getShell(true).add(comando);
        } catch (IOException | RootDeniedException | TimeoutException ex) {
            ex.printStackTrace();
        }
    

    然后我就可以完美地执行 chmod 777 命令了。

    【讨论】:

      猜你喜欢
      • 2014-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-08
      • 2018-02-26
      相关资源
      最近更新 更多