You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无SD卡环境下安装Android OTA更新的可行性及实现方案问询

问题描述

我们有一台已root的Android 7.1设备,已开发配套应用及自定义ROM,ROM编译正常。
此前多年通过以下方式完成OTA更新:将OTA包推送到SD卡,在/cache/recovery目录放置脚本,设备重启进入Recovery后执行脚本完成安装,脚本内容如下:

--update_package=/sdcard/update.zip
reboot

现在需推出无SD卡版本设备,但所有无SD卡OTA尝试均失败。尝试用内部存储存放更新包,但Recovery无法访问该存储。已尝试的方案及失败点:

  • 将更新包存放至Recovery已挂载的文件夹,但无访问权限;
  • 创建专门存放更新包的分区,但Recovery无法挂载该分区;
  • 重启进入Recovery后推送更新包,但不知调用何种命令完成安装。
    确认无SD卡情况下是否可完成OTA更新,若可行请给出实现方法。
解决方案

无SD卡情况下完全可以实现OTA更新,以下是针对Android 7.1设备的可行方案:

方案1:修复Recovery对内部存储的挂载支持

Android 7.1的Recovery默认未挂载内部存储对应的data分区,导致无法访问内部存储。需修改Recovery的挂载配置并重新编译:

  1. 找到Recovery源码中对应设备的recovery.fstab文件(路径通常为device/[你的设备厂商]/[设备型号]/recovery.fstab);
  2. 添加内部存储分区的挂载规则(需根据设备实际分区路径调整),示例:
    /dev/block/bootdevice/by-name/userdata /data ext4 defaults relatime,errors=panic wait,check
    
  3. 重新编译Recovery镜像并刷入设备;
  4. 系统模式下将更新包推送到内部存储根目录(对应Recovery中的/data/media/0/update.zip);
  5. 修改/cache/recovery中的脚本为:
    --update_package=/data/media/0/update.zip
    reboot
    

设备重启进入Recovery后即可自动完成安装。

方案2:使用ADB Sideload推送更新

这是官方标准的无卡更新方式,无需提前在设备存放更新包:

  1. 确保你的自定义Recovery支持ADB Sideload功能。若没有,需在设备的BoardConfig.mk中添加:
    BOARD_HAS_ADB_SIDELOAD := true
    
    重新编译Recovery并刷入;
  2. 设备重启进入Recovery,选择apply update from adb选项;
  3. 电脑端执行命令推送更新包:
    adb sideload /path/to/your/update.zip
    
  4. 推送完成后Recovery会自动安装更新,完成后提示重启设备。

方案3:利用Cache分区临时存放更新包

Cache分区是Recovery默认挂载且有权限访问的分区,可作为更新包的临时存储:

  1. 确认Cache分区空间足够容纳更新包,若不足需调整分区表及ROM编译配置扩大Cache分区;
  2. 系统模式下将更新包推送到/cache/update.zip;
  3. 修改/cache/recovery中的脚本为:
    --update_package=/cache/update.zip
    reboot
    

设备重启进入Recovery后即可自动读取并安装更新包。

内容的提问来源于stack exchange,提问作者Mark Mercer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 09:40:22