2012-01-04 83 views
2

我正在编写一个应用程序,将文件从其assets目录复制到Android的/ system目录。如何将文件保存到Android /系统目录?

我觉得我正在接近实现这一点,但我不是那里。这里是我试图策略:

首先,我试图改变/系统目录的权限:

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

我假设有一个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\""); 

再次,某些你了解的后果允许所有具有系统权限的用户写入其他用户可以执行的任何文件。

+0

感谢您的建议,但您会建议应该只是写入文件的最低权限设置?另外,一旦写入文件,潜在的解决方案是否可以将权限更改回正常? – 2012-01-04 04:44:00

+0

认真地不要权限!如果你以root身份执行,权限无论如何都不重要。 – slayton 2012-01-04 05:29:50

+0

但是,应用程序的用户不会是唯一能够访问此应用程序的用户吗?其他人会如何解决这个问题?你认为重置权限是个好主意吗? – 2012-01-04 06:16:54

1
Runtime.getRuntime().exec 

会返回一个Process,从工艺类,可以

getInputStream or getOutputStream or getErrorStream 

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

+0

这也是一个非常有用的建议,谢谢。 – 2012-01-04 04:44:26

相关问题