使用RecoverySystem.installPackage实现 android卡刷系统

 

最近实验在中兴 V880 blade上写个自己的在线卡刷的应用(当然了事先已经root刷了第三方的ClockworkMod Recovery v4.0.0.5版本)

 

20120729个人补充:

(这个地方你要注意以下之前在CM论坛上看到880在印度的手机版本还有一个 recovery_flash脚本,刷了第三方的ClockworkMod Recovery 还会给你还原回来,给你锁住了recovery这个功能

http://forum.cyanogenmod.com/topic/49652-idea-zte-blade-india/#entry335808

If you keep stock Android on your phone, it will restore your stock recovery every time you reboot your phone. You would need to remove the file /system/etc/install_recovery.sh and/or /etc/install_recovery.sh (not sure if both are in every ROM) to prevent that. It also doesn't exist in 3rd-party ROMs. )

 

 

通过调用 RecoverySystem.installPackage 接口一键升级系统(当然了本文的update.zip包是签名验证过的,不涉及很多的签名不通过问题,不发散问题)

 

在网上搜索了一下

参见:

http://markmail.org/message/occuzybn36xeikcm

http://wifihack.net/blog/2012/04/android-clockworkmod-recovery-system-updat/

http://blog.lytsing.org/archives/356.html

 

应用添加了如下权限

 <uses-permission android:name="android.permission.DELETE_CACHE_FILES" />
 <uses-permission android:name="android.permission.ACCESS_CACHE_FILESYSTEM" />
 <uses-permission android:name="android.permission.REBOOT" />

 

代码如下

    private void excuteUpdateZip() {
        // TODO Auto-generated method stub
        try {
            RecoverySystem.installPackage(this, new File("/sdcard/update-cm-7.2.0-RC0-Blade-KANG-signed.zip"));
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

 

但是卡刷失败,结果如下

FileNotFoundException: /cache/recovery/command (Permission denied)

 

使用RecoverySystem.installPackage实现 android卡刷系统_第1张图片

 

补充:

{

本人已经测试过如果在增加写的APK中直接访问并写入/cache/recovery/command 是没有权限问题的

    private static File RECOVERY_DIR = new File("/cache/recovery");
    private static File COMMAND_FILE = new File(RECOVERY_DIR, "command");

        RECOVERY_DIR.mkdirs();  // In case we need it
        COMMAND_FILE.delete();  // In case it's not writable

        FileWriter command = new FileWriter(COMMAND_FILE);
        try {
            command.write("--wipe_cache");
            command.write("\n");
        } finally {
            command.close();
        }

}

 

 

很奇怪,为什么会有这个问题,而且网上也都是提出类似问题,没有解决的方法提出。

 

没有办法,只好修改system的RO权限,改为RW权限,然后将生成的APK放入system/app,之后reboot。

修改挂载文件设备的权限的方法参见:

android 修改文件属性(U960S删除快门声实例)

 

 

界面显示rebooting,之后出现了一个机器人感叹号的图片

使用RecoverySystem.installPackage实现 android卡刷系统_第2张图片

进入Adb 查看cache/recovery,目录查看 log

 

发现

Finding update package...
I:Update location: /mnt/sdcard/update-cm-7.2.0-RC0-Blade-KANG-signed.zip
E:unknown volume for path [/mnt/sdcard/update-cm-7.2.0-RC0-Blade-KANG-signed.zip

 

原来问题在这里,进入recovery模式以后,SD卡挂载的的目录为sdcard。造成了路径偏差。不过就实验目的来说已经达到了只不过需要将应用设置为系统应用。

 问题到此为止,目前看来只能是在机器里面定制 framework里面的RecovrySystem代码 检查一下路径如果有mnt则去除掉,就可以 正常刷机了。

 

 

 

你可能感兴趣的:(android,cache,File,command,System,中兴)