Android OTA刷机包制作学习笔记

news2024/11/18 14:27:59

前言

OTA是一个再常见不过的需求,Android提供了recovery用于完成相关操作。
常规OTA包制作有两种:

  1. 有项目的完整AOSP源码,可以在成构建产物zip包后利用官方脚本制作。具体参阅:Office OTA
  2. 假设你没有1的条件那么可以利用官方非A/B OTA方式制作。可参阅Office inside_packages

本文将详细介绍2的个人学习笔记。

刷入三方Recovery

要刷入三方或自定义ROM那么首先你需要需要刷入第三方的recovery(有源码相关签名制作出的OTA包可忽略).
比较著名的有TWRPLineageOS.其中要注意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安装包。
如下所示文件结构:
在这里插入图片描述
然后我们简单修改原有脚本代码,原有opengappupdate-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_bootwrite_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?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1955553.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

exo-tinggrad 架构解析

目录 exo-tinggrad 架构解析 8B 模型配置 70B 模型配置 exo-tinggrad 架构解析 这个项目目录包含了一系列与Python相关的文件和文件夹,它们共同构成了一个可能的项目或库。这些文件和文件夹按照特定的命名和组织方式被放置在了一起,以便于管理、开发和维护。 tinygrad: 这…

24.7.28(tarjan 割点,割边,多重背包单调队列优化)

星期一: cf round 960 div2 B 简单构造 cf传送门 题意有点绕 思路:开始容易想到 y前和 x后全-1,y到x填1的构造,但对于 5 2 1,1 1 -1 -1 -1有问题,1和5的后缀值都为 -1…

【MySQL进阶之路 | 高级篇】简述Bin Log日志

1. 日志类型 MySQL有不同类型的日志文件,用来存储不同类型的日志,分为二进制日志、错误日志、通用查询日志和慢查询日志,这也是常用的4种。MySQL 8又新增两种支持的日志:中继日志和数据定义语句日志。使用这些日志文件,可以查看M…

树与二叉树【数据结构】

前言 之前我们已经学习过了各种线性的数据结构,顺序表、链表、栈、队列,现在我们一起来了解一下一种非线性的结构----树 1.树的结构和概念 1.1树的概念 树是一种非线性的数据结构,它是由n(n>0)个有限结点组成一…

LLM大模型在融合通信产品中的应用实践

前言 LLM 问题 幻觉:在没有答案的情况下提供虚假信息。 过时:当用户需要特定的当前响应时,提供过时或通用的信息。 来源:从非权威来源创建响应。由于术语混淆,不同的培训来源使用相同的术语来谈论不同的事情&#…

【Gin】智慧架构的巧妙砌筑:Gin框架中控制反转与依赖注入模式的精华解析与应用实战(下)

【Gin】智慧架构的巧妙砌筑:Gin框架中控制反转与依赖注入模式的精华解析与应用实战(下) 大家好 我是寸铁👊 【Gin】智慧架构的巧妙砌筑:Gin框架中控制反转与依赖注入模式的精华解析与应用实战(下)✨ 喜欢的小伙伴可以点点关注 💝 …

Meta 发布 Llama3.1,一站教你如何推理、微调、部署大模型

最近这一两周看到不少互联网公司都已经开始秋招提前批了。不同以往的是,当前职场环境已不再是那个双向奔赴时代了。求职者在变多,HC 在变少,岗位要求还更高了。 最近,我们又陆续整理了很多大厂的面试题,帮助一些球友解…

古文:诸葛亮《前出师表》

前出师表 师:军队。 表:就是“奏表”,又称“表文”,是臣属给君王的上书。古代给君王的上书,有各种名称,不同的名称与上书内容有关。刘勰《文心雕龙章表》云:“章以谢恩,奏以按劾&a…

高速板开源项目学习(二)

