MTK-Android12 编译打包优化-OTA整包-差分包打包

提示:MTK-Android 编译打包优化-OTA整包-差分包打包 整理

文章目录


前言

日常系统开发需要:

  • 打包固件,编译固件
  • 整包输出
  • 差分包输出
    那么如何高效实现,高效解决实际需求,今天这里就是一个整理的过程,善用脚本实现,一步到位。

一、需求

  • MTK Android12 、Android13 平台 打包优化、OTA 整包输出优化、OTA 差分包优化
  • 优化打包脚本,提高开发效率

二、相关资料参考

之前编译,提效相关的知识点,如下,可以参考,目的就是提高开发效率,脚本实现不要一个命令一个命令的输入

AOSP编译打包脚本-项目源码管理经验

RK3568 uboot 编译报错问题

RK3568 Android13 源码编译

RK平台下Buildroot驱动编译环境入门

AOSP编译打包脚本-项目源码管理经验

OTA升级那些事-Recovery升级和AB升级

这里面核心亮点:

  • 如上偏向于RK 项目的打包,也有参考意义
  • OTA相关的介绍,有整包升级、AB升级介绍,也是核心知识点

三、项目经验实战分享

1、MTK Android 打包编译固件脚本

如下是封装的MTK 固件打包脚本,如下,拿来主义 直接用:

java 复制代码
#!/bin/bash

#生成软件路径
#FS_SW_BIN_PATH=rockdev

# DM88_S_20230904_V1.0.0.0
#项目名
export FS_PRODUCT_NAME=DM88_P_YL_FP_PRO
#日期
FS_SW_DATE=20260622
#版本号
export FS_PRODUCT_VERSION=1.0.0.2
#完整项目软件版本名
export FS_SW_VERSION=${FS_PRODUCT_NAME}_${FS_SW_DATE}_V${FS_PRODUCT_VERSION}

export DM88_MODEM=TK_MD_BASIC_LWTG_6177M_6769_DM88_P

function binPac()
{
#	full_k65v1_64_bsp-user
#	full_k65v1_64_bsp-userdebug
#	full_k65v1_64_bsp_k510-user
#	full_k65v1_64_bsp_k510-userdebug
#	full_k69v1_64_k419-user
#	full_k69v1_64_k419-userdebug
#	full_k69v1_64_k510-user
#	full_k69v1_64_k510-userdebug

	python vendor/mediatek/proprietary/scripts/releasetools/split_build_helper.py --run full_k69v1_64_k419-userdebug
#	Normal
#	python out_sys/target/product/mssi_64_cn/images/split_build.py --system-dir out_sys/target/product/mssi_64_cn/images --vendor-dir out/target/product/k69v1_64_k419/images --kernel-dir out/target/product/k69v1_64_k419/images --output-dir ${FS_SW_VERSION}/${FS_SW_VERSION}/
#	OTA
	python out_sys/target/product/mssi_64_cn/images/split_build.py --system-dir out_sys/target/product/mssi_64_cn/images --vendor-dir out/target/product/k69v1_64_k419/images --kernel-dir out/target/product/k69v1_64_k419/images --output-dir ${FS_SW_VERSION}/${FS_SW_VERSION}/ --otapackage

	cp ./vendor/mediatek/proprietary/modem/${DM88_MODEM}/MDDB_InfoCustomAppSrcP_MT6768_S00_MOLY_LR12A_R3_MP_V283_3_P1_1_ulwtg_n.EDB ./${FS_SW_VERSION}/${FS_SW_VERSION}/MDDB_InfoCustomAppSrcP_MT6768_S00_MOLY_LR12A_R3_MP_V283_3_P1_1_ulwtg_n.EDB
	
	cp ./${FS_SW_VERSION}/${FS_SW_VERSION}/target_files.zip ./${FS_SW_VERSION}/target_files.zip
	rm -rf ./${FS_SW_VERSION}/${FS_SW_VERSION}/target_files.zip
	
    return 0;
}


binPac;

如上,直接编译实现,执行即可生成固件,比如如下目录:

如上,文件夹 DM88_P_YL_FP_PRO_20260622_V1.0.0.2 就是固件包,zip 是自己打包发出去的文件。

2、MTK 打包同时生成全量包

如上包含两条指令,每次编译固件时候按需是否要全量包

java 复制代码
#	Normal
#	python out_sys/target/product/mssi_64_cn/images/split_build.py --system-dir out_sys/target/product/mssi_64_cn/images --vendor-dir out/target/product/k69v1_64_k419/images --kernel-dir out/target/product/k69v1_64_k419/images --output-dir ${FS_SW_VERSION}/${FS_SW_VERSION}/
#	OTA
	python out_sys/target/product/mssi_64_cn/images/split_build.py --system-dir out_sys/target/product/mssi_64_cn/images --vendor-dir out/target/product/k69v1_64_k419/images --kernel-dir out/target/product/k69v1_64_k419/images --output-dir ${FS_SW_VERSION}/${FS_SW_VERSION}/ --otapackage

你看一下 如果需要 OTA 整包的时候后面加了参数 --otapackage 代表生成了全量包就是 otapackage,位置 如下:

3、MTK Android 中间包

为什么讲解中间包,就是为了制作差分包准备的,那么 中间包是哪一个?

关联的命令如下:

java 复制代码
cp ./${FS_SW_VERSION}/${FS_SW_VERSION}/target_files.zip ./${FS_SW_VERSION}/target_files.zip
rm -rf ./${FS_SW_VERSION}/${FS_SW_VERSION}/target_files.zip

也就是说 target_files.zip,如下:

4、MTK Android OTA 差分包制作

上面参考资料中,有一个 参考:OTA升级那些事-Recovery升级和AB升级

具体描述如下:

所有编译环境在T根目录下进行

  • 1,s复制out目录到T cp -r /home/fise3/code/MTK12/mt6769-alps-release-s0.mp1.rc/alps-release-s0.mp1.rc/out /home/fise3/code/MTK12/mt6769-alps-release-t0.mp1.rc/

  • 2,复制原始out目录(将\192.168.2.254\智能软件\文档\安卓13OUT文件夹中的out压缩包解压覆盖t目录下的out文件夹。)cp -r /home/fise3/code/test/out/* /home/fise3/code/MTK12/mt6769-alps-release-t0.mp1.rc/out/

  • 3,复制编译后的target_files.zip到T,修改为b.zip cp -r /home/fise3/code/MTK12/mt6769-alps-release-s0.mp1.rc/alps-release-s0.mp1.rc/DM3602_JD9366TC_800X1280_NEW_RPMBD_WMPF_QTD_20260513_V1.0.0.3/target_files.zip /home/fise3/code/MTK12/mt6769-alps-release-t0.mp1.rc/

  • 4,复制需要升级的包为a.zip

    如:\192.168.2.254\智能软件\软件版本\dm3602\互校\NEW\DM3602_JD9366TC_800X1280_NEW_20260120_V1.0.0.4\target_files.zip

  • 5,执行执行差分包生成指令(在T目录下执行) out/host/linux-x86/bin/ota_from_target_files -v --block --path out/host/linux-x86/ -i 1.zip 3.zip update.zip

其实,搞来搞就,就是copy 两个版本的中间包到t 目录,然后 执行差分包命令,那么何必不直接搞个脚本不就行了嘛:wfc_ota_chafen_shell.sh

java 复制代码
#!/bin/bash

function binChaFen_OTA(){

cp -r ../mt6769-alps-release-s0.mp1.rc/alps-release-s0.mp1.rc/out   .
cp -r ../out   .
cp -r ../mt6769-alps-release-s0.mp1.rc/alps-release-s0.mp1.rc/DM88_P_YL_FP_PRO_20260622_V1.0.0.2/target_files.zip    .
out/host/linux-x86/bin/ota_from_target_files -v --block --path out/host/linux-x86/ -i target_files_1.0.1.zip  target_files.zip update.zip
return 0;
}

binChaFen_OTA; 
 

5、实战踩坑经验分享

制作全量包,结果升级成功已经写入了B槽,但是重启后没有升级成功,直接失败 然后回滚,部分全量包升级是成功的。

依旧参考之前笔记:OTA升级那些事-Recovery升级和AB升级

全量包制作方式为MTK 官方文档:

java 复制代码
source build/envsetup.sh 
lunch full_k69v1_64_k419-userdebug 
make otapackage -j16

生成整包位置:\out\target\product\k69v1_64_k419 目录下有一个ota 开头的.zip 包就是OTA包。

自己试验过 自己机器都是成功的,但是客户测试三台设备都失败,日志如下:

所以干脆,放弃这个方案,直接用2中在编译固件包时候同步生成全量升级包。

6、编译固件-ota全量包-ota差分包思考

如上都是实践的经验,那么何必不再s 目录中把固件生成同时的脚本中同步配置固件全量升级包和固件查分升级包命令。 这样根据实际需求,可以配置不同的脚步命令,一下子就提升了开发效率。

总结

  • 熟悉、理解 MTK 打包固件命令
  • 熟悉、理解 、归纳 配置 OTA 全量升级包和OTA差分包命令,按需配置打包命令
  • 仍待优化点:中间包、全量包、差分包可以通过命令生成在同一个目录下,更加友好 方便