【问题标题】:How to save files to Android /system directory?如何将文件保存到 Android /system 目录?
【发布时间】:2012-01-04 01:13:28
【问题描述】:

我正在编写一个应用程序,它将文件从其资产目录复制到 Android 的 /system 目录。

我觉得我正在接近实现这一目标,但我还没有完全做到。这是我尝试过的策略:

首先,我尝试通过以下方式更改/system目录的权限:

Runtime.getRuntime().exec("su");
Runtime.getRuntime().exec("mount -o rw,remount -t yaffs2 /dev/block/mtdblock4");
Runtime.getRuntime().exec("chmod -R 777 /system");

其次,我尝试将文件写入/system目录。

我通过重新挂载目录读取到,我可以向其中写入文件。事实上,这似乎适用于终端。但是在应用程序中,我无法弄清楚如何确保每个命令在执行下一个命令之前完成。

有人有什么建议吗?

【问题讨论】:

    标签: android file root save


    【解决方案1】:
    Runtime.getRuntime().exec
    

    会返回一个Process,从进程类中,可以

    getInputStream  or getOutputStream or getErrorStream
    

    通过这些方法,你可以得到命令的执行结果,你可以检查它以确保命令 执行对或错。

    【讨论】:

      【解决方案2】:

      我假设exec() 方法有一个返回值,您应该检查它以查看执行是否正常。

      但我认为你在尝试执行这一系列命令时有几个错误:

      • su 只能影响自己的进程和子进程。你执行它没有参数,所以它什么都不做。下一个 exec() 方法从头开始使用您的进程的确切权限,而不是您可能期望的提升权限。
      • 您的mount(8) 命令似乎不正确:您没有说要操作哪个挂载点。 (不要忘记一个设备可能安装在多个位置。)
      • 你的chmod(1) 调用也不能以特权运行并且设置的权限太开放了。也许您不关心设备的安全性,这很好,但请确保这就是您想要的。

      我相信您的mount 命令应该看起来更像:

      Runtime.getRuntime().exec("su -c \"mount -orw,remount /system\"");
      

      而且我相信您的 chmod 命令应该看起来更像:

      Runtime.getRuntime().exec("su -c \"chmod 777 /system/fonts\"");
      

      再次,请确保您了解允许系统权限的所有用户写入其他用户可以执行的任何文件的后果。

      【讨论】:

      • 感谢您的建议,但您建议仅写入文件的最低权限设置应该是多少?此外,一个潜在的解决方案是否可以在文件写入后立即将权限更改回正常?
      • 说真的不要碰权限!如果您以 root 身份执行,则权限无论如何都无关紧要。
      • 但是,应用程序的用户不是唯一能够访问这个的人吗?其他人怎么会做到这一点?你认为重置权限是个好主意吗?
      • @Michael:这真的取决于你想要完成什么。 为什么您希望系统上的每个用户都能够修改/system 下的所有内容?你想解决什么问题?
      • 我的应用程序正在尝试使用根功能,基本上只是将文件写入只读目录。在这种情况下,/system/fonts.我只需要最低限度的权限即可执行此任务。
      猜你喜欢
      • 2012-09-10
      • 1970-01-01
      • 2020-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-23
      • 2019-06-21
      • 1970-01-01
      相关资源
      最近更新 更多