实现远程下载zip格式OTA包到本地后,调用以下接口即可进行升级:
RecoverySystem.installPackage(this, new File(Environment.getExternalStorageDirectory().toString()+ "/test.zip"));
注意事项:
a、接口并没有校验zip包,所以应用方面需要先校验zip包是存在并且ok的;否则会再recovery界面报错;
b、需要添加的权限:
<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" />
c、报错处理:
FileNotFoundException:/cache/recovery/command (Permission denied)
这是由于普通应用没有权限对/cache/recovery进行操作
有三种方式可以实现对cache分区的读写
1.shareUserId加上android.system.uid,和楼上所说的一样,副作用是不能再访问sdcard
添加方式:
(1)AndroidManifest.xml添加android:sharedUserId="android.uid.system"
(2)Android.mk添加LOCAL_CERTIFICATE := platform(实际就是对应用进行系统秘钥签名)
2.添加android.permission.ACCESS_CACHE_FILESYSTEM权限,该权限的描述是signatureOrSystem,也就是签名(Android.mk添加LOCAL_CERTIFICATE := platform),或者以不签名的方式放在/system/app目录。
3.通过root来访问