คุณใช้เครื่องมือ ota_from_target_files
ที่ระบุไว้ใน build/make/tools/releasetools
เพื่อสร้างแพ็กเกจ OTA แบบเต็มและแบบเพิ่ม
สำหรับอุปกรณ์ที่ใช้การอัปเดตระบบ A/B หรือการอัปเดตระบบที่ไม่ใช่ A/B ได้ เครื่องมือนี้ใช้ไฟล์
target-files.zip
ที่ระบบบิลด์ของ Android สร้างขึ้นเป็นอินพุต
สำหรับอุปกรณ์ที่ใช้ Android 11 ขึ้นไป คุณสามารถสร้าง แพ็กเกจ OTA 1 รายการสำหรับอุปกรณ์หลายเครื่องที่มี SKU ต่างกัน การดำเนินการนี้ต้องมีการกำหนดค่าอุปกรณ์เป้าหมายให้ใช้ฟิงเกอร์ปรินต์แบบไดนามิก และอัปเดตข้อมูลเมตา OTA เพื่อรวมชื่อและฟิงเกอร์ปรินต์ของอุปกรณ์ไว้ในรายการเงื่อนไขก่อนและหลัง
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
เป็นไบนารี 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
จากบิลด์ก่อนหน้า (บิลด์ที่คุณต้องการอัปเดตจาก) รวมถึงไฟล์ 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
(ทั้ง 2 รายการสร้างด้วย make dist
เพื่อแฟลชด้วย fastboot update
) แทน
รายการที่อยู่ในไดเรกทอรี PRODUCT_OUT
(สร้างด้วย make
ซึ่งจะ
แฟลชด้วย fastboot flashall
) การพยายามติดตั้งแพ็กเกจที่เพิ่มขึ้น
ในอุปกรณ์ที่มีบิลด์อื่นๆ จะทำให้เกิดข้อผิดพลาดในการติดตั้ง เมื่อ
การติดตั้งล้มเหลว อุปกรณ์จะยังคงอยู่ในสถานะการทำงานเดิม (ใช้
ระบบเก่า) แพ็กเกจจะตรวจสอบสถานะก่อนหน้าของไฟล์ทั้งหมดที่อัปเดต
ก่อนที่จะแตะไฟล์เหล่านั้น ดังนั้นอุปกรณ์จึงไม่ติดอยู่ในสถานะที่อัปเกรดไม่เสร็จ
เพื่อประสบการณ์การใช้งานที่ดีที่สุด โปรดเสนอการอัปเดตแบบเต็มทุกๆ 3-4 การอัปเดตแบบเพิ่ม ซึ่งจะช่วยให้ผู้ใช้ได้รับเวอร์ชันล่าสุดและหลีกเลี่ยงการติดตั้งอัปเดตแบบเพิ่มทีละรายการเป็นเวลานาน
สร้างแพ็กเกจ OTA สำหรับ SKU หลายรายการ
Android 11 ขึ้นไปรองรับการใช้แพ็กเกจ OTA เดียวสำหรับอุปกรณ์หลายเครื่องที่มี SKU ต่างกัน การดำเนินการดังกล่าวต้องกำหนดค่า อุปกรณ์เป้าหมายให้ใช้ฟิงเกอร์ปรินต์แบบไดนามิกและอัปเดตข้อมูลเมตา OTA (โดยใช้เครื่องมือ OTA) เพื่อรวมชื่ออุปกรณ์และฟิงเกอร์ปรินต์ในรายการเงื่อนไขก่อนและหลัง
เกี่ยวกับ SKU
รูปแบบของ SKU คือรูปแบบที่แตกต่างกันของค่าพารามิเตอร์
build ที่รวมกัน และโดยปกติจะเป็นชุดย่อยที่ไม่ได้ประกาศของพารามิเตอร์ 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
) ได้
ใช้ลายนิ้วมือแบบไดนามิก
ลายนิ้วมือคือการต่อกันของพารามิเตอร์บิลด์ที่กำหนดไว้ เช่น
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
) ที่อธิบายแพ็กเกจ รวมถึงข้อกำหนดเบื้องต้นและข้อกำหนดภายหลังของแพ็กเกจ 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.*
ไฟล์คาดว่าจะมีพร็อพเพอร์ตี้ 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 ขั้นสุดท้ายได้