既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
$(INSTALLED_PRODUCTIMAGE_TARGET) \
$(INSTALLED_VBMETAIMAGE_TARGET) \
$(INSTALLED_DTBOIMAGE_TARGET) \
$(INTERNAL_SYSTEMOTHERIMAGE_FILES) \
$(INSTALLED_ANDROID_INFO_TXT_TARGET) \
$(INSTALLED_KERNEL_TARGET) \
$(INSTALLED_2NDBOOTLOADER_TARGET) \
$(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SYSTEM_BASE_FS_PATH) \
$(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_VENDOR_BASE_FS_PATH) \
$(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_PRODUCT_BASE_FS_PATH) \
$(SELINUX_FC) \
$(APKCERTS_FILE) \
$(SOONG_ZIP) \
$(HOST_OUT_EXECUTABLES)/fs_config \
$(HOST_OUT_EXECUTABLES)/imgdiff \
$(HOST_OUT_EXECUTABLES)/bsdiff \
$(BUILD_IMAGE_SRCS) \
$(BUILT_VENDOR_MANIFEST) \
$(BUILT_VENDOR_MATRIX) \
| $(ACP)
@echo "Package target files: $@"
$(call create-system-vendor-symlink)
$(call create-system-product-symlink)
# 删除之前的zip文件
$(hide) rm -rf $@ $@.list $(zip_root)
$(hide) mkdir -p $(dir $@) $(zip_root)
#全局搜索"hide :="的字眼,可以发现config.mk中有:hide := @,
#说明所有的$(hide) xxxx语句,其实就等同于命令前加了“@”字符,即在Makefile中表示的是关闭了回显,说明Makefile在执行@后面的命令时,不回显将要执行的命令
#关于recovery.img
#这里要添加RAMDISK和kernel,还生成了target包中的RECOVERY目录下的base cmdline等文件。
ifneq (,
(
I
N
S
T
A
L
L
E
D
R
E
C
O
V
E
R
Y
I
M
A
G
E
T
A
R
G
E
T
)
(INSTALLED_RECOVERYIMAGE_TARGET)
(INSTALLEDRECOVERYIMAGETARGET)(filter true,$(BOARD_USES_RECOVERY_AS_BOOT)))#因为不是AB系统,所以这里是成立的
@# Components of the recovery image
$(hide) mkdir -p
(
z
i
p
r
o
o
t
)
/
(zip_root)/
(ziproot)/(PRIVATE_RECOVERY_OUT)
$(hide) $(call package_files-copy-root,
(
T
A
R
G
E
T
R
E
C
O
V
E
R
Y
R
O
O
T
O
U
T
)
,
(TARGET_RECOVERY_ROOT_OUT),
(TARGETRECOVERYROOTOUT),(zip_root)/$(PRIVATE_RECOVERY_OUT)/RAMDISK)
ifdef INSTALLED_KERNEL_TARGET
$(hide) cp $(INSTALLED_KERNEL_TARGET)
(
z
i
p
r
o
o
t
)
/
(zip_root)/
(ziproot)/(PRIVATE_RECOVERY_OUT)/kernel
endif
ifdef INSTALLED_2NDBOOTLOADER_TARGET
$(hide) cp $(INSTALLED_2NDBOOTLOADER_TARGET)
(
z
i
p
r
o
o
t
)
/
(zip_root)/
(ziproot)/(PRIVATE_RECOVERY_OUT)/second
endif
ifdef BOARD_INCLUDE_RECOVERY_DTBO
$(hide) cp $(INSTALLED_DTBOIMAGE_TARGET)
(
z
i
p
r
o
o
t
)
/
(zip_root)/
(ziproot)/(PRIVATE_RECOVERY_OUT)/recovery_dtbo
endif
ifdef INTERNAL_KERNEL_CMDLINE
(
h
i
d
e
)
e
c
h
o
"
(hide) echo "
(hide)echo"(INTERNAL_KERNEL_CMDLINE)" >
(
z
i
p
r
o
o
t
)
/
(zip_root)/
(ziproot)/(PRIVATE_RECOVERY_OUT)/cmdline
endif
ifdef BOARD_KERNEL_BASE
(
h
i
d
e
)
e
c
h
o
"
(hide) echo "
(hide)echo"(BOARD_KERNEL_BASE)" >
(
z
i
p
r
o
o
t
)
/
(zip_root)/
(ziproot)/(PRIVATE_RECOVERY_OUT)/base
endif
ifdef BOARD_KERNEL_PAGESIZE
(
h
i
d
e
)
e
c
h
o
"
(hide) echo "
(hide)echo"(BOARD_KERNEL_PAGESIZE)" >
(
z
i
p
r
o
o
t
)
/
(zip_root)/
(ziproot)/(PRIVATE_RECOVERY_OUT)/pagesize
endif
endif # INSTALLED_RECOVERYIMAGE_TARGET defined or BOARD_USES_RECOVERY_AS_BOOT is true
#关于boot.img
@# Components of the boot image
$(hide) mkdir -p
(
z
i
p
r
o
o
t
)
/
B
O
O
T
i
f
e
q
(
(zip_root)/BOOT ifeq (
(ziproot)/BOOTifeq((BOARD_BUILD_SYSTEM_ROOT_IMAGE),true)
$(hide) mkdir -p $(zip_root)/ROOT
$(hide) $(call package_files-copy-root,
(
T
A
R
G
E
T
R
O
O
T
O
U
T
)
,
(TARGET_ROOT_OUT),
(TARGETROOTOUT),(zip_root)/ROOT)
else
$(hide) $(call package_files-copy-root,
(
T
A
R
G
E
T
R
O
O
T
O
U
T
)
,
(TARGET_ROOT_OUT),
(TARGETROOTOUT),(zip_root)/BOOT/RAMDISK)
endif
@# If we are using recovery as boot, this is already done when processing recovery.
ifneq ($(BOARD_USES_RECOVERY_AS_BOOT),true)
ifdef INSTALLED_KERNEL_TARGET
$(hide) cp $(INSTALLED_KERNEL_TARGET) $(zip_root)/BOOT/kernel
endif
ifdef INSTALLED_2NDBOOTLOADER_TARGET
$(hide) cp $(INSTALLED_2NDBOOTLOADER_TARGET) $(zip_root)/BOOT/second
endif
ifdef INTERNAL_KERNEL_CMDLINE
(
h
i
d
e
)
e
c
h
o
"
(hide) echo "
(hide)echo"(INTERNAL_KERNEL_CMDLINE)" > $(zip_root)/BOOT/cmdline
endif
ifdef BOARD_KERNEL_BASE
(
h
i
d
e
)
e
c
h
o
"
(hide) echo "
(hide)echo"(BOARD_KERNEL_BASE)" > $(zip_root)/BOOT/base
endif
ifdef BOARD_KERNEL_PAGESIZE
(
h
i
d
e
)
e
c
h
o
"
(hide) echo "
(hide)echo"(BOARD_KERNEL_PAGESIZE)" > $(zip_root)/BOOT/pagesize
endif
endif # BOARD_USES_RECOVERY_AS_BOOT
#system image
$(hide)
(
f
o
r
e
a
c
h
t
,
(foreach t,
(foreacht,(INSTALLED_RADIOIMAGE_TARGET),
mkdir -p $(zip_root)/RADIO;
cp $(t)
(
z
i
p
r
o
o
t
)
/
R
A
D
I
O
/
(zip_root)/RADIO/
(ziproot)/RADIO/(notdir $(t))😉
@# Contents of the system image
$(hide) $(call package_files-copy-root,
(
S
Y
S
T
E
M
I
M
A
G
E
S
O
U
R
C
E
D
I
R
)
,
(SYSTEMIMAGE_SOURCE_DIR),
(SYSTEMIMAGESOURCEDIR),(zip_root)/SYSTEM)
@# Contents of the data image
$(hide) $(call package_files-copy-root,
(
T
A
R
G
E
T
O
U
T
D
A
T
A
)
,
(TARGET_OUT_DATA),
(TARGETOUTDATA),(zip_root)/DATA)
#vendor image
ifdef BOARD_VENDORIMAGE_FILE_SYSTEM_TYPE
@# Contents of the vendor image
$(hide) $(call package_files-copy-root,
(
T
A
R
G
E
T
O
U
T
V
E
N
D
O
R
)
,
(TARGET_OUT_VENDOR),
(TARGETOUTVENDOR),(zip_root)/VENDOR)
endif
ifdef BOARD_PRODUCTIMAGE_FILE_SYSTEM_TYPE
@# Contents of the product image
$(hide) $(call package_files-copy-root,
(
T
A
R
G
E
T
O
U
T
P
R
O
D
U
C
T
)
,
(TARGET_OUT_PRODUCT),
(TARGETOUTPRODUCT),(zip_root)/PRODUCT)
endif
ifdef INSTALLED_SYSTEMOTHERIMAGE_TARGET
@# Contents of the system_other image
$(hide) $(call package_files-copy-root,
(
T
A
R
G
E
T
O
U
T
S
Y
S
T
E
M
O
T
H
E
R
)
,
(TARGET_OUT_SYSTEM_OTHER),
(TARGETOUTSYSTEMOTHER),(zip_root)/SYSTEM_OTHER)
endif
#上面这几个基本Image的处理,一般都不需要修改。至于其中的细节,等深入研究的时候再补充。哈哈!坑(1)
#Extra contents of the OTA package,这是target包里面的OTA这个目录相关的。应该说,很重要!!!
@# Extra contents of the OTA package
$(hide) mkdir -p $(zip_root)/OTA
$(hide) cp $(INSTALLED_ANDROID_INFO_TXT_TARGET) $(zip_root)/OTA/
#这个ota tool,就是OTA/bin/目录下的那个updater文件,最终被添加到升级包中并更名为updater-binary,看到这个名字应该已经清楚了吧,它就是用来在recovery中升级操作时解析升级脚本,真正执行升级时的数据处理工作的。
ifneq (
(
A
B
O
T
A
U
P
D
A
T
E
R
)
,
t
r
u
e
)
i
f
n
e
q
(
(AB_OTA_UPDATER),true) ifneq (
(ABOTAUPDATER),true)ifneq((built_ota_tools),)
$(hide) mkdir -p $(zip_root)/OTA/bin
$(hide) cp $(PRIVATE_OTA_TOOLS) $(zip_root)/OTA/bin/
endif
endif
#target包里面META目录下的,releasetools.py 也被拷贝到这里
@# Files that do not end up in any images, but are necessary to
@# build them.
$(hide) mkdir -p $(zip_root)/META
$(hide) cp $(APKCERTS_FILE)
(
z
i
p
r
o
o
t
)
/
M
E
T
A
/
a
p
k
c
e
r
t
s
.
t
x
t
i
f
n
e
q
(
(zip_root)/META/apkcerts.txt ifneq (
(ziproot)/META/apkcerts.txtifneq((tool_extension),)
$(hide) cp $(PRIVATE_TOOL_EXTENSION) $(zip_root)/META/
endif
(
h
i
d
e
)
e
c
h
o
"
(hide) echo "
(hide)echo"(PRODUCT_OTA_PUBLIC_KEYS)" > $(zip_root)/META/otakeys.txt
$(hide) cp $(SELINUX_FC) $(zip_root)/META/file_contexts.bin
#收集各种配置信息
#这个misc_info文件很重要。里面记录了各种属性键值对,包括项目配置、系统属性等等。在后面生成升级包的时候会读取出来使用。
$(hide) echo "recovery_api_version=$(PRIVATE_RECOVERY_API_VERSION)" > $(zip_root)/META/misc_info.txt
$(hide) echo "fstab_version=$(PRIVATE_RECOVERY_FSTAB_VERSION)" >> $(zip_root)/META/misc_info.txt
ifdef BOARD_FLASH_BLOCK_SIZE
(
h
i
d
e
)
e
c
h
o
"
b
l
o
c
k
s
i
z
e
=
(hide) echo "blocksize=
(hide)echo"blocksize=(BOARD_FLASH_BLOCK_SIZE)" >> $(zip_root)/META/misc_info.txt
endif
ifdef BOARD_BOOTIMAGE_PARTITION_SIZE
(
h
i
d
e
)
e
c
h
o
"
b
o
o
t
s
i
z
e
=
(hide) echo "boot_size=
(hide)echo"bootsize=(BOARD_BOOTIMAGE_PARTITION_SIZE)" >>
(
z
i
p
r
o
o
t
)
/
M
E
T
A
/
m
i
s
c
i
n
f
o
.
t
x
t
e
n
d
i
f
i
f
e
q
(
(zip_root)/META/misc_info.txt endif ifeq (
(ziproot)/META/miscinfo.txtendififeq((INSTALLED_RECOVERYIMAGE_TARGET),)
$(hide) echo “no_recovery=true” >> $(zip_root)/META/misc_info.txt
endif
ifdef BOARD_INCLUDE_RECOVERY_DTBO
$(hide) echo “include_recovery_dtbo=true” >> $(zip_root)/META/misc_info.txt
endif
ifdef BOARD_RECOVERYIMAGE_PARTITION_SIZE
(
h
i
d
e
)
e
c
h
o
"
r
e
c
o
v
e
r
y
s
i
z
e
=
(hide) echo "recovery_size=
(hide)echo"recoverysize=(BOARD_RECOVERYIMAGE_PARTITION_SIZE)" >> $(zip_root)/META/misc_info.txt
endif
ifdef TARGET_RECOVERY_FSTYPE_MOUNT_OPTIONS
@# TARGET_RECOVERY_FSTYPE_MOUNT_OPTIONS can be empty to indicate that nothing but defaults should be used.
(
h
i
d
e
)
e
c
h
o
"
r
e
c
o
v
e
r
y
m
o
u
n
t
o
p
t
i
o
n
s
=
(hide) echo "recovery_mount_options=
(hide)echo"recoverymountoptions=(TARGET_RECOVERY_FSTYPE_MOUNT_OPTIONS)" >> $(zip_root)/META/misc_info.txt
else
(
h
i
d
e
)
e
c
h
o
"
r
e
c
o
v
e
r
y
m
o
u
n
t
o
p
t
i
o
n
s
=
(hide) echo "recovery_mount_options=
(hide)echo"recoverymountoptions=(DEFAULT_TARGET_RECOVERY_FSTYPE_MOUNT_OPTIONS)" >> $(zip_root)/META/misc_info.txt
endif
(
h
i
d
e
)
e
c
h
o
"
t
o
o
l
e
x
t
e
n
s
i
o
n
s
=
(hide) echo "tool_extensions=
(hide)echo"toolextensions=(PRIVATE_TOOL_EXTENSIONS)" >> $(zip_root)/META/misc_info.txt
(
h
i
d
e
)
e
c
h
o
"
d
e
f
a
u
l
t
s
y
s
t
e
m
d
e
v
c
e
r
t
i
f
i
c
a
t
e
=
(hide) echo "default_system_dev_certificate=
(hide)echo"defaultsystemdevcertificate=(DEFAULT_SYSTEM_DEV_CERTIFICATE)" >> $(zip_root)/META/misc_info.txt
ifdef PRODUCT_EXTRA_RECOVERY_KEYS
(
h
i
d
e
)
e
c
h
o
"
e
x
t
r
a
r
e
c
o
v
e
r
y
k
e
y
s
=
(hide) echo "extra_recovery_keys=
(hide)echo"extrarecoverykeys=(PRODUCT_EXTRA_RECOVERY_KEYS)" >> $(zip_root)/META/misc_info.txt
endif
(
h
i
d
e
)
e
c
h
o
′
m
k
b
o
o
t
i
m
g
a
r
g
s
=
(hide) echo 'mkbootimg_args=
(hide)echo′mkbootimgargs=(BOARD_MKBOOTIMG_ARGS)’ >> $(zip_root)/META/misc_info.txt
(
h
i
d
e
)
e
c
h
o
′
m
k
b
o
o
t
i
m
g
v
e
r
s
i
o
n
a
r
g
s
=
(hide) echo 'mkbootimg_version_args=
(hide)echo′mkbootimgversionargs=(INTERNAL_MKBOOTIMG_VERSION_ARGS)’ >> $(zip_root)/META/misc_info.txt
$(hide) echo “multistage_support=1” >> $(zip_root)/META/misc_info.txt
$(hide) echo “blockimgdiff_versions=3,4” >>
(
z
i
p
r
o
o
t
)
/
M
E
T
A
/
m
i
s
c
i
n
f
o
.
t
x
t
i
f
n
e
q
(
(zip_root)/META/misc_info.txt ifneq (
(ziproot)/META/miscinfo.txtifneq((OEM_THUMBPRINT_PROPERTIES),)
# OTA scripts are only interested in fingerprint related properties
(
h
i
d
e
)
e
c
h
o
"
o
e
m
f
i
n
g
e
r
p
r
i
n
t
p
r
o
p
e
r
t
i
e
s
=
(hide) echo "oem_fingerprint_properties=
(hide)echo"oemfingerprintproperties=(OEM_THUMBPRINT_PROPERTIES)" >>
(
z
i
p
r
o
o
t
)
/
M
E
T
A
/
m
i
s
c
i
n
f
o
.
t
x
t
e
n
d
i
f
i
f
n
e
q
(
(zip_root)/META/misc_info.txt endif ifneq (
(ziproot)/META/miscinfo.txtendififneq((PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SYSTEM_BASE_FS_PATH),)
$(hide) cp
(
P
R
O
D
U
C
T
S
.
(PRODUCTS.
(PRODUCTS.(INTERNAL_PRODUCT).PRODUCT_SYSTEM_BASE_FS_PATH)
(
z
i
p
r
o
o
t
)
/
M
E
T
A
/
(zip_root)/META/
(ziproot)/META/(notdir
(
P
R
O
D
U
C
T
S
.
(PRODUCTS.
(PRODUCTS.(INTERNAL_PRODUCT).PRODUCT_SYSTEM_BASE_FS_PATH))
endif
ifneq (
(
P
R
O
D
U
C
T
S
.
(PRODUCTS.
(PRODUCTS.(INTERNAL_PRODUCT).PRODUCT_VENDOR_BASE_FS_PATH),)
$(hide) cp
(
P
R
O
D
U
C
T
S
.
(PRODUCTS.
(PRODUCTS.(INTERNAL_PRODUCT).PRODUCT_VENDOR_BASE_FS_PATH)
(
z
i
p
r
o
o
t
)
/
M
E
T
A
/
(zip_root)/META/
(ziproot)/META/(notdir
(
P
R
O
D
U
C
T
S
.
(PRODUCTS.
(PRODUCTS.(INTERNAL_PRODUCT).PRODUCT_VENDOR_BASE_FS_PATH))
endif
ifneq (
(
P
R
O
D
U
C
T
S
.
(PRODUCTS.
(PRODUCTS.(INTERNAL_PRODUCT).PRODUCT_PRODUCT_BASE_FS_PATH),)
$(hide) cp
(
P
R
O
D
U
C
T
S
.
(PRODUCTS.
(PRODUCTS.(INTERNAL_PRODUCT).PRODUCT_PRODUCT_BASE_FS_PATH)
(
z
i
p
r
o
o
t
)
/
M
E
T
A
/
(zip_root)/META/
(ziproot)/META/(notdir
(
P
R
O
D
U
C
T
S
.
(PRODUCTS.
(PRODUCTS.(INTERNAL_PRODUCT).PRODUCT_PRODUCT_BASE_FS_PATH))
endif
ifneq ($(strip $(SANITIZE_TARGET)),)
# We need to create userdata.img with real data because the instrumented libraries are in userdata.img.
$(hide) echo “userdata_img_with_data=true” >>
(
z
i
p
r
o
o
t
)
/
M
E
T
A
/
m
i
s
c
i
n
f
o
.
t
x
t
e
n
d
i
f
i
f
e
q
(
(zip_root)/META/misc_info.txt endif ifeq (
(ziproot)/META/miscinfo.txtendififeq((BOARD_USES_FULL_RECOVERY_IMAGE),true)
$(hide) echo “full_recovery_image=true” >>
(
z
i
p
r
o
o
t
)
/
M
E
T
A
/
m
i
s
c
i
n
f
o
.
t
x
t
e
n
d
i
f
i
f
e
q
(
(zip_root)/META/misc_info.txt endif ifeq (
(ziproot)/META/miscinfo.txtendififeq((BOARD_AVB_ENABLE),true)
$(hide) echo “avb_enable=true” >> $(zip_root)/META/misc_info.txt
(
h
i
d
e
)
e
c
h
o
"
a
v
b
v
b
m
e
t
a
k
e
y
p
a
t
h
=
(hide) echo "avb_vbmeta_key_path=
(hide)echo"avbvbmetakeypath=(BOARD_AVB_KEY_PATH)" >> $(zip_root)/META/misc_info.txt
(
h
i
d
e
)
e
c
h
o
"
a
v
b
v
b
m
e
t
a
a
l
g
o
r
i
t
h
m
=
(hide) echo "avb_vbmeta_algorithm=
(hide)echo"avbvbmetaalgorithm=(BOARD_AVB_ALGORITHM)" >> $(zip_root)/META/misc_info.txt
(
h
i
d
e
)
e
c
h
o
"
a
v
b
v
b
m
e
t
a
a
r
g
s
=
(hide) echo "avb_vbmeta_args=
(hide)echo"avbvbmetaargs=(BOARD_AVB_MAKE_VBMETA_IMAGE_ARGS)" >> $(zip_root)/META/misc_info.txt
(
h
i
d
e
)
e
c
h
o
"
a
v
b
b
o
o
t
a
d
d
h
a
s
h
f
o
o
t
e
r
a
r
g
s
=
(hide) echo "avb_boot_add_hash_footer_args=
(hide)echo"avbbootaddhashfooterargs=(BOARD_AVB_BOOT_ADD_HASH_FOOTER_ARGS)" >> $(zip_root)/META/misc_info.txt
ifdef BOARD_AVB_BOOT_KEY_PATH
(
h
i
d
e
)
e
c
h
o
"
a
v
b
b
o
o
t
k
e
y
p
a
t
h
=
(hide) echo "avb_boot_key_path=
(hide)echo"avbbootkeypath=(BOARD_AVB_BOOT_KEY_PATH)" >> $(zip_root)/META/misc_info.txt
(
h
i
d
e
)
e
c
h
o
"
a
v
b
b
o
o
t
a
l
g
o
r
i
t
h
m
=
(hide) echo "avb_boot_algorithm=
(hide)echo"avbbootalgorithm=(BOARD_AVB_BOOT_ALGORITHM)" >> $(zip_root)/META/misc_info.txt
(
h
i
d
e
)
e
c
h
o
"
a
v
b
b
o
o
t
r
o
l
l
b
a
c
k
i
n
d
e
x
l
o
c
a
t
i
o
n
=
(hide) echo "avb_boot_rollback_index_location=
(hide)echo"avbbootrollbackindexlocation=(BOARD_AVB_BOOT_ROLLBACK_INDEX_LOCATION)" >> $(zip_root)/META/misc_info.txt
endif # BOARD_AVB_BOOT_KEY_PATH
(
h
i
d
e
)
e
c
h
o
"
a
v
b
r
e
c
o
v
e
r
y
a
d
d
h
a
s
h
f
o
o
t
e
r
a
r
g
s
=
(hide) echo "avb_recovery_add_hash_footer_args=
(hide)echo"avbrecoveryaddhashfooterargs=(BOARD_AVB_RECOVERY_ADD_HASH_FOOTER_ARGS)" >> $(zip_root)/META/misc_info.txt
ifdef BOARD_AVB_RECOVERY_KEY_PATH
(
h
i
d
e
)
e
c
h
o
"
a
v
b
r
e
c
o
v
e
r
y
k
e
y
p
a
t
h
=
(hide) echo "avb_recovery_key_path=
(hide)echo"avbrecoverykeypath=(BOARD_AVB_RECOVERY_KEY_PATH)" >> $(zip_root)/META/misc_info.txt
(
h
i
d
e
)
e
c
h
o
"
a
v
b
r
e
c
o
v
e
r
y
a
l
g
o
r
i
t
h
m
=
(hide) echo "avb_recovery_algorithm=
(hide)echo"avbrecoveryalgorithm=(BOARD_AVB_RECOVERY_ALGORITHM)" >> $(zip_root)/META/misc_info.txt
(
h
i
d
e
)
e
c
h
o
"
a
v
b
r
e
c
o
v
e
r
y
r
o
l
l
b
a
c
k
i
n
d
e
x
l
o
c
a
t
i
o
n
=
(hide) echo "avb_recovery_rollback_index_location=
(hide)echo"avbrecoveryrollbackindexlocation=(BOARD_AVB_RECOVERY_ROLLBACK_INDEX_LOCATION)" >> $(zip_root)/META/misc_info.txt
endif # BOARD_AVB_RECOVERY_KEY_PATH
ifeq (yes, $(strip $(MAIN_VBMETA_IN_BOOT)))
$(hide) echo “avb_main_vbmeta_in_boot=true” >> $(zip_root)/META/misc_info.txt
endif # MAIN_VBMETA_IN_BOOT
endif # BOARD_AVB_ENABLE
ifdef BOARD_BPT_INPUT_FILES
$(hide) echo “board_bpt_enable=true” >> $(zip_root)/META/misc_info.txt
(
h
i
d
e
)
e
c
h
o
"
b
o
a
r
d
b
p
t
m
a
k
e
t
a
b
l
e
a
r
g
s
=
(hide) echo "board_bpt_make_table_args=
(hide)echo"boardbptmaketableargs=(BOARD_BPT_MAKE_TABLE_ARGS)" >> $(zip_root)/META/misc_info.txt
(
h
i
d
e
)
e
c
h
o
"
b
o
a
r
d
b
p
t
i
n
p
u
t
f
i
l
e
s
=
(hide) echo "board_bpt_input_files=
(hide)echo"boardbptinputfiles=(BOARD_BPT_INPUT_FILES)" >> $(zip_root)/META/misc_info.txt
endif
ifdef BOARD_BPT_DISK_SIZE
(
h
i
d
e
)
e
c
h
o
"
b
o
a
r
d
b
p
t
d
i
s
k
s
i
z
e
=
(hide) echo "board_bpt_disk_size=
(hide)echo"boardbptdisksize=(BOARD_BPT_DISK_SIZE)" >> $(zip_root)/META/misc_info.txt
endif
$(call generate-userimage-prop-dictionary, $(zip_root)/META/misc_info.txt)
#这里是其它一些img的处理
#这里决定了是否更新lk logo 等等
##这里的这个ota_update_list.txt是根据项目的scatter文件(刷机工具使用的那个文件)生成的,做升级包的时候会读取里面的信息,所以它决定了后面会额外添加哪些img到升级包当中,也就是说scatter文件中的is_upgradable就基本决定了对应的分区是否会更新。
#mt_ota_preprocess.py在alps\vendor\mediatek\proprietary\scripts\releasetools\mt_ota_preprocess.py
#mt_ota_preprocess.py这个文件虽然重要,但里面的内容比较简单,就不列出来了。
#PRODUCT_OUT就是编译生成的out目录
@# sign image used to get boot and recovery sig files
$(hide) $(SHELL) $(SECURITY_SIG_TOOL)
@# Copy raw images which need OTA updates from out folder to zip_root/IMAGES folder
#这几个属性在后面的mt_ota_preprocess.py脚本中有用到
$(hide) BOARD_AVB_ENABLE="$(BOARD_AVB_ENABLE)" AB_OTA_UPDATER="$(AB_OTA_UPDATER)" AB_OTA_PARTITIONS="$(AB_OTA_PARTITIONS)" $(TARGET_RELEASETOOLS_EXTENSIONS)/mt_ota_preprocess.py $(zip_root) $(PRODUCT_OUT) $(PRODUCT_OUT)/ota_update_list.txt
ifneq ($(INSTALLED_RECOVERYIMAGE_TARGET),)
(
h
i
d
e
)
P
A
T
H
=
(hide) PATH=
(hide)PATH=(foreach p,
(
I
N
T
E
R
N
A
L
U
S
E
R
I
M
A
G
E
S
B
I
N
A
R
Y
P
A
T
H
S
)
,
(INTERNAL_USERIMAGES_BINARY_PATHS),
(INTERNALUSERIMAGESBINARYPATHS),§:)$
P
A
T
H
M
K
B
O
O
T
I
M
G
=
PATH MKBOOTIMG=
PATHMKBOOTIMG=(MKBOOTIMG)
build/make/tools/releasetools/make_recovery_patch $(zip_root) $(zip_root)
endif
#剩下的部分涉及到vbmeta.img 、 和AVB()相关的DTBOIMAGE、还有 radio images 等。这些都不了解,也就先不分析了。 坑(3)
#。。。。。。(省略部分代码)
打包zip包
@# Zip everything up, preserving symlinks and placing META/ files first to
@# help early validation of the .zip file while uploading it.
$(hide) find $(zip_root)/META | sort >$@.list
$(hide) find $(zip_root) -path $(zip_root)/META -prune -o -print | sort >>$@.list
$(hide) $(SOONG_ZIP) -d -o $@ -C $(zip_root) -l $@.list
$(hide) $(TARGET_RELEASETOOLS_EXTENSIONS)/replace_img_from_target_files.py $@ $(PRODUCT_OUT)
@# If SECURITY_IMAGE_PATH doesn't exist , security version is 1.1 and images need to sign again
ifeq (“$(wildcard $(SECURITY_IMAGE_PATH))”,“”)
$(hide) $(SHELL) $(SECURITY_SIG_TOOL)
endif
#没错,就是这个目标,直接生成Target包。
.PHONY: target-files-package
target-files-package: $(BUILT_TARGET_FILES_PACKAGE)
ifneq ($(filter $(MAKECMDGOALS),target-files-package),)
$(call dist-for-goals, target-files-package, $(BUILT_TARGET_FILES_PACKAGE))
endif
#完成ota target包的制作
######################################################################################################################
make otapackage其实也在这里,依赖 target包 和 ota\_from\_target\_files 这个脚本。
-----------------------------------------------------------------
OTA update package
name :=
(
T
A
R
G
E
T
P
R
O
D
U
C
T
)
i
f
e
q
(
(TARGET_PRODUCT) ifeq (
(TARGETPRODUCT)ifeq((TARGET_BUILD_TYPE),debug)
name := $(name)_debug
endif
name :=
(
n
a
m
e
)
−
o
t
a
−
(name)-ota-
(name)−ota−(FILE_NAME_TAG)
INTERNAL_OTA_PACKAGE_TARGET := ( P R O D U C T O U T ) / (PRODUCT_OUT)/ (PRODUCTOUT)/(name).zip
$(INTERNAL_OTA_PACKAGE_TARGET): KEY_CERT_PAIR := $(DEFAULT_KEY_CERT_PAIR)
ifeq ($(AB_OTA_UPDATER),true)
$(INTERNAL_OTA_PACKAGE_TARGET): $(BRILLO_UPDATE_PAYLOAD)
else
#BROTLI is out/host/linux-x86/bin/brotli
$(INTERNAL_OTA_PACKAGE_TARGET): $(BROTLI)
endif
#lyc
#这里就是make otapackage这个目标啦,用来构建整包。
这其中 $@ 就是最终要生成的升级包的名称。
$(INTERNAL_OTA_PACKAGE_TARGET): $(BUILT_TARGET_FILES_PACKAGE)
build/make/tools/releasetools/ota_from_target_files
@echo “Package OTA: $@”
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
TA: $@"
[外链图片转存中…(img-BOuQjgCf-1715521964306)]
[外链图片转存中…(img-3z8nJ9YK-1715521964307)]
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!