摘要:我们的需求是把升级包放到里面去,所以就需要修改里的文件路径。实际要做的就是把获得到的路径里面替换成即可里面的卡路径就是
做升级的时候,把更新包拷贝到sd卡中,然后调用接口进行重启升级
wossoneri.github.io
File update_file = new File("/sdcard/update.zip");
try {
Log.d("WOW", "install " + update_file.getAbsolutePath());
RecoverySystem.installPackage(getBaseContext(), update_file);
} catch (IOException e) {
e.printStackTrace();
}
之后进入Recovery模式后报错:
Supported API: 3
charge_status 3, charged 0, status 0, capacity 62
Finding update package...
Opening update package...
E:unknow volume for path [/storage/emulated/0/update.zip]
E:failed to map file
Installation aborted.
说是找不到/storage/emulated/0
这个路径?
因为上层用Java写路径的时候,获取的是Android的路径,我们知道,adb shell里面是有/sdcard
的路径的,这个路径实际上并不是插入的SD卡路径,而是一个内置路径。
内置路径通过 ls -l 可以看到 /sdcard 的映射
lrwxrwxrwx 1 root root 21 1970-01-01 08:00 sdcard -> /storage/self/primary
也就是说下面几个路径是一样的
/sdcard/
/storage/emulated/0
/storage/self/primary而外置sd卡路径是
/storage/0658-0900
所以,我们代码里写的是/sdcard
但是传到Recovery的路径就变成/storage/emulated/0
了。
我们的需求是把升级包放到sdcard里面去,所以就需要修改Recovery里的文件路径。
实际要做的就是把获得到的路径里面/storage/emulated/0
替换成/sdcard
即可:
Recovery里面的sd卡路径就是/sdcard/
if (update_package) {
// For backwards compatibility on the cache partition only, if
// we"re given an old "root" path "CACHE:foo", change it to
// "/cache/foo".
if (strncmp(update_package, "CACHE:", 6) == 0) {
int len = strlen(update_package) + 10;
char* modified_path = (char*)malloc(len);
if (modified_path) {
strlcpy(modified_path, "/cache/", len);
strlcat(modified_path, update_package+6, len);
printf("(replacing path "%s" with "%s")n",
update_package, modified_path);
update_package = modified_path;
}
else
printf("modified_path allocation failedn");
} else if(strncmp(update_package, "/storage/emulated/0/", 20) == 0) {
int len = strlen(update_package) + 20;
char* modified_path = (char*)malloc(len);
if (modified_path) {
strlcpy(modified_path, "/sdcard/", len);
strlcat(modified_path, update_package+20, len);
printf("(replacing path "%s" with "%s")n",
update_package, modified_path);
update_package = modified_path;
}
else
printf("modified_path allocation failedn");
}
Ref https://blog.csdn.net/wed110/article/details/9943915?utm_source=blogxgwz1
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/2642.html
摘要:不得不说现在的刷机工具都做的方便快捷,只需要简单的几天命令就解决了。以前用刷的时候还需要装一堆驱动软件啥的。此办法的好处是无需很多技巧,但是坏处是包更新不及时,比如到了安卓使用该包就会刷入老的内核版本。工具包刷的前记得开启调试模式。 不得不说现在的刷机工具都做的方便快捷,只需要简单的几天命令就解决了。以前用windows刷的时候还需要装一堆驱动软件啥的。 原文链接: nexus5 刷 ...
摘要:以后你就能再次用这个备份来将手机恢复到这个状态。这个词语来自的用户,享有最高权限。通常不要去手机,如果操作不当,对手机系统造成损坏,可能会开不了机等。而一般是用来初始安装的首选途径。此外模式下还能解锁。 持续学习,持续更新...... AOSP AOSP stands for Android Open Source Project. Stock Stock Android is wh...
摘要:背景,大公司占据入口流量,小程序百花齐放的,你如何由零开始学习小程序架构。大纲查看亿级小程序学习源码学习小程序常用构建常用的小程序基础库构建自己的小程序框架查看亿级小程序学习源码安装模拟器,或者已经的旧手机。 背景,大公司占据入口流量,小程序百花齐放的2019,你如何由零开始学习小程序架构。 大纲: 1、查看亿级小程序学习源码2、学习小程序常用API3、构建常用的小程序基础库4、构建自...
阅读 1905·2021-10-08 10:21
阅读 2262·2021-09-29 09:34
阅读 3288·2021-09-22 15:51
阅读 4577·2021-09-22 15:46
阅读 2170·2021-08-09 13:42
阅读 3255·2019-08-30 15:52
阅读 2609·2019-08-29 17:13
阅读 1397·2019-08-29 11:30