前言
OTA是一个再常见不过的需求,Android提供了recovery用于完成相关操作。
常规OTA包制作有两种:
- 有项目的完整AOSP源码,可以在成构建产物zip包后利用官方脚本制作。具体参阅:Office OTA
- 假设你没有1的条件那么可以利用官方
非A/B OTA方式制作。可参阅Office inside_packages
本文将详细介绍2的个人学习笔记。
刷入三方Recovery
要刷入三方或自定义ROM那么首先你需要需要刷入第三方的recovery(有源码相关签名制作出的OTA包可忽略).
比较著名的有TWRP,LineageOS.其中要注意TWRP不支持Android13以及以上设备。
在Android 13 以及以上设备不在单独划分一个recovery分区,而是整合到其他镜像分区中。可参阅:Office generic-boot

这里可以使用LineageOs方式刷入教程,可参考官方。lineageos Portal url
案例1 嵌入自定义系统app
我们将一个telegaram 想办法做升级一个系统应用的刷机包。如果我们直接裸奔使用Office inside_packages教程。需要大量时间学习Edify语法。所以我们学习类似刷机包如何制作。有一个项目叫opengapps,他提供了一个刷机包可以直接刷入大量Google体系app到系统内部。
再官方下载后得到如下压缩包。

我们解压查看目录如下:

这里核心逻辑就是在/system/app放入google体系软件完成。
当然我们还要看update-binary脚本如何完成这个文件复制流程的:

我们不深究相关函数作用,我们这里最小化完成我们的任务。首先删除原文有system下的文件并放入telegram安装包。
如下所示文件结构:

然后我们简单修改原有脚本代码,原有opengapp的update-binary脚本中会检查设备是否满足条件,我们这里强行删除对应代码即可

然后再根目录重新打包成zip刷入即可zip -r9 UPDATE.zip * -x .git README.md。
这里举例使用lineageOS刷入。
- 重启键入recovery模式。(个人喜欢用命令行方式进
adb reboot recovery)

选中apply update

无脑选中唯一选项

最后你可以执行adb sideload 刷机包进行刷入。如果期间提示签名不对可以忽略强行选中安装即可。

重启系统即可看到我们的telegram变成系统级的应用啦。

我们这里只是投机取巧完成任务,如果复杂且网上没有对应的案例怎么办?
AnyKernel3 制作刷机包
AnyKernel3 封装了update-binary脚本,可以让我们最少成本制作一个刷机包。作者在项目地址提供了详细的教程这里在提供一个案例。
我们利用AnyKernel3刷入一个新boot.img作为案例来讲解。
首先clone源码到本地,然后放入一个boot.img到根目录。

然后修改anykernel.sh(anykernel3作者通过update-binary间接跳转到这这个脚本)

这里不在过多讲解脚本的含义。修改后根据官方介绍重新打包成zip 并刷入即可。
TIP:
这里要特别注意如果是Android14 再脚本中使用dump_boot和write_boot函数会失败。因为Android 14boot不在包含ramDisk信息。而anykernel3默认会提取boot.img中内存文件系统(ramDisk)提取导致刷机失败.
相比自己update-binary优势在哪?
假设你想校验当前刷入的系统是否是特定的设备可能你需要像Gapp那样写一坨代码(还可能出错),而anykernel3只需要对device.name*赋值预期字面量即可。如只允许pixel6刷入只需要写oriole即可(pixel6代号)
参考文献
Question about boot.img and ramdisk.cpio
AnyKernel3
Office Partition layout
[Android][Framework] 制作OTA升级包
Office inside_packages
Office ToolsSourceCode
Office generic-boot
why-is-custom-recovery-a-prerequisite-for-flashing-a-custom-rom
Does flashing a custom ROM require rooting?



















