写文件到/ System(Write files to /system)

2019-06-25 22:19发布

我知道这已经被问了很多,但从来没有回答。 我definetly需要将文件写入根有没有其他解决办法。 我目前使用此代码,但它并没有显示任何在/系统/新。 我想从我的资产复制文件到/ System文件夹(与它的子目录的)

public void installFiles(View v) {
            try {
        Runtime.getRuntime().exec("su");
    } catch (IOException e) {
        mDebugView.append(e.toString());
    }
    copyPath("system/bin", "/system/bin/");
    copyPath("system/lib", "/system/lib/");
    copyPath("system/etc", "/system/etc/");
    copyPath("system/etc/audio", "/system/etc/audio/");
    copyPath("system/etc/soundimage", "/system/etc/soundimage/");
    copyPath("system/lib/soundfx", "/system/bin/soundfx/");
}

public void copyPath(String from, String to) {
    mDebugView.append("Copying path assets/" + from + " to " + to + "\n");
    AssetManager assetManager = getAssets();
    String[] files = null;
    try {
        files = assetManager.list(from);
        for (String filename : files) {
            mDebugView.append(filename + "... \n");
            if (new File(filename).isFile()) {
                mDebugView.append("Copying " + filename + "\n");
                InputStream in = null;
                OutputStream out = null;
                in = assetManager.open(filename);
                out = new FileOutputStream(to);
                copyFile(in, out);
                in.close();
                in = null;
                out.flush();
                out.close();
                out = null;
            }
        }
    } catch (IOException e) {
        Log.e(this.getClass().toString(), e.toString());
        mDebugView.append(e.toString() + "\n");
    }
}

private void copyFile(InputStream in, OutputStream out) throws IOException {
    mDebugView.append("..");
    byte[] buffer = new byte[1024];
    int read;
    while ((read = in.read(buffer)) != -1) {
        out.write(buffer, 0, read);
    }
}

Answer 1:

您的

Runtime.getRuntime().exec("su");

什么也没做。 作为创建过程,然后释放。 要移动的文件,你需要使用猫二进制与苏。 IE

Runtime.getRuntime().exec("su cat filepath1 > filepath2");

尽可能多的命令,你想这样做,会更好地得到苏的流程实例,然后执行所有的移动指令的一次。

另外请注意,您可能需要安装系统分区RW,因为它很可能不是R / W默认。



Answer 2:

你不会看到任何变化/system ,因为它安装为只读默认。 请确保您写入文件之前重新安装它。 虽然如其他人所说su应该用命令一起使用。



Answer 3:

我不停地挖,我已经找到一种方法来做到这一点。

  1. 一些尝试后,我的ROM(更准确地说/系统文件夹),使严重损坏,我总是看见了errorstream输入:“不许可” - >重新安装ROM与湿巾

  2. 我复制文件到外部存储(在这种情况下/ SD卡,但要知道,这可能是另一条路径 - 使用环境对象来获取路径)。 我提取的所有子文件夹的主要文件夹。

  3. 新代码前几次开了SU会话,又闭上了。

     Process proc = runtime.exec("su"); new ProcessReader(proc).start(); new ErrorReader(proc).start(); DataOutputStream os = new DataOutputStream( proc.getOutputStream()); os.writeBytes("chmod 755 /system/" + "\n"); os.writeBytes("find /sdcard/.beats_cache/systembin -exec mv '{}' /system/bin +\n"); os.writeBytes("find /sdcard/.beats_cache/systemlib -exec mv '{}' /system/lib +\n"); os.writeBytes("find /sdcard/.beats_cache/systemetc -exec mv '{}' /system/etc +\n"); os.writeBytes("find /sdcard/.beats_cache/systemetcaudio -exec mv '{}' /system/etc/audio +\n"); os.writeBytes("find /sdcard/.beats_cache/systemetcsoundimage -exec mv '{}' /system/etc/soundimage +\n"); os.writeBytes("find /sdcard/.beats_cache/systemlibsoundfx -exec mv '{}' /system/lib/soundfx +\n"); os.writeBytes("exit\n"); os.flush(); 


Answer 4:

在开始运行“苏”可能不够有写权限/系统文件夹。 根资源管理器和其它文件管理应用程式都必须重新安装/系统R / W和挂载回为只读。 在回答这个问题显示命令重新挂载/系统路径。 答案是利用亚行,但运行在设备上应该工作一样好。

在一个侧面说明,它可能只是更容易执行系统命令移动的文件,而不是自行移动。 在我的LG擎天柱牛逼运行的CyanogenMod 7.x中,在/系统/ XBIN有cpmv是可以复制/移动文件,而无需重新挂载/系统(如果是的话,大概只有通过su mvsu cp )。 我不知道有足够的了解机器人的这部分肯定知道,如果你(或谁安装应用程式),也会有这些文件,但它值得探讨。 他们可能需要busybox的,我还没有看进去。



文章来源: Write files to /system
标签: android io root