สร้างแพ็กเกจ OTA

คุณสามารถใช้เครื่องมือ ota_from_target_files ที่ให้มากับ build/make/tools/releasetools เพื่อสร้างแพ็กเกจ OTA แบบสมบูรณ์และแบบเพิ่มสำหรับอุปกรณ์ที่ใช้การอัปเดตระบบ A/B หรือการอัปเดตระบบที่ไม่ใช่ A/B เครื่องมือจะใช้ไฟล์ target-files.zip ที่ระบบบิลด์ Android สร้างขึ้นเป็นอินพุต

สำหรับอุปกรณ์ที่ใช้ Android 11 ขึ้นไป คุณจะสร้างแพ็กเกจ OTA รายการเดียวสำหรับอุปกรณ์หลายเครื่องที่มี SKU ต่างกันได้ ซึ่งจะต้องกำหนดค่าอุปกรณ์เป้าหมายให้ใช้ลายนิ้วมือแบบไดนามิก และอัปเดตข้อมูลเมตา OTA ให้รวมชื่อและลายนิ้วมือของอุปกรณ์ไว้ในรายการเงื่อนไขก่อนและหลัง

แพ็กเกจ OTA ที่อิงตามไฟล์ของ Android 8.0 ที่เลิกใช้งานสำหรับอุปกรณ์ที่ไม่ใช่ A/B ซึ่งต้อง ให้ใช้แพ็กเกจ OTA แบบบล็อกแทน หากต้องการสร้างแพ็กเกจ OTA ตามบล็อกหรืออุปกรณ์ที่ใช้ Android 7.x หรือต่ำกว่า ให้ส่งตัวเลือก --block ไปยังพารามิเตอร์ ota_from_target_files

อัปเดตบิลด์ทั้งหมด

การอัปเดตแบบสมบูรณ์คือแพ็กเกจ OTA ที่มีสถานะสุดท้ายทั้งหมดของอุปกรณ์ (พาร์ติชันระบบ พาร์ติชันการบูต และแอปการกู้คืน) ตราบใดที่อุปกรณ์สามารถรับและใช้แพ็กเกจได้ แพ็กเกจจะติดตั้งบิลด์ได้ ไม่ว่าสถานะปัจจุบันของอุปกรณ์จะเป็นอย่างไรก็ตาม ตัวอย่างเช่น URL ต่อไปนี้ จะใช้เครื่องมือเผยแพร่เพื่อสร้างที่เก็บถาวร target-files.zip สำหรับ อุปกรณ์ tardis เครื่อง

. build/envsetup.sh && lunch tardis-eng
mkdir dist_output
make dist DIST_DIR=dist_output

make dist จะสร้างแพ็กเกจ OTA เต็มรูปแบบ (ใน $OUT) ไฟล์ผลลัพธ์ .zip มีทุกอย่างที่จำเป็นในการสร้างแพ็กเกจ OTA สำหรับอุปกรณ์ tardis นอกจากนี้ คุณยังสร้าง ota_from_target_files เป็นไบนารี Python และเรียกใช้เพื่อสร้างแพ็กเกจแบบสมบูรณ์หรือแบบเพิ่มก็ได้

ota_from_target_files dist_output/tardis-target_files.zip ota_update.zip

เส้นทาง ota_from_target_files ได้รับการตั้งค่าใน $PATH และ Python ผลลัพธ์ ไบนารีอยู่ในไดเรกทอรี out/

พร้อมส่ง ota_update.zip ไปยังอุปกรณ์ทดสอบแล้ว (ทุกอย่างที่มีการรับรอง ด้วยคีย์ทดสอบ) สำหรับอุปกรณ์ของผู้ใช้ ให้สร้างและใช้คีย์ส่วนตัวของคุณเองเป็น ตามรายละเอียดในการเซ็นชื่อบิลด์สำหรับการเปิดตัว

สร้างการอัปเดตเพิ่มเติม

