我正在尝试将应用程序生成的文件写入系统分区。由于我无法在我的应用程序中创建fileoutputstream,所以我在我的应用程序的数据目录中创建该文件,更正权限,然后将其移动到系统分区。
目前,下面的代码未命中/system的可写重新装载-出于测试目的,我已通过adb remount
成功执行了此步骤-因此这不应该是问题所在。
应用程序还成功获取根权限。
但下面的代码不起作用。它只创建文件,但不将其移动到系统分区。我犯了什么错?
FileOutputStream out = openFileOutput("myfile.test", MODE_WORLD_READABLE);
File f = getFileStreamPath("myfile.test");
writeDataToOutputStream(out);
out.close();
String filename = f.getAbsolutePath();
Runtime r = Runtime.getRuntime();
r.exec("su");
// Waiting here some seconds does not make any difference
r.exec(new String[] { "chown", "root.root", filename });
r.exec(new String[] { "chmod", "644", filename });
r.exec(new String[] { "mv", filename, "/system/myfile.test" });
最佳答案
我猜这只是第一次打电话给Runtime.exec()
:
r.exec("su");
瘦果根。
Runtime.exec()
的文档说,每个调用都作为单独的进程运行。因此,对exec
、forchown
、chmod
、mv
的所有后续调用都以当前应用程序进程的权限运行,因此失败。您可以编写一个小的shell脚本,然后将shell脚本作为参数传递给
su
。然后所有的命令都将以根权限运行。