Android:如何从我的 APK 中将文件系统挂载到 RW 中? (当然是有根的)

Posted

技术标签:

【中文标题】Android:如何从我的 APK 中将文件系统挂载到 RW 中? (当然是有根的)【英文标题】:Android: how to mount filesystem in RW from within my APK? (rooted, of course) 【发布时间】:2011-07-25 18:45:22 【问题描述】:

我正在尝试编写一个在运行时将某些内容复制到 /system 分区的应用程序。我已经通过请求 SU 权限实现了以 root 身份运行终端命令的能力。我可以成功运行很多命令(在使用超级用户授予权限请求后)。但是,当我尝试将 /system 重新挂载为读/写时,什么也没有发生。我没有收到错误或崩溃,并且该命令似乎运行良好,但分区保持只读状态。这是我正在运行的命令(Droid X):mount -o rw,remount -t ext3 /dev/block/mmcblk1p21 /system,如果我从终端运行相同的命令,它就可以正常工作。这是我在我的应用程序中执行根命令的代码:

String cmd = "mount -o rw,remount -t ext3 /dev/block/mmcblk1p21 /system";
Process p = Runtime.getRuntime().exec("su");
DataOutputStream os = new DataOutputStream(p.getOutputStream());
os.writeBytes(cmd + "\n");          
os.writeBytes("exit\n");  
os.flush();

然后我有一些代码可以检查流式传输的 stdout 和 stderr 以查看发生了什么。谁能告诉我为什么这不起作用?

【问题讨论】:

【参考方案1】:

我想通了——该命令实际上是成功的,但似乎 RW 状态仅适用于应用它的会话。这样在 SU 下执行了一组命令后,下一组命令使 /system 处于 RO 状态。我所要做的就是在退出 SU 会话之前添加复制文件的命令。

【讨论】:

仅供参考,如果您对自己的问题的回答令您满意,可以接受您自己的回答。 文件系统不太可能立即以只读方式重新挂载 - 通常它保持可写状态,直到您重新挂载或重新启动。然而,升级到超级用户时缺乏粘性通常是人们试图做这件事时遇到的一个问题。您几乎肯定需要成为超级用户才能重新挂载 /system,并在其可写后更改其上的任何内容。 文件系统 RW 状态通常会持续存在,但就实际能够通过 APK 执行任何文件操作而言,它绝对不会那样工作。所有的文件操作都必须和RW命令在同一个进程中完成,否则不起作用。

以上是关于Android:如何从我的 APK 中将文件系统挂载到 RW 中? (当然是有根的)的主要内容,如果未能解决你的问题,请参考以下文章

如何在不启动模拟器的情况下在 Eclipse 中将 Android 项目编译为 .apk 文件?

Android:当我在 Sql server 中将状态更改为 false 时,如何从我的应用程序中自动注销?

我可以在 /sdcard 上下载 SQLite 数据库并从我的 Android 应用程序访问它吗?

如何从我的 json 文件中将某些内容打印到不和谐频道中? - 不和谐.py

如何在 Android 中将视频上传到 YouTube?

Android:以编程方式将 apk 复制到 /system/app