การอัปเดตแบบเพิ่มคือแพ็กเกจ OTA ที่มีแพตช์ไบนารีสำหรับข้อมูลที่อยู่ในอุปกรณ์อยู่แล้ว แพ็กเกจที่มีการอัปเดตทีละน้อยมักมีขนาดเล็กกว่า เนื่องจากไม่จำเป็นต้องมีไฟล์ที่ไม่มีการเปลี่ยนแปลง นอกจากนี้ เนื่องจากไฟล์ที่มีการเปลี่ยนแปลงมักจะคล้ายกับเวอร์ชันก่อนหน้ามาก แพ็กเกจจึงต้องมีเพียงการเข้ารหัสความแตกต่างระหว่างไฟล์ 2 ไฟล์เท่านั้น

คุณจะติดตั้งแพ็กเกจการอัปเดตเพิ่มเติมได้เฉพาะในอุปกรณ์ที่มี บิลด์ต้นทางที่ใช้ในการสร้างแพ็กเกจ หากต้องการสร้างการอัปเดตเพิ่ม คุณต้องมีไฟล์ target_files.zip จากบิลด์ก่อนหน้า (รายการที่คุณต้องการ เพื่ออัปเดต from) และไฟล์ target_files.zip จากบิลด์ใหม่ ตัวอย่างเช่น คำสั่งต่อไปนี้ใช้เครื่องมือรุ่นเพื่อสร้างการอัปเดตแบบเพิ่มสำหรับอุปกรณ์ tardis

ota_from_target_files -i PREVIOUS-tardis-target_files.zip dist_output/tardis-target_files.zip incremental_ota_update.zip

บิลด์นี้คล้ายกับบิลด์ก่อนหน้ามาก และแพ็กเกจการอัปเดตแบบเพิ่ม (incremental_ota_update.zip) มีขนาดน้อยกว่าการอัปเดตแบบเต็มที่เกี่ยวข้องมาก (ประมาณ 1 MB แทนที่จะเป็น 60 MB)

เผยแพร่แพ็กเกจที่เพิ่มไปยังอุปกรณ์ที่ใช้บิลด์ก่อนหน้าเดียวกันทุกประการซึ่งใช้เป็นจุดเริ่มต้นของแพ็กเกจที่เพิ่ม คุณต้องแฟลช รูปภาพใน PREVIOUS-tardis-target_files.zip หรือ PREVIOUS-tardis-img.zip (ทั้งคู่สร้างด้วย make dist ที่จะกะพริบด้วย fastboot update) แทนที่จะเป็น ที่อยู่ในไดเรกทอรี PRODUCT_OUT (สร้างด้วย make ซึ่งจะ กะพริบด้วย fastboot flashall) กำลังพยายามติดตั้งแพ็กเกจที่เพิ่มขึ้น ในอุปกรณ์ที่มีบิลด์อื่นๆ ส่งผลให้เกิดข้อผิดพลาดในการติดตั้ง เมื่อติดตั้งไม่สำเร็จ อุปกรณ์จะยังคงทำงานในสถานะเดิม (ใช้ระบบเดิม) แพ็กเกจจะยืนยันสถานะก่อนหน้าของไฟล์ทั้งหมดที่จะอัปเดตก่อนที่จะดำเนินการกับไฟล์เหล่านั้น เพื่อให้อุปกรณ์ไม่อยู่ในสถานะอัปเกรดไม่เสร็จ

เสนอการอัปเดตแบบเต็มทุกๆ 3-4 รายการเพื่อให้ผู้ใช้ได้รับประสบการณ์ที่ดีที่สุด อัปเดต ซึ่งจะช่วยให้ผู้ใช้ใช้รุ่นล่าสุดได้ทันและหลีกเลี่ยงการติดตั้งการอัปเดตแบบทีละรายการที่ใช้เวลานาน

สร้างแพ็กเกจ OTA สำหรับ SKU หลายรายการ

Android 11 ขึ้นไปรองรับการใช้แพ็กเกจ OTA เดียวสำหรับอุปกรณ์หลายเครื่องที่มี SKU ต่างกัน ซึ่งต้องมีการกำหนดค่าอุปกรณ์เป้าหมายให้ใช้ลายนิ้วมือแบบไดนามิกและอัปเดตข้อมูลเมตา OTA (โดยใช้เครื่องมือ OTA) เพื่อรวมชื่ออุปกรณ์และลายนิ้วมือไว้ในรายการเงื่อนไขก่อนและหลัง

