【Android P】OTA升级包定制,移除不需要更新的分区,重新打包签名

简介: 如何解压OTA升级包、编辑升级包内容(例如移除不需要更新的分区)、重新打包、签名以及验证OTA文件的过程。

1.前言

最近在做MTK Android 9.0 的投影项目,使用的是9269芯片,其中有一个功能是投影方位的设定,如正装正投、正装背投。但MTK目前软件架构上,数据耦合度还是很高,没有分离到数据分区,投影方位的设定耦合在/vendor/tvconfig/config/model/customer_1.ini文件中。而公版OTA又不支持差分升级,所以就想到了定制OTA包的方法,大致思路就是解压当前ZIP包,编辑,重新打包,签名。

2.基本步骤

  • 1.AOSP编译生成OTA包:mt5862_bga_1g-ota_update.zip
  • 2.unzip 解压 mt5862_bga_1g-ota_update.zip
  • 3.编辑解压后的文件,例如本文移除了tvconfig.img
  • 4.重新压缩打包update.zip
  • 5.签名
  • 6.验证修改后的ota包

3.详细过程

3.1 解压update.zip到指定目录

  • 将编译生成的ota包mt5862_bga_1g-ota_update.zip放置到如下目录,方便操作
    • PATH:vendor/mediatek/proprietary_tv/open/common/security
    • 选择这个目录,主要是因为所使用的签名文件都在这个路径下,输入命令时候可以少打几个路径
  • 创建临时目录: $mkdir ota_dir
  • $mv mt5862_bga_1g-ota_update.zip ota_dir/
  • $cd ota_dir
  • $unzip mt5862_bga_1g-ota_update.zip
builder@android(master):~/code/vendor/mediatek/proprietary_tv/open/common/security$ls
adb       media.pk8       mt5862_bga_1g-ota_update.zip  platform.pk8       releasekey.pk8       shared.pk8       testkey.pk8  avb_keys  media.x509.pem  platform.x509.pem  releasekey.x509.pem  shared.x509.pem  testkey.x509.pem
builder@android(master):~/code/vendor/mediatek/proprietary_tv/open/common/security$
builder@android(master):~/code/vendor/mediatek/proprietary_tv/open/common/security$mkdir ota_dir
builder@android(master):~/code/vendor/mediatek/proprietary_tv/open/common/security$mv mt5862_bga_1g-ota_update.zip  ota_dir/
builder@android(master):~/code/vendor/mediatek/proprietary_tv/open/common/security/ota_dir$unzip mt5862_bga_1g-ota_update.zip 
Archive:  mt5862_bga_1g-ota_update.zip
signed by SignApk
 extracting: META-INF/com/android/metadata  
 extracting: compatibility.zip       
 extracting: system.new.dat.br       
 extracting: system.patch.dat        
 extracting: vendor.new.dat.br       
 extracting: vendor.patch.dat        
  inflating: 3rd_a.img               
  inflating: 3rd_rw.img              
  inflating: FRC-R2.bin              
  inflating: META-INF/com/google/android/update-binary  
  inflating: META-INF/com/google/android/updater-script  
  inflating: RT_PM.bin               
  inflating: bl31.aes                
  inflating: boot.img                
  inflating: dtb.bin                 
  inflating: factory_a.img           
  inflating: linux_rootfs_a.img      
  inflating: mboot.bin               
  inflating: rom_emmc_boot.bin       
  inflating: system.transfer.list    
  inflating: tee.aes                 
  inflating: tvcertificate.img       
  inflating: tvconfig.img            
  inflating: tvservice.img           
  inflating: vendor.transfer.list    
  inflating: META-INF/com/android/otacert  
builder@mm-android(master):~/code/vendor/mediatek/proprietary_tv/open/common/security/ota_dir$
mv mt5862_bga_1g-ota_update.zip  ../

3.2 编辑OTA文件

目标:移除tvconfig文件,即OTA不升级此分区

3.2.1 编辑 updater-script
  • 路径:ota_dir\META-INF\com\google\android\updater-script
  • 移除升级脚本中关于tvconfig的部分
package_extract_file("tvconfig.img", "/dev/block/platform/mstar_mci.0/by-name/tvconfig");
3.2.2 删除tvconfig.img文件
  • 删除 ota_dir\tvconfig.img 文件
3.2.3 确认OTA签名文件

打开如下文件,后续重新签名后,签名文件要和此文件一致,否则OTA升级时候验证会失败

  • ota_dir\META-INF\com\android\otacert
-----BEGIN CERTIFICATE-----
……省略……
XXXXXXXXXXXXXXXXXXXXXX/LfA==
-----END CERTIFICATE-----

