[MTK][Android P]如何去掉差分包中的preloader分区

最近碰到一个问题,在进行差分升级的时候,会因为某些原因导致preloader hash值不匹配,升级失败,所以需要在差分升级的时候不升级preloader。

解决的方法,就是在制作AB分区的差分升级包的时候,把目标zip解压出来,把ab_partitions.txt中的分区名去掉,同时把preloader.img去掉

修改如下:

Project/build/tools/releasetools/ota_from_target_files.py

METADATA_NAME = 'META-INF/com/android/metadata'
POSTINSTALL_CONFIG = 'META/postinstall_config.txt'
UNZIP_PATTERN = ['IMAGES/*', 'META/*']
AB_PARTITIONS = 'META/ab_partitions.txt'
PRELOADER_STR = "preloader"

......

def RemovePreloaderFromZip(input_file):
  target_file = common.MakeTempFile(prefix="targetfiles-", suffix=".zip")
  shutil.copyfile(input_file, target_file)
  input_tmp = common.UnzipTemp(input_file,UNZIP_PATTERN)
  ab_partitions_file = os.path.join(input_tmp,*AB_PARTITIONS.split('/'))
  with open(ab_partitions_file) as f:
    ab_partitions_lines = f.readlines()
    ab_partitions = [line.strip() for line in ab_partitions_lines]
  new_ab_partitions = common.MakeTempFile(prefix="ab_partitions", suffix=".txt")
  with open(new_ab_partitions, 'w') as f:
    for partition in ab_partitions:
      if (partition.strip() == PRELOADER_STR.strip()):
          continue
      f.write(partition + "\n")
  to_delete = [AB_PARTITIONS]
  to_delete += ['IMAGES/preloader.img']
  common.ZipDelete(target_file, to_delete)
  target_zip = zipfile.ZipFile(target_file, 'a', allowZip64=True)
  common.ZipWrite(target_zip, new_ab_partitions, arcname=AB_PARTITIONS)
  common.ZipClose(target_zip)
  return target_file

def WriteABOTAPackageWithBrilloScript(target_file, output_file,
                                      source_file=None):

......

def WriteABOTAPackageWithBrilloScript(target_file, output_file,
                                      source_file=None):

  if source_file is not None:
    target_info = BuildInfo(OPTIONS.target_info_dict, OPTIONS.oem_dicts)
    source_info = BuildInfo(OPTIONS.source_info_dict, OPTIONS.oem_dicts)
    target_file = RemovePreloaderFromZip(target_file)

 else:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
Preloader分区安卓系统中的一个分区,用于存储系统启动所需的预加载器文件。它位于底层存储设备的特定位置,负责引导系统的初始化过程。 Preloader分区的主要作用有以下几个方面: 1. 引导系统:Preloader分区中存储着引导加载程序,它是系统启动的重要组成部分。当我们打开安卓设备时,引导加载程序从Preloader分区取必要的文件和设置,然后开始加载操作系统。 2. 系统初始化:Preloader分区中还含了系统的初始化程序和相关的配置文件。这些程序和文件用于初始化设备的硬件和软件环境,确保系统的正常运行。 3. 提供系统修复:如果设备发生了一些严重的故障,比如刷机失败或损坏系统文件,Preloader分区可以提供一种快速修复的方法。通过使用恢复模式或者刷入预加载器文件,可以修复设备的软件问题,恢复系统的正常运行。 需要注意的是,修改Preloader分区需要谨慎操作。错误的操作可能导致设备无法正常启动或者变得不稳定。因此,在修改Preloader分区之前,最好备份重要数据,并且确保所使用的预加载器文件是正确的,以防出现意外情况。 总结来说,Preloader分区安卓设备中的一个重要分区,存储着引导加载程序和系统初始化所需的文件和设置。它在系统启动过程中发挥着重要的作用,并提供了一种修复设备的方法。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

thonmin

您的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值