เกี่ยวกับ SKU

รูปแบบของ SKU คือรูปแบบหนึ่งของค่าพารามิเตอร์การสร้างที่รวมกัน และมักจะเป็นชุดย่อยที่ยังไม่ได้ประกาศของพารามิเตอร์ build_fingerprint ปัจจุบัน OEM ใช้พารามิเตอร์บิลด์ที่ CDD อนุมัติร่วมกับ SKU ได้ในขณะที่ โดยใช้รูปภาพเดียวสำหรับ SKU เหล่านั้น ตัวอย่างเช่น SKU ต่อไปนี้มีผลิตภัณฑ์ย่อยหลายรายการ

SKU = <product><device><modifierA><modifierB><modifierC>
  • modifierA คือระดับอุปกรณ์ (เช่น Pro, Premium หรือ Plus)
  • modifierB คือรูปแบบของฮาร์ดแวร์ (เช่น วิทยุ)
  • modifierC คือภูมิภาค ซึ่งอาจเป็นภูมิภาคทั่วไป (เช่น NA, EMEA หรือ CHN) หรือเฉพาะประเทศหรือภาษา (เช่น JPN, ENG หรือ CHN)

OEM จำนวนมากใช้รูปภาพเดียวสำหรับ SKU หลายรายการ แล้วสร้างผลิตภัณฑ์ขั้นสุดท้าย ชื่อและลายนิ้วมือของอุปกรณ์ในระหว่างรันไทม์หลังจากอุปกรณ์เปิดเครื่อง กระบวนการนี้ ลดความซับซ้อนของกระบวนการพัฒนาแพลตฟอร์ม ซึ่งช่วยให้อุปกรณ์ที่มีผู้เยาว์ การกำหนดค่าเองแต่ใช้ชื่อผลิตภัณฑ์ต่างกันเพื่อแชร์รูปภาพทั่วไป (เช่น tardis และ tardispro)

ใช้ลายนิ้วมือแบบไดนามิก

ลายนิ้วมือเป็นการเชื่อม build พารามิเตอร์ เช่น ro.product.brand, ro.product.name และ ro.product.device ลายนิ้วมือของอุปกรณ์มาจากลายนิ้วมือของพาร์ติชันระบบและใช้เป็นตัวระบุที่ไม่ซ้ำกันของรูปภาพ (และไบต์) ที่ทำงานในอุปกรณ์ หากต้องการสร้างลายนิ้วมือแบบไดนามิก ให้ใช้ตรรกะแบบไดนามิกในไฟล์ build.prop ของอุปกรณ์เพื่อรับค่าของตัวแปร Bootloader ในเวลาที่อุปกรณ์บูต จากนั้นใช้ข้อมูลดังกล่าวเพื่อสร้างลายนิ้วมือแบบไดนามิกสําหรับอุปกรณ์นั้น

ตัวอย่างเช่น หากต้องการใช้ลายนิ้วมือแบบไดนามิกสำหรับอุปกรณ์ tardis และ tardispro ให้อัปเดตไฟล์ต่อไปนี้ตามที่แสดงด้านล่าง

  • อัปเดตไฟล์ odm/etc/build_std.prop ให้มีบรรทัดต่อไปนี้

    ro.odm.product.device=tardis
    
  • อัปเดตไฟล์ odm/etc/build_pro.prop ให้มีบรรทัดต่อไปนี้

    ro.odm.product.device=tardispro
    
  • อัปเดตไฟล์ odm/etc/build.prop ให้มีบรรทัดต่อไปนี้

    ro.odm.product.device=tardis
    import /odm/etc/build_${ro.boot.product.hardware.sku}.prop
    

บรรทัดเหล่านี้จะตั้งค่าชื่ออุปกรณ์ ลายนิ้วมือ และค่า ro.build.fingerprint แบบไดนามิกตามค่าของพร็อพเพอร์ตี้ bootloader ro.boot.product.hardware.sku (ซึ่งเป็นแบบอ่านอย่างเดียว)

อัปเดตข้อมูลเมตาของแพ็กเกจ OTA