3.3 重新打包OTA ZIP包

  • 压缩:$zip -qry update.unsigned.zip ota_dir/*
builder@android(master):~/code/vendor/mediatek/proprietary_tv/open/common/security$zip -qry update.unsigned.zip ota_dir/
builder@android(master):~/code/vendor/mediatek/proprietary_tv/open/common/security$ls
adb        media.x509.pem                platform.pk8       releasekey.x509.pem  testkey.pk8
avb_keys   mt5862_bga_1g-ota_update.zip  platform.x509.pem  shared.pk8           testkey.x509.pem
media.pk8  ota_dir                       releasekey.pk8     shared.x509.pem      update.unsigned.zip
builder@android(master):~/code/vendor/mediatek/proprietary_tv/open/common/security$

3.4 重新签名

3.4.1 签名
  • 命令:$java -Xmx512m -jar -Djava.library.path=“/home/code/out/host/linux-x86/lib64/” /home/code/out/host/linux-x86/framework/signapk.jar -w releasekey.x509.pem releasekey.pk8 update.unsigned.zip update.signed.zip
builder@android(master):~/code/vendor/mediatek/proprietary_tv/open/common/security$java  -Xmx512m -jar  -Djava.library.path="/home/code/out/host/linux-x86/lib64/"  /home/code/out/host/linux-x86/framework/signapk.jar -w releasekey.x509.pem releasekey.pk8    update.unsigned.zip update.signed.zip
3.4.2 比对otacert签名文件
  • 打开update.signed.zip的otacert文件,和3.2.3节的同名文件做对比
  • 确认二者一致,则说明你用对了签名文件

3.5 验证OTA文件

3.5.1 说明
  • am start -n com.android.tv.settings/.MainSettings

  • 本文使用原生Android settings的ota local update功能验证

  • 手动修改下/vendor/tvconfig/config/model/customer_1.ini文件,或者复制一份
  • 升级完成,验证,修改的文件依旧存在,验证通过,OK~
3.5.2 图示

-打开AOSP原生settings

  • 根据升级提示,需要将zip包命名为: update_signed.zip
  • 出现 [UPDATE] 按钮后,点击即可测试OTA本地升级

4.结束语

关键的动作来袭……

  • 解压缩的命令,需严格按本文提示操作:unzip mt5862_bga_1g-ota_update.zip
相关文章
|
2月前
|
Android开发
基于android-11.0.0_r39,系统应用的手动签名方法和过程
本文介绍了基于Android 11.0.0_r39版本进行系统应用手动签名的方法和解决签名过程中遇到的错误,包括处理`no conscrypt_openjdk_jni-linux-x86_64`和`RegisterNatives failed`的问题。
139 2
|
4月前
|
安全 Java Android开发
05. 【Android教程】Android 程序签名打包
05. 【Android教程】Android 程序签名打包
55 1
|
2月前
|
Java Android开发 Windows
使用keytool查看Android APK签名
本文介绍了如何使用Windows命令行工具和keytool查看APK的签名信息,并提供了使用AOSP环境中的signapk.jar工具对APK进行系统签名的方法。
249 0
使用keytool查看Android APK签名
|
2月前
|
Android开发 数据安全/隐私保护
Android Studio创建JKS签名遇到的坑
Android Studio创建JKS签名遇到的坑
114 1
|
3月前
|
Android开发 Java 数据安全/隐私保护
「移动端」Android平台签名证书(.keystore)生成指南
发布Android APK需签名证书,步骤如下: 1. 安装JRE,如[JRE8](https://www.oracle.com/technetwork/java/javase/downloads/index.html),并添加到环境变量。 2. 使用`keytool -genkey`命令生成证书,例如: ``` keytool -genkey -alias testalias -keyalg RSA -keysize 2048 -validity 36500 -keystore test.keystore ``` 输入相关个人信息及密码。
690 0
「移动端」Android平台签名证书(.keystore)生成指南
|
3月前
|
Android开发
【亲测,安卓版】快速将网页网址打包成安卓app,一键将网页打包成app,免安装纯绿色版本,快速将网页网址打包成安卓apk
【亲测,安卓版】快速将网页网址打包成安卓app,一键将网页打包成app,免安装纯绿色版本,快速将网页网址打包成安卓apk
110 0
|
4月前
|
Java 开发工具 Android开发
详细解读Android开发DNK开发将.c文件打包成os
详细解读Android开发DNK开发将.c文件打包成os
29 0
|
4月前
|
jenkins 持续交付 开发工具
Android使用Jenkins打包自动维护sdk版本号
Android使用Jenkins打包自动维护sdk版本号
49 0
|
4月前
|
Android开发
Android Gradle开发—脚本实现自动打包后复制一份APK文件,并修改APK名称,到指定目录作备份
Android Gradle开发—脚本实现自动打包后复制一份APK文件,并修改APK名称,到指定目录作备份
222 0
|
存储 测试技术 文件存储
【Android 文件管理】分区存储 ( 修改与删除图片文件 )(二)
【Android 文件管理】分区存储 ( 修改与删除图片文件 )(二)
399 0
【Android 文件管理】分区存储 ( 修改与删除图片文件 )(二)