android P OTA (MTK)初探 —— 2、基于块(Block)的OTA:Target 包的制作流程

上文简单介绍了OTA的分类和流程,本文重点分析Target包。

一、Target包结构:

在这里插入图片描述

二、生成命令

研究OTA会发现网上介绍比较多的命令是 make otapackage ,编译完成后,在根目录执行这个命令会生成Target包完整升级包
其实有单独编译Target 包的命令:make target-files-package

android默认情况下,最终生成的Target包在此目录下:
out/target/product/xxx(project_name)/obj/PACKAGING/target_files_intermediates/

三、Makefile 和 Bash shell

由于Target包的生成过程是在alps/build/core/Makefile文件中执行的。
涉及到的大多都是Makefile和shell命令,所以需要对这两方面有一定了解。
Makefile推荐看这个系列的文章,经典之作

shell的内容,相关命令网上资料很多。

四、具体代码分析:

代码比较多,有五六百行,我在重点位置做了中文注释。在理解了Makefile规则后,还是不难看懂这里的代码的。有一点要明确一下,Makefile中定义的变量,类似C语言中的宏定义,是替换机制,而且所有变量都是字符串类型的。
因为没有做AB系统的项目,代码中与AB系统相关的都先略过了,没有做具体分析。

首先,我们要生成Target包,对应的Makefile目标就是代码32行的$(BUILT_TARGET_FILES_PACKAGE)。

##################################################################################################################################################
#开始构建target 包:
#主要的工作包括:
#1、创建$(zip_root)根目录,接下来都是基于zip_root目录进行其它目录的创建。
#2、创建并填充RECOVERY目录,包括:kernel镜像文件、RAMDISK目录。此目录最终用来生成recovery.img。
#3、创建并填充BOOT目录,包括:kernel镜像文件、RAMDISK目录、ramdisk镜像。此目录最终用来生成boot.img。
#4、填充SYSTEM目录。
#5、创建并填充OTA/bin目录。主要的是分析了ota_update_list.txt,这里面定义了lk、logo等img的更新规则。
#6、创建META目录并向该目录下添加一些文本文件。这里主要分析了misc_info.txt这个文件,收集各种配置信息供制作升级包使用。
#7、最后将zip_root目录打包成zip包。


# -----------------------------------------------------------------
# A zip of the directories that map to the target filesystem.
# This zip can be used to create an OTA package or filesystem image
# as a post-build step.
#

#这里的TARGET_PRODUCT 就是我们要编译的项目,在envsetup.sh脚本中赋值。
name := $(TARGET_PRODUCT)
ifeq ($(TARGET_BUILD_TYPE),debug)
  name := $(name)_debug
endif
#FILE_NAME_TAG取值为编译时的选项 ,如user,eng,userdebug,再加上USER环境变量,因此以编译机型xxx的eng版本为例,name = xxxx-target_files-eng.username
name := $(name)-target_files-$(FILE_NAME_TAG)

intermediates := $(call intermediates-dir-for,PACKAGING,target_files)

##target包文件,也就是我们的makefile目标
BUILT_TARGET_FILES_PACKAGE := $(intermediates)/$(name).zip

$(BUILT_TARGET_FILES_PACKAGE): intermediates := $(intermediates)
$(BUILT_TARGET_FILES_PACKAGE): \
		zip_root := $(intermediates)/$(name)

# $(1): Directory to copy
# $(2): Location to copy it to
# The "ls -A" is to prevent "acp s/* d" from failing if s is empty.
#there ACP is prebuilts/build-tools/linux-x86/bin/acp,这是项目编译后生成的,跟ckati类似。应该是用来copy文件的。类似的还有zip2zip等等。
define package_files-copy-root
  if [ -d "$(strip $(1))" -a "$$(ls -A $(1))" ]; then \
    mkdir -p $(2) && \
    $(ACP) -rd $(strip $(1))/* $(2); \
  fi
endef

built_ota_tools :=

# We can't build static executables when SANITIZE_TARGET=address
ifeq ($(strip $(SANITIZE_TARGET)),)
built_ota_tools += \
    $(call intermediates-dir-for,EXECUTABLES,updater,,,$(TARGET_PREFER_32_BIT))/updater
endif
#built_ota_tools is  out/target/product/e966_cq_9071_71_p0/obj/EXECUTABLES/updater_intermediates/updater,应该是要做target包的过程中生成。还没有看懂这个是干嘛的。。。后面会添加的OTA/bin/目录下。

$(BUILT_TARGET_FILES_PACKAGE): PRIVATE_OTA_TOOLS := $(built_ota_tools)
$(BUILT_TARGET_FILES_PACKAGE): PRIVATE_RECOVERY_API_VERSION := $(RECOVERY_API_VERSION)
$(BUILT_TARGET_FILES_PACKAGE): PRIVATE_RECOVERY_FSTAB_VERSION := $(RECOVERY_FSTAB_VERSION)



#这里TARGET_DEVICE_DIR is device/maisui/e966_cq_9071_71_p0(即对应编译的项目名,我这里编译的项目是e966_cq_9071_71_p0,)
###关于releasetools.py
ifeq ($(TARGET_RELEASETOOLS_EXTENSIONS),)
# default to common dir for device vendor
tool_extensions := $(TARGET_DEVICE_DIR)/../common
else
tool_extensions := $(TARGET_RELEASETOOLS_EXTENSIONS)
endif
tool_extension := $(wildcard $(tool_extensions)/releasetools.py)
$(BUILT_TARGET_FILES_PACKAGE): PRIVATE_TOOL_EXTENSIONS := $(tool_extensi
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
制作 Android 13 MTK 平台的 OTA 差分相对来说比较复杂,需要一定的开发经验和知识。以下是一般的步骤和流程: 1. 准备工作: - 确保你的开发环境已经配置好,并且可以编译和构建 Android 13 MTK 平台的源代码。 - 获取原始系统镜像和目标系统镜像,分别表示当前系统和要升级的目标系统。 2. 执行 AOSP 构建: - 使用 AOSP 源代码构建系统,生成目标系统镜像。可以参考 MTK 平台的开发文档来执行构建命令。 3. 生成差分文件: - 使用 Android 提供的工具 `imgdiff`,生成目标系统镜像与当前系统镜像之间的差分文件。具体使用方法可以参考 Android 官方文档。 4. 打差分: - 将生成的差分文件和一些必要的元数据文件(如版本号、设备信息等)打OTA 差分。可以使用 `build/tools/releasetools` 目录下的工具来完成打操作。 5. 签名差分: - 使用 Android 提供的 `signapk` 工具,对生成的差分进行签名。签名是为了确保差分的完整性和安全性。 6. 测试和发布: - 在真实设备上测试差分的安装和升级过程,确保没有问题。 - 将签名后的差分上传到合适的发布渠道,供用户下载和安装。 需要注意的是,以上步骤只是一个大致的流程,具体的操作和工具可能会因为不同的开发环境和配置而有所不同。建议在进行 OTA 差分制作之前,先仔细阅读相关的官方文档和开发者指南,并确保你对 Android 平台开发有一定的了解和经验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值