แพ็กเกจ OTA มีไฟล์ข้อมูลเมตา (META-INF/com/android/metadata) ที่ อธิบายแพ็กเกจ รวมถึงเงื่อนไขล่วงหน้าและเงื่อนไขหลังการใช้งานของ OTA ใหม่ ตัวอย่างเช่น โค้ดต่อไปนี้คือไฟล์ข้อมูลเมตาสำหรับแพ็กเกจ OTA กำหนดเป้าหมายไปยังอุปกรณ์ tardis

post-build=google/tardis/tardis:11/RP1A.200521.001/6516341:userdebug/dev-keys
post-build-incremental=6516341
post-sdk-level=30
post-security-patch-level=2020-07-05
post-timestamp=1590026334
pre-build=google/tardis/tardis:11/RP1A.200519.002.A1/6515794:userdebug/dev-keys
pre-build-incremental=6515794
pre-device=tardis

ค่า pre-device, pre-build-incremental และ pre-build กำหนดค่า ที่อุปกรณ์ต้องมีก่อนที่จะติดตั้งแพ็กเกจ OTA ได้ ค่า post-build-incremental และ post-build กำหนดสถานะของอุปกรณ์ ที่มักมีหลังจากติดตั้งแพ็กเกจ OTA ค่าของช่อง pre- และ post- มาจากพร็อพเพอร์ตี้การสร้างที่เกี่ยวข้องต่อไปนี้

  • ค่า pre-device มาจากพร็อพเพอร์ตี้การสร้าง ro.product.device
  • ค่า pre-build-incremental และ post-build-incremental มาจากพร็อพเพอร์ตี้บิลด์ ro.build.version.incremental
  • ค่า pre-build และ post-build ได้มาจาก พร็อพเพอร์ตี้ของบิลด์ ro.build.fingerprint

ในอุปกรณ์ที่ใช้ Android 11 ขึ้นไป คุณสามารถใช้ Flag --boot_variable_file ในเครื่องมือ OTA เพื่อระบุเส้นทางไปยังไฟล์ที่มีค่าของตัวแปรรันไทม์ที่ใช้ในการสร้างลายนิ้วมือแบบไดนามิกของอุปกรณ์ จากนั้นระบบจะใช้ข้อมูลดังกล่าวเพื่ออัปเดตข้อมูลเมตา OTA ให้รวมชื่อและลายนิ้วมือของอุปกรณ์ไว้ในเงื่อนไข pre- และ post- (โดยใช้อักขระเครื่องหมายทับ | เป็นตัวคั่น) แฟล็ก --boot_variable_file มี ไวยากรณ์และคำอธิบายต่อไปนี้

  • ไวยากรณ์: --boot_variable_file <path>
  • คำอธิบาย: ระบุเส้นทางไปยังไฟล์ที่มีค่าที่เป็นไปได้ พร็อพเพอร์ตี้ ro.boot.* รายการ ใช้สำหรับคํานวณลายนิ้วมือรันไทม์ที่เป็นไปได้เมื่อคำสั่งนําเข้าลบล้างพร็อพเพอร์ตี้ ro.product.* บางรายการ ไฟล์ต้องการพร็อพเพอร์ตี้ 1 รายการต่อบรรทัด โดยแต่ละบรรทัดจะมีข้อมูลต่อไปนี้ รูปแบบ: prop_name=value1,value2

ตัวอย่างเช่น เมื่อพร็อพเพอร์ตี้คือ ro.boot.product.hardware.sku=std,pro ข้อมูลเมตา OTA สำหรับอุปกรณ์ tardis และ tardispro จะแสดงดังต่อไปนี้

post-build=google/tardis/tardis:11/<suffix>|google/tardis/tardispro:11/<suffix>
pre-build=google/tardis/tardis:11/<suffix>|google/tardis/tardispro:11/<suffix>
pre-device=tardis|tardispro

หากต้องการรองรับฟังก์ชันนี้ในอุปกรณ์ที่ใช้ Android 10 โปรดดูการใช้งานอ้างอิง รายการการเปลี่ยนแปลงนี้จะแยกวิเคราะห์คำสั่ง import ในไฟล์ build.prop แบบมีเงื่อนไข ซึ่งช่วยให้ระบบจดจำการลบล้างพร็อพเพอร์ตี้และแสดงในข้อมูลเมตา OTA สุดท้าย