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

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

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

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

สร้างการอัปเดตเต็มรูปแบบ

การปรับปรุงเต็มรูปแบบเป็นแพคเกจที่มี OTA รัฐสุดท้ายทั้งหมดของอุปกรณ์ (ระบบพาร์ทิชันบูตและการกู้คืน) ตราบใดที่อุปกรณ์สามารถรับและใช้แพ็คเกจได้ แพ็คเกจก็สามารถติดตั้งบิลด์ได้โดยไม่คำนึงถึงสถานะปัจจุบันของอุปกรณ์ ยกตัวอย่างเช่นคำสั่งต่อไปใช้เครื่องมือปล่อยเพื่อสร้าง 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 เป็นไบนารีหลามและเรียกว่าการสร้างทั้งแพคเกจเต็มรูปแบบหรือเพิ่มขึ้น

ota_from_target_files dist_output/tardis-target_files.zip ota_update.zip

ota_from_target_files เส้นทางตั้งขึ้นใน $PATH และไบนารีหลามที่เกิดตั้งอยู่ใน out/ ไดเรกทอรี

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

การสร้างการปรับปรุงที่เพิ่มขึ้น

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

คุณสามารถติดตั้งแพ็คเกจการอัพเดทส่วนเพิ่มได้เฉพาะบนอุปกรณ์ที่มีบิลด์ต้นทางที่ใช้ในการสร้างแพ็คเกจเท่านั้น เพื่อสร้างการปรับปรุงเพิ่มขึ้นคุณต้อง target_files.zip ไฟล์จากก่อนสร้าง (คนที่คุณต้องการที่จะปรับปรุงจาก) เช่นเดียวกับ 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 ล้านบาทแทนที่จะเป็น 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

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

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

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

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

ลายนิ้วมือเป็น concatenation กำหนด สร้างพารามิเตอร์ เช่น 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 ค่าขึ้นอยู่กับมูลค่าของ ro.boot.product.hardware.sku คุณสมบัติ bootloader (ซึ่งก็คืออ่านอย่างเดียว)

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

แพคเกจ OTA มีไฟล์ข้อมูลเมตา ( META-INF/com/android/metadata ) ที่อธิบายถึงแพคเกจรวมทั้งเงื่อนไขและ postcondition ของแพคเกจ 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 หรือสูงกว่าคุณสามารถใช้ --boot_variable_file ธงในเครื่องมือ OTA เพื่อระบุเส้นทางไปยังไฟล์ที่มีค่าของตัวแปรรันไทม์ใช้ในการสร้างลายนิ้วมือแบบไดนามิกของอุปกรณ์ที่ ข้อมูลจะถูกนำมาใช้ในการปรับปรุงข้อมูลเมตา OTA จะรวมชื่ออุปกรณ์และลายนิ้วมือใน pre- และ post- สภาพ (ใช้ตัวอักษรท่อ | เป็นตัวคั่น) --boot_variable_file ธงมีรูปแบบและรายละเอียดดังต่อไปนี้

  • ไวยากรณ์: --boot_variable_file <path>
  • คำอธิบาย: ระบุเส้นทางไปยังไฟล์ที่มีค่าที่เป็นไปได้ของที่ ro.boot.* คุณสมบัติ ใช้ในการคำนวณลายนิ้วมือรันไทม์ที่เป็นไปได้เมื่อบาง ro.product.* คุณสมบัติจะถูกแทนที่โดยคำสั่งนำเข้า ไฟล์ที่คาดว่าเป็นหนึ่งในสถานที่ให้บริการที่ต่อบรรทัดแต่ละบรรทัดมีรูปแบบต่อไปนี้: 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 สุดท้าย