一定要找一个高速板写的详细的等长规范: 看的出来,这位小哥也是卡着嘉立创最小免费钻孔大小来打孔的: 这里的天线,他做了禁止铺铜和走线处理,模拟信号在这里容易遇到干扰,这样是正确的,值得去学…

解决使用selenium-wire访问链接地址不安全的问题

pip安装selenium-wire 描述:这里用的是python3.12.2 selenium-wire5.1.0 pip3.12 install selenium-wire pip3.12 install blinker1.7 pip3.12 install setuptools 运行以下命令来获取证书 python -m seleniumwire extractcert 安装浏览器ssl证书 Windows上给…

【JavaScript】延迟加载 js 脚本

defer 属性:在 HTML 中通过设置 script 标签的 defer 属性来实现脚本的延迟加载,即脚本的下载与 HTML 的解析不会阻塞彼此,脚本会在 HTML 解析完成后才执⾏。async 属性:在 HTML 中通过设置 script 标签的 async 属性来实现脚本的…

深入理解 Java NIO:ByteBuffer和MappedByteBuffer的特性与使用

目录 前言 ByteBuffer是什么 重要特点 分配缓冲区 读写模式切换 操作文本数据 操作基本数据类型 案例解析-循环输出数据 MappedByteBuffer是什么 MappedByteBuffer 的工作机制 刷盘时机 总结 前言 在深入学习 RocketMQ 这款高性能消息队列框架的源码时&#xff0c…

免费【2024】springboot 畅游游戏销售平台

博主介绍:✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌ 技术范围:SpringBoot、Vue、SSM、HTML、Jsp、PHP、Nodejs、Python、爬虫、数据可视化…

EchoMimicV2,Audio Driven加速模型,推理速度大幅提升

EchoMimic更新啦,我24号刚出的一篇,到了25号官方就更新了新的加速模型。 着实没赶上官方更新的速度...... 那本次我主要讲下更新了什么内容,如何修改使用acc加速模型。 另外还准备了v2版本的整合包!大家可以体验下! 更…

ProxmoxPVE虚拟化平台--安装PVE虚拟机

Proxmox 虚拟机 Proxmox是一个基于Debian Linux和KVM的虚拟化平台,‌它提供了虚拟化的环境,‌允许用户在同一台物理机上运行多个虚拟机。‌Proxmox虚拟环境(‌PVE)‌是一个开源项目,‌由Proxmox Server Solutions Gmb…

从与原始的Transformer architecture比较来理解GPT

从与原始的Transformer architecture比较来理解GPT flyfish 一、Transformer architecture 先说名词 不同的文献和资料中有不同的名字,其实是一样的意思 1 编码器-解码器多头注意力机制(Encoder-Decoder Multi-Head Attention Mechanism) …

CI/CD:Job failed: execution took longer than 1h0m0s seconds

简介:当在CI/CD配置运行Gitlab-runner流水线中,一般默认情况下,Job的执行时间默认为1小时,如果超出1小时,任务会中断。 历史攻略: 定时任务:Jenkins 容器化CICDLocust性能压测 容器化CICDSo…

我的NAS是怎么连接Amazon Web Services S3的

作为IT爱好者,很多家庭都配备了Network Attached Storage(NAS),用于存储和管理大量数据。一个常见的挑战是如何实现异地备份,以确保数据的安全性和可恢复性。以下是一些解决方案和工具,可以帮助用户有效地管…

使用 Docker Compose 部署 RabbitMQ 的一些经验与踩坑记录

前言 RabbitMQ 是一个功能强大的开源消息队列系统,它实现了高效的消息通信和异步处理。 本文主要介绍其基于 Docker-Compose 的部署安装和一些使用的经验。 特点 成熟,稳定消息持久化灵活的消息路由高性能,高可用性,可扩展性高支…

操作系统:进程1

一.进程 1.什么是进程 一个进程创建,他会生成几块: 代码段:进程执行的程序代码数据段:全局变量,静态变量,在进程生命周期中是动态可变的堆:动态分配的内存区域,malloc、calloc、real…