在Android应用程序中挂载R / W系统以编辑只读文件

时间:2011-08-20 02:06:32

标签: android system mount

我如何在我的应用程序中编辑/ system / Directory中的文件?

我必须让系统R / W写吗?

我试过了:

process = Runtime.getRuntime().exec("su");
os = new DataOutputStream(process.getOutputStream());
os.writeBytes("mount -o remount,rw /system\n");
os.writeBytes("exit\n");
os.flush();
process.waitFor();

以及许多其他人,但没有成功。

如果有人可以帮助我,我非常感谢! :) 此外,如果我最终成功,它将适用于所有root电话? 或者在某些手机中有所不同?

2 个答案:

答案 0 :(得分:6)

我用:

    os.writeBytes("mount -o remount rw /system/\n"); 
    //instead of a comma, I have a space. 
    //When I tried it with a comma, mine didn't work either.

这使我能够成功登上。

如果你在此之后退出,当然它将无法正常工作。您必须保持在同一个进程中并使用linux命令编辑该文件。

我不知道如何编辑文件,但我建议使用Google搜索如何在linux终端中执行操作,然后将正确的代码放在os.writeBytes("CODE_HERE");

尽管就安装过程而言,我不知道该命令是否会普遍适用。幸运的是,可以在我的设备上工作。

修改
我现在使用RootTools:http://code.google.com/p/roottools/downloads/list
这是Wiki页面:
http://code.google.com/p/roottools/w/list

但我现在正在使用:

RootTools.remount(file, mountType);
//For example:
RootTools.remount("/system/", "rw");

我认为这是普遍的

答案 1 :(得分:1)

编辑:以下所有版本的代码都不能将系统安装为RW。 *阅读以下评论以了解原因。 解决这个问题并不是一个简单的命令。

Edit1:我继续使用超级用户apk,设置标签,并在最后一项“点击”,以更新su二进制文件。有了这个更新,下面的一切都无法正常工作。

Edit2:在这里开始与我自己进行一次完整的对话。修复当前最新的二进制文件位于帖子的底部

=============================================== ===================================

了解如何做到这一点!第二天的努力,终于找到了!!!!! 尝试了几件事,回答是一个简单的改变模式,

我做了什么:

第一版代码:(不起作用)

String[] mountRW = { "su", "-c",
"chmod  777 /system/etc/build.prop"};

String[] mountRO = {"su", "-c",
"chmod  755 /system/etc/build.prop"};

//TODO REMOVE testing purposes          
File file2 = new File("/system/build.prop");

//Make file Read-Write
process = Runtime.getRuntime().exec(mountRW);
process.waitFor();

//TODO REMOVE testing purposes
Log.d("MOUNT RW?", "RW WRITABLE? "+ file2.canWrite());

///////////////////////
// process the file
//////////////////////

// After editing finish,
//make Read Only file again
process = Runtime.getRuntime().exec(mountRO);
process.waitFor();

//TODO REMOVE
Log.d("MOUNT RO?", "RO WRITABLE? "+ file2.canWrite());

我没有粘贴一些try catch案例。 另外我还有另一个问题..我在版本2中解决了它。这个小问题是,我要求su命令的特定用户,并且用户必须接受RO的SU cmd,RW的SU cmd。和我程序中其他东西的另一次。 在第二个版本我使用泛型su命令,因此用户必须只接受一次SU权限,并且我使用输出流。

代码版本2(推荐)(无效)

String mountRW = "chmod  777 /system/build.prop";
String mountRO = "chmod  755 /system/build.prop";

//TODO REMOVE
File file2 = new File("/system/build.prop");

//Make file Read-Write
process = Runtime.getRuntime().exec("su"); //Generic SU Command
os = new DataOutputStream(process.getOutputStream());
os.writeBytes(mountRW + " \n");
os.writeBytes("exit\n");
os.flush();
process.waitFor();


//TODO REMOVE
Log.d("MOUNT RW?", " RW WRITABLE? "+ file2.canWrite());

////////////////////////////
/// mod the file
///////////////////////////

// After editing finish, make Read Only file again
process = Runtime.getRuntime().exec("su");
os = new DataOutputStream(process.getOutputStream());
os.writeBytes(mountRO + " \n");
os.writeBytes("exit\n");
os.flush();
process.waitFor();

//TODO REMOVE
Log.d("MOUNT RO?", "RO WRITABLE? "+ file2.canWrite());
  • 这两个代码都需要设备上的Root。
  • 两个版本都不包含catch案例。 (Eclpise会为你找到它们)
  • 查看您的logcat(adb logcat),看看确实有效!
  • 使用最新的su二进制文件,此代码稍有变化。更改模式命令需要4位数。 0777表示rw权限,0755表示ro权限!
  • 此代码由您自己创建,对您的设备无效。

只安装built.prop RW,然后将其安装回RO。 虽然如果你改变它,你可能会搞砸你的设备!小心!