前言
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?