提示:MTK-Android 编译打包优化-OTA整包-差分包打包 整理
文章目录
- 前言
- 一、需求
- 二、相关资料参考
- 三、项目经验实战分享
-
- [1、MTK Android 打包编译固件脚本](#1、MTK Android 打包编译固件脚本)
- [2、MTK 打包同时生成全量包](#2、MTK 打包同时生成全量包)
- [3、MTK Android 中间包](#3、MTK Android 中间包)
- [4、MTK Android OTA 差分包制作](#4、MTK Android OTA 差分包制作)
- 5、实战踩坑经验分享
- 6、编译固件-ota全量包-ota差分包思考
- 总结
前言
日常系统开发需要:
- 打包固件,编译固件
- 整包输出
- 差分包输出
那么如何高效实现,高效解决实际需求,今天这里就是一个整理的过程,善用脚本实现,一步到位。
一、需求
- MTK Android12 、Android13 平台 打包优化、OTA 整包输出优化、OTA 差分包优化
- 优化打包脚本,提高开发效率
二、相关资料参考
之前编译,提效相关的知识点,如下,可以参考,目的就是提高开发效率,脚本实现不要一个命令一个命令的输入
这里面核心亮点:
- 如上偏向于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差分包命令,按需配置打包命令 - 仍待优化点:中间包、全量包、差分包可以通过命令生成在同一个目录下,更加友好 方便