如何将文件保存到 Android /system 目录?

Posted

技术标签:

【中文标题】如何将文件保存到 Android /system 目录?【英文标题】:How to save files to Android /system directory? 【发布时间】: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目录。

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

有人有什么建议吗?

【问题讨论】:

【参考方案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.我只需要最低限度的权限即可执行此任务。

以上是关于如何将文件保存到 Android /system 目录?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 android 将文件保存到 Firebase 托管文件夹位置以获取图像?

如何使用 File API 将文件保存到 Android 11 中用户选择的位置?

如何使用 react native 将 pdf 文件保存到文件系统(ios/android),可以在应用程序外部访问

React-native-android - 如何将图像保存到Android文件系统并在手机的“图库”中查看

如何在 Android 上使用 MediaStore 将数据从相机保存到磁盘?

如何序列化对象并将其保存到 Android 中的文件中?