[Android][Recovery] Recovery下找不到sdcard路径

做升级的时候,把更新包拷贝到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;}elseprintf("modified_path allocation failed\n");} 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;}elseprintf("modified_path allocation failed\n");}

Ref https://blog.csdn.net/wed110/article/details/9943915?utm_source=blogxgwz1

Recovery文件路径相关推荐

  1. php 加载一个文件路径_PHP文件加载过程

    1.文件的路径问题 我们之前也用过一些有关文件路径问题的知识,比如: .... php中,有3种路径 相对路径: 有两个特定符号(特定路径)来决定的路径形式: ./ :表示当前目录,也就是当前网页所在 ...

  2. VC下通过进程ID获取进程镜像文件路径的方法及其存在的缺陷

    工作中经常会遇到通过进程ID获取进程镜像文件或者其他模块的路径的需求.(转载请指明出处)网上关于方案大致存在两种方案: OpenProcess->GetModuleFileName OpenPr ...

  3. arm服务器获取文件路径中文,ssh 访问远程服务器文件路径

    ssh 访问远程服务器文件路径 内容精选 换一换 在IntelliJ上选择"项目",找到".idea"文件夹,单击右键选择"新建>文件" ...

  4. Windows如何 cmd 查找文件路径 开机启动 CMD语音播放 CMD切换到管理员!

    1,语音播放: CreateObject("SAPI.SpVoice").Speak"崭新的开始,你好!" 单词别拼写错误啦! 把这个拖到开机启动项里就可以开后 ...

  5. php获取请求路径_如何获取php.ini文件路径?

    点击蓝字关注我们!每天获取最新的编程小知识! 源 / php中文网      源 / www.php.cn 我们可以使用PHP中的php_ini_loaded_file()函数来获取php.ini文件 ...

  6. R语言使用fs包的path_wd函数基于自定义文件路径规则,批量生成多个文件或者文件夹对应的绝对(absolute)文件路径(constructs absolute path)

    R语言使用fs包的path_wd函数基于自定义文件路径规则,批量生成多个文件或者文件夹对应的绝对(absolute)文件路径(constructs an absolute path from the ...

  7. R语言sys方法:sys.timezone函数返回当前系统时区的名称、system.File函数查找系统文件或者安装包的文件路径(例如查看R Base可安装路径、dplyr包的安装路径)

    R语言sys方法:sys.timezone函数返回当前系统时区的名称.system.File函数查找系统文件或者安装包的文件路径(例如查看R Base可安装路径.dplyr包的安装路径) 目录

  8. ubuntu18.04.4 获取当前文件路径

    ubuntu18.04.4 获取当前文件路径 打开文件夹 右键–>在终端打开 pwd 复制上面地址

  9. python中字符串(比如文件路径)前面有一个r什么意思

    结论:加r是为了取消字符串中的所有可能转义,即字符串的所有字符都会被当成正常字符. 比如windows下有如下文件路径: "D:\lbq\lang\nc\data\MNIST" 如 ...

  10. Vue项目build后静态资源文件路径或新建文件夹图片路径找不到的问题

    问题描述:使用vue-cli脚手架工具生成的vue项目,使用npm run build后生成的文件直接双击打开白屏一片. 解决方案: 第一步:修改build文件夹下utils.js,在以下位置加入 i ...

最新文章

  1. Android程序如何在代码中改变图片原有的颜色
  2. 百度网盘文件分享演示,如何查看已经分享的文件
  3. 成功解决on line , but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details
  4. php gzip 关闭,Thinkphp 关闭Gzip header输出问题
  5. 如何实现文件互拖-VMware Tools (ubuntu系统)安装详细过程与使用
  6. mysql初体验学习笔记_【MySQL】mycli初体验
  7. 10.11.5 brew mysql_mac os10.11下安装MySQLdb
  8. 中国电信披露2021年年报 天翼云营收实现三位数增长
  9. 微软程骉:智能医疗产业化应用的挑战和解决之道
  10. ATIchinapay银联支付模块.zip
  11. 打飞机小游戏,附带源码
  12. Ubuntu 14.04 下安装wiznote客户端
  13. wireshark推荐书籍
  14. 微信怎么接龙?手把手教你使用微信群接龙功能
  15. arduino使用晶联讯jlx12864
  16. Spring Boot Admin 基于security 认证监控
  17. Kotlin SQLite URL转义字符(Escape)(一)
  18. c3p0 签出超时:resourcepool.TimeoutException: A client timed out while waiting to acquire a resource
  19. python字典取值_python 字典中取值的两种方法小结
  20. 计算机虚拟空间怎么设置,虚拟内存怎么设置最好,教您电脑虚拟内存怎么设置最好...

热门文章

  1. 微信扫码ios:scanQRCode:the permission value is offline verifying
  2. 计算机奖项含金量排名,2019五大学科竞赛含金量排名
  3. 启用了被称为 HTTP 严格传输安全(HSTS)的安全策略,Firefox 只能与其建立安全连接
  4. 基于TCP协议的游戏代理接口测试工具<二>:工具架构与代理主体实现
  5. innodb中的行格式——Compact、Dynamic、Compressed、Redundant详解
  6. webpack安装问题(已解决)
  7. 贪心算法解决汽车加油问题
  8. php excel导入读取公式本身不计算,使用PHPExcel读取Excel文件时忽略计算值
  9. java操作远端ftp文件失败
  10. 综合分析:市面上的nmn哪个牌子比较好?美国产nmn哪个牌子好?