diff --git a/src/0001-releasetools-support-prebuilt-vendor.img.patch b/src/0001-releasetools-support-prebuilt-vendor.img.patch new file mode 100644 index 0000000000000000000000000000000000000000..69c9bca949fd72820eb6d848fca82c15ae4664b1 --- /dev/null +++ b/src/0001-releasetools-support-prebuilt-vendor.img.patch @@ -0,0 +1,45 @@ +From de5ab99ed0765ee45e97e13d5ef952d4166112c6 Mon Sep 17 00:00:00 2001 +From: Erfan Abdi +Date: Sat, 20 Jan 2024 04:20:43 +0330 +Subject: [PATCH] releasetools: support prebuilt vendor.img + +Signing builds with prebuilt vendor.img causes the following error: + +Traceback (most recent call last): + File "./build/make/tools/releasetools/sign_target_files_apks", line 1230, in + main(sys.argv[1:]) + File "./build/make/tools/releasetools/sign_target_files_apks", line 1223, in main + add_img_to_target_files.main(new_args) + File ".../build/make/tools/releasetools/add_img_to_target_files.py", line 942, in main + AddImagesToTargetFiles(args[0]) + File ".../build/make/tools/releasetools/add_img_to_target_files.py", line 892, in AddImagesToTargetFiles + CheckAbOtaImages(output_zip, ab_partitions) + File ".../build/make/tools/releasetools/add_img_to_target_files.py", line 562, in CheckAbOtaImages + assert available, "Failed to find " + img_name +AssertionError: Failed to find vendor.img + +This patch addresses this error by copying IMAGES/vendor.img if it exists in the input zip + +Test: Follow https://source.android.com/devices/tech/ota/sign_builds#release-keys and then +https: //source.android.com/devices/tech/ota/sign_builds#creating-image-files +Change-Id: I903ff20d79bcf7621ebf29f0b8dfe85ebc3fb1ff +--- + tools/releasetools/sign_target_files_apks.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/tools/releasetools/sign_target_files_apks.py b/tools/releasetools/sign_target_files_apks.py +index 089d8f7455..39ffc12a61 100755 +--- a/tools/releasetools/sign_target_files_apks.py ++++ b/tools/releasetools/sign_target_files_apks.py +@@ -534,7 +534,7 @@ def ProcessTargetFiles(input_tf_zip, output_tf_zip, misc_info, + + for info in input_tf_zip.infolist(): + filename = info.filename +- if filename.startswith("IMAGES/"): ++ if filename.startswith("IMAGES/") and not filename.endswith("vendor.img"): + continue + + # Skip OTA-specific images (e.g. split super images), which will be +-- +2.34.1 + diff --git a/src/build.sh b/src/build.sh index ce695b38c864877d73b6d27cf2f9d04313df28c8..f200399a62c57af756ab964ccac1fe2a1b599f56 100755 --- a/src/build.sh +++ b/src/build.sh @@ -40,6 +40,50 @@ extract_images() { fi } +clean_up() { + # Remove old zips and logs + if [ "$DELETE_OLD_ZIPS" -gt "0" ]; then + if [ "$ZIP_SUBDIR" = true ]; then + /usr/bin/python /root/clean_up.py -n "$DELETE_OLD_ZIPS" -V "$e_ver" -N 1 "$ZIP_DIR/$zipsubdir" + else + /usr/bin/python /root/clean_up.py -n "$DELETE_OLD_ZIPS" -V "$e_ver" -N 1 -c "${DEVICE}" "$ZIP_DIR" + fi + fi + if [ "$DELETE_OLD_LOGS" -gt "0" ]; then + if [ "$LOGS_SUBDIR" = true ]; then + /usr/bin/python /root/clean_up.py -n "$DELETE_OLD_LOGS" -V "$e_ver" -N 1 "$LOGS_DIR/$logsubdir" + else + /usr/bin/python /root/clean_up.py -n "$DELETE_OLD_LOGS" -V "$e_ver" -N 1 -c "${DEVICE}" "$LOGS_DIR" + fi + fi + if [ -f /root/userscripts/post-build.sh ]; then + echo ">> [$(date)] Running post-build.sh for ${DEVICE}" + /root/userscripts/post-build.sh "${DEVICE}" "$build_successful" + fi + echo ">> [$(date)] Finishing build for ${DEVICE}" + + if [ "$CLEAN_AFTER_BUILD" = true ]; then + echo ">> [$(date)] Cleaning source dir for device ${DEVICE}" + cd "$source_dir" || return 1 + mka clean + fi +} + +exit_script() { + if [ "$DELETE_OLD_LOGS" -gt "0" ]; then + find "$LOGS_DIR" -maxdepth 1 -name "repo-*.log" | sort | head -n -"$DELETE_OLD_LOGS" | xargs -r rm + fi + + if [ -f /root/userscripts/end.sh ]; then + echo ">> [$(date)] Running end.sh" + /root/userscripts/end.sh + fi + + if [ "$build_successful" = false ] || [ "$sync_successful" = false ]; then + exit 1 + fi +} + sync_successful=true use_openjdk_from_ubuntu=false @@ -299,6 +343,14 @@ if [ -n "${BRANCH_NAME}" ] && [ -n "${DEVICE}" ]; then build_success=true fi elif breakfast "${BRUNCH_DEVICE}"; then + # Apply patch for vendor prebuilt devices. + if [ "${DEVICE}" = "one" ] || [ "${DEVICE}" = "two" ]; then + echo ">> [$(date)] Applying patch for prebuilt vendor device" + cd build/make + git am /root/0001-releasetools-support-prebuilt-vendor.img.patch + cd ../../ + fi + mka target-files-package otatools echo ">> [$(date)] Starting signing target-files-package" @@ -336,14 +388,17 @@ if [ -n "${BRANCH_NAME}" ] && [ -n "${DEVICE}" ]; then # Generate OTA zip echo ">> [$(date)] Generating OTA zip from target-files-package" - if [ "${BUILD_ONLY_SYSTEMIMAGE}" != true ]; then - if [ "$SIGN_BUILDS" = true ]; then - SIGN_KEY=(-k "user-keys/releasekey") - fi - ota_from_target_files --backup=true "${SIGN_KEY[@]}" "$OUT/$TARGET_FILES" \ - "$OUT/$E_VERSION" - md5sum $OUT/$E_VERSION >$OUT/$E_VERSION.md5sum - sha256sum $OUT/$E_VERSION >$OUT/$E_VERSION.sha256sum + if [ "$SIGN_BUILDS" = true ]; then + SIGN_KEY=(-k "user-keys/releasekey") + fi + ota_from_target_files --backup=true "${SIGN_KEY[@]}" "$OUT/$TARGET_FILES" \ + "$OUT/$E_VERSION" + md5sum $OUT/$E_VERSION >$OUT/$E_VERSION.md5sum + sha256sum $OUT/$E_VERSION >$OUT/$E_VERSION.sha256sum + + if [ ! -f "$OUT/$E_VERSION" ]; then + clean_up + exit_script fi # Generate fastboot package zip (Doesn't include firmware) @@ -352,6 +407,11 @@ if [ -n "${BRANCH_NAME}" ] && [ -n "${DEVICE}" ]; then echo ">> [$(date)] Generating fastboot zip from target-files-package" img_from_target_files "$OUT/$TARGET_FILES" "$OUT/$FASTBOOT_PACKAGE" + if [ ! -f "$OUT/$FASTBOOT_PACKAGE" ]; then + clean_up + exit_script + fi + IMAGES=("recovery" "boot" "vendor_boot" "dtbo" "vbmeta" "vbmeta_vendor" "vendor_kernel_boot" "super_empty" "system" "odm" "product" "system_ext" "vendor" "vbmeta_system" "super") for i in "${!IMAGES[@]}"; do @@ -433,7 +493,6 @@ if [ -n "${BRANCH_NAME}" ] && [ -n "${DEVICE}" ]; then fi rm -rf $OUT/IMG - build_success=true else echo ">> [$(date)] Unable to find $TARGET_FILES" @@ -617,46 +676,9 @@ if [ -n "${BRANCH_NAME}" ] && [ -n "${DEVICE}" ]; then echo ">> [$(date)] Failed build for ${DEVICE}" fi - # Remove old zips and logs - if [ "$DELETE_OLD_ZIPS" -gt "0" ]; then - if [ "$ZIP_SUBDIR" = true ]; then - /usr/bin/python /root/clean_up.py -n "$DELETE_OLD_ZIPS" -V "$e_ver" -N 1 "$ZIP_DIR/$zipsubdir" - else - /usr/bin/python /root/clean_up.py -n "$DELETE_OLD_ZIPS" -V "$e_ver" -N 1 -c "${DEVICE}" "$ZIP_DIR" - fi - fi - if [ "$DELETE_OLD_LOGS" -gt "0" ]; then - if [ "$LOGS_SUBDIR" = true ]; then - /usr/bin/python /root/clean_up.py -n "$DELETE_OLD_LOGS" -V "$e_ver" -N 1 "$LOGS_DIR/$logsubdir" - else - /usr/bin/python /root/clean_up.py -n "$DELETE_OLD_LOGS" -V "$e_ver" -N 1 -c "${DEVICE}" "$LOGS_DIR" - fi - fi - if [ -f /root/userscripts/post-build.sh ]; then - echo ">> [$(date)] Running post-build.sh for ${DEVICE}" - /root/userscripts/post-build.sh "${DEVICE}" "$build_successful" - fi - echo ">> [$(date)] Finishing build for ${DEVICE}" - - if [ "$CLEAN_AFTER_BUILD" = true ]; then - echo ">> [$(date)] Cleaning source dir for device ${DEVICE}" - cd "$source_dir" || return 1 - mka clean - fi - + clean_up fi fi -if [ "$DELETE_OLD_LOGS" -gt "0" ]; then - find "$LOGS_DIR" -maxdepth 1 -name "repo-*.log" | sort | head -n -"$DELETE_OLD_LOGS" | xargs -r rm -fi - -if [ -f /root/userscripts/end.sh ]; then - echo ">> [$(date)] Running end.sh" - /root/userscripts/end.sh -fi - -if [ "$build_successful" = false ] || [ "$sync_successful" = false ]; then - exit 1 -fi +exit_script