您的位置:首页 > 移动开发 > Android开发

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

2012-07-28 22:10 281 查看
最近实验在中兴 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)







补充:

{

本人已经测试过如果在增加写的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,之后出现了一个机器人感叹号的图片



进入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则去除掉,就可以 正常刷机了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