Java 如何在android中通过编程方式从应用程序刷新zip

Java 如何在android中通过编程方式从应用程序刷新zip,java,android,shell,root,recovery,Java,Android,Shell,Root,Recovery,我正在尝试建立一个应用程序,它将自动重新启动恢复和闪存从我的sd卡压缩。 此应用程序可以使用系统应用程序权限,因为我要将其用作系统应用程序, 我该怎么做 我试过这个密码 File zip = new File("/sdcard/test.zip"); if(zip.exists()) { Toast.makeText(context,"ZIP EXIST!",Toast.LENGTH_LONG).show(); Process p = Runtim

我正在尝试建立一个应用程序,它将自动重新启动恢复和闪存从我的sd卡压缩。 此应用程序可以使用系统应用程序权限,因为我要将其用作系统应用程序, 我该怎么做

我试过这个密码

   File zip = new File("/sdcard/test.zip");
    if(zip.exists()) {
        Toast.makeText(context,"ZIP EXIST!",Toast.LENGTH_LONG).show();

        Process p = Runtime.getRuntime().exec("sh");
        OutputStream os = p.getOutputStream();
        os.write("mkdir -p /cache/recovery/\n".getBytes());
        os.write("echo 'boot-recovery' >/cache/recovery/command\n".getBytes());
        String cmd = "echo '--update_package=/sdcard/test.zip' >> /cache/recovery/command\n";
        os.write(cmd.getBytes());
        os.flush();

        // Trigger the reboot
        PowerManager powerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
        powerManager.reboot("recovery");
    }
    else{
        Toast.makeText(context,"ZIP NOT EXIST!",Toast.LENGTH_LONG).show();
    }
我还尝试了以下代码:

 Process p = Runtime.getRuntime().exec("/system/bin/sh");
    OutputStream os = p.getOutputStream();
    os.write("echo 'boot-recovery ' > /cache/recovery/command".getBytes());
    os.write("echo '--update_package=/sdcard/test.zip' >> /cache/recovery/command".getBytes());
    os.write("echo '--wipe_cache' >> /cache/recovery/command".getBytes());
    os.write("echo 'reboot' >> /cache/recovery/command".getBytes());
    os.write("reboot recovery".getBytes());

    os.flush();

       PowerManager powerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
                    powerManager.reboot("recovery");
但它所做的只是重新启动恢复,它不会刷新我的zip。 请帮忙

附言


我在Nexus5上使用android L和TWRP recovery

我相信你的问题是因为不同的android版本,在JellyBean(4.1)中和更高版本SD卡数据被放置在目录
/storage/emulated/0
中,您正在使用的目录
/sdcard
引用了
/storage/emulated
,因此,要使其工作,您必须将目录更改为
/sdcard/0
,这将使命令如下所示:

  • 对于您的第一个方式:

    String cmd = "echo '--update_package=/sdcard/0/test.zip' >> /cache/recovery/command\n";
    
    os.write("echo '--update_package=/sdcard/0/test.zip' >> /cache/recovery/command".getBytes());
    
  • 对于您的第二种方式:

    String cmd = "echo '--update_package=/sdcard/0/test.zip' >> /cache/recovery/command\n";
    
    os.write("echo '--update_package=/sdcard/0/test.zip' >> /cache/recovery/command".getBytes());