我正在编写一个应用程序,将文件从其资产目录复制到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目录。
我通过重新安装目录来阅读,我可以将文件写入其中。实际上,这似乎适用于终端。但是在应用程序中,我无法弄清楚如何在执行下一个命令之前确保每个命令都已完成。
有人有任何建议吗?
答案 0 :(得分:1)
Runtime.getRuntime().exec
将从流程类返回Process
,您可以
getInputStream or getOutputStream or getErrorStream
从这些方法中,您可以获得命令执行结果,您可以检查它以确保命令
执行是非。
答案 1 :(得分:0)
我假设您应该检查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\"");
同样,请确保您了解允许系统权限的所有用户写入其他用户可以执行的任何文件的后果。