คุณอาจเคยได้ยินเกี่ยวกับ Seamless Updates มาก่อน มันเกี่ยวข้องกับสิ่งที่เรียกว่า "พาร์ติชัน A/B" มันคืออะไรและส่งผลต่อการพัฒนาแบบกำหนดเองบน XDA อย่างไร
เมื่อ Android Nougat เปิดตัว เราก็พูดถึงเรื่องนี้ คุณสมบัติใหม่ทุกประเภท. เราได้รับอินเทอร์เฟซผู้ใช้ที่อัปเดตใหม่สำหรับผู้เริ่มต้น พร้อมด้วยความสามารถหลายหน้าต่างที่รอคอยมานานและการรองรับ Vulkan Graphics API แต่การเพิ่มเติมภายใต้ประทุนอย่างหนึ่งก็บินอยู่เหนือหัวของผู้ใช้ส่วนใหญ่ Android Nougat เปิดตัว "การอัปเดตแบบไร้รอยต่อ" บนอุปกรณ์ที่รองรับพาร์ติชัน A/B อุปกรณ์ Android ที่มีอยู่ส่วนใหญ่ (ยกเว้น Google Pixel และ Google Pixel XL ใหม่) ไม่มีพาร์ติชัน A/B ในขณะนั้น จึงไม่สามารถใช้ประโยชน์จากการอัปเดตที่ราบรื่นได้ หลักฐานพื้นฐานของคุณสมบัตินี้คืออุปกรณ์มีชุดที่สองของระบบ การบูต ผู้จำหน่าย และพาร์ติชันที่สำคัญอื่นๆ และเมื่อคุณได้รับ OTA การอัปเดตจะเกิดขึ้นในพื้นหลังในขณะที่พาร์ติชั่นชุดที่สองได้รับการติดตั้งซึ่งช่วยให้คุณรีบูตเป็นซอฟต์แวร์ที่อัปเดตได้อย่างราบรื่น หากการอัปเดตล้มเหลว คุณจะกลับไปใช้เวอร์ชันที่ใช้งานได้ ซึ่งหมายความว่าบริษัทต่างๆ จะปวดหัวน้อยลงในการจัดการและผู้บริโภคจะได้รับการคุ้มครองที่ดีขึ้น
การรองรับการอัปเดตที่ราบรื่นไม่ใช่ข้อกำหนดสำหรับอุปกรณ์ Android ใหม่ใด ๆ ซึ่งแตกต่างจาก Project Treble ด้วยเหตุนี้ อุปกรณ์ Android ใหม่ส่วนใหญ่จึงไม่รองรับฟีเจอร์นี้ เราได้เก็บรายชื่ออุปกรณ์ที่รองรับทั้งหมดไว้จนถึงตอนนี้และเป็นที่ชัดเจนว่าคุณลักษณะนี้ไม่ได้รับการสนับสนุนอย่างกว้างขวาง น่าเสียดายเพราะพาร์ติชัน A/B ให้ประโยชน์มากมายแก่ทั้งผู้ใช้ทั่วไปและผู้ใช้ระดับสูง อย่างไรก็ตาม คุณลักษณะนี้มีชื่อเสียงที่ไม่ดีนักในชุมชนผู้ที่ชื่นชอบ เนื่องจากถูกมองว่าจะทำให้การพัฒนา Android และการแก้ไขแบบกำหนดเองแบบแฟลชทำได้ยากขึ้น กรณีนี้ไม่ได้เกิดขึ้นจริง ดังนั้นเราจึงต้องการทำความเข้าใจกับการอัปเดตที่ราบรื่น และอธิบายว่าพาร์ติชัน A/B ส่งผลต่อการพัฒนาแบบกำหนดเองบน XDA อย่างไร
ขอบคุณมากสำหรับสมาชิกอาวุโส XDA เอ็นพีจอห์นสัน, ก ผู้ร่วมให้ข้อมูล LineageOS และ ผู้ดูแลของ Motorola Moto Z2 Force ผู้ช่วยเราตรวจสอบบทความนี้
พาร์ติชันบนอุปกรณ์ Android
พาร์ติชันเป็นเพียงส่วนแยกในที่จัดเก็บข้อมูลภายในของโทรศัพท์ที่เก็บข้อมูลไว้ ข้อมูลประเภทใดที่ถูกเก็บไว้ในแต่ละพาร์ติชันจะขึ้นอยู่กับฮาร์ดแวร์ ระบบปฏิบัติการ และปัจจัยอื่นๆ มากมาย bootloader จะมีอันหนึ่ง ระบบ (Android OS) จะมีอันหนึ่ง ข้อมูลผู้ใช้จะมีอันหนึ่ง... และอื่น ๆ และอื่น ๆ. เมื่อคุณเห็นคนพูดถึง "/system" และ "/cache" พวกเขากำลังหมายถึงชื่อที่กำหนดสำหรับพาร์ติชั่นเหล่านั้น ตัวอย่างเช่น OnePlus 6 มี 72 พาร์ติชั่น. ฟังดูเหมือนมาก แต่ OnePlus 6 เป็นหนึ่งในอุปกรณ์ที่รองรับการอัปเดตที่ราบรื่น ซึ่งหมายความว่าพาร์ติชั่นเหล่านี้หลายพาร์ติชั่นจะซ้ำกัน
เอาต์พุตบางส่วนของพาร์ติชันบน OnePlus 6 พาร์ติชัน A/B บางพาร์ติชันถูกขีดเส้นใต้เพื่อวัตถุประสงค์ในการสาธิต
มีพาร์ติชั่นมากมายบนอุปกรณ์ที่คุณไม่ต้องกังวลในฐานะผู้ใช้ พาร์ติชั่นเหล่านี้จำนวนมากไม่เคยได้รับการแก้ไขเมื่อทำการแฟลช ROM, เคอร์เนล, การกู้คืนข้อมูล หรือการดัดแปลง เช่น Magisk หรือ Xposed แบบกำหนดเอง พาร์ติชันเหล่านี้จำนวนมากอาจไม่ได้ใช้ตามวัตถุประสงค์ของเราหรือเป็นอันตรายเกินกว่าจะสัมผัสได้ เว้นแต่คุณจะรู้ว่าคุณกำลังทำอะไรอยู่ (XLOADER และ OEMINFO บน Huawei/Honor อุปกรณ์ต่างๆ อยู่ในใจ) สำหรับผู้ใช้ Android ส่วนใหญ่ พาร์ติชันที่เราจัดการเป็นส่วนใหญ่ ได้แก่ ระบบ การบูต การกู้คืน ข้อมูลผู้ใช้ และผู้จำหน่ายล่าสุดและ วีบีเมตา ต่อไปนี้เป็นคำอธิบายโดยย่อเกี่ยวกับวัตถุประสงค์ของแต่ละพาร์ติชัน:
- ระบบ - เก็บระบบปฏิบัติการ Android, ไลบรารีระบบ, แอประบบ และสื่อระบบอื่นๆ เช่น บูตแอนิเมชัน วอลเปเปอร์สต็อก เสียงเรียกเข้า ฯลฯ
- boot - เก็บเคอร์เนล, ramdisk และบนอุปกรณ์ A/B ด้วยเช่นกัน
- การกู้คืน - เก็บการกู้คืนโดยที่ TWRP มักจะแฟลชบนอุปกรณ์ A-only (อุปกรณ์ A/B ไม่มีพาร์ติชันการกู้คืนเฉพาะ)
- ข้อมูลผู้ใช้ - เก็บข้อมูลแอป ระบบ และที่จัดเก็บข้อมูลภายในทั้งหมดของคุณ
- ผู้ขาย - เก็บแพลตฟอร์มและ HAL เฉพาะอุปกรณ์ซึ่งเป็นไฟล์ที่จำเป็นสำหรับระบบปฏิบัติการ Android เพื่อสื่อสารกับฮาร์ดแวร์พื้นฐาน
- vbmeta - พาร์ติชันสำหรับ Android Verified Boot 2.0 ซึ่งตรวจสอบความสมบูรณ์ของกระบวนการบู๊ต
OEM ของอุปกรณ์สามารถเปลี่ยนแผนพาร์ติชันของตนเพื่อใช้เค้าโครงใดก็ได้ที่พวกเขาต้องการ ตัวอย่างเช่น Huawei แบ่งพาร์ติชันสำหรับบูตออกเป็น ramdisk_recovery และเคอร์เนล นอกจากนี้ยังมีพาร์ติชันพิเศษอีกมากมายที่อาจมีแอประบบอื่นๆ เช่น cust ผลิตภัณฑ์ และ oem และในขณะที่ สิ่งเหล่านี้สามารถแก้ไขได้อย่างปลอดภัย โดยทั่วไปไม่แนะนำหากคุณต้องการให้ตัวเองกลับมาสต็อกได้ง่ายขึ้น พาร์ติชัน A/B มีบทบาทอย่างไร
โครงการพาร์ติชั่น A/B
การอัปเดตทำงานอย่างไรบนอุปกรณ์ที่มีการอัพเดตที่ราบรื่น
รูปภาพง่ายๆ ที่ฉันสร้างไว้ด้านล่างแสดงวิธีจัดการการอัปเดตบนอุปกรณ์ที่รองรับพาร์ติชัน A/B พาร์ติชันที่แสดงให้เห็นคือพาร์ติชันระบบ แม้ว่าพาร์ติชันอื่นๆ เช่น การบูตและผู้จำหน่ายอาจได้รับการอัปเดตด้วยการอัปเดต OTA ที่กำหนดจาก OEM ก็ตาม กระบวนการอัปเดตนี้ไม่เพียงเกิดขึ้นกับการอัปเดตเวอร์ชัน Android ที่สำคัญเท่านั้น แต่ยังรวมถึงการอัปเดตแพตช์ความปลอดภัยด้วย
- เราเริ่มต้นด้วยพาร์ติชันระบบสองพาร์ติชัน system_a และ system_b ทั้งคู่อยู่บน Android เวอร์ชันเดียวกัน
- สมมติว่า system_a ทำงานอยู่ การอัปเดต OTA จะแก้ไข system_b ซึ่งเป็นพาร์ติชันที่ไม่ได้ใช้งานในเบื้องหลัง
- system_a ถูกตั้งค่าเป็น inactive และ system_b จะเริ่มทำงานเมื่อผู้ใช้รีบูต
- พาร์ติชัน system_a ที่ไม่ได้ใช้งานอยู่ในขณะนี้ จะได้รับการอัปเดตเมื่อมีการอัปเดต OTA ครั้งถัดไป
กระบวนการอัพเดตนี้มีประโยชน์อย่างไร?
- หากการอัปเดตล้มเหลว อุปกรณ์จะย้อนกลับไปเป็นบิลด์ที่ใช้งานได้ในช่องอื่น
- ข้อมูลของคุณจะถูกเก็บไว้อย่างสมบูรณ์ แม้ว่าการอัปเดตจะขาดหายไป เนื่องจากมีพาร์ติชั่นเดียวเท่านั้น (ข้อมูลผู้ใช้) ที่เก็บข้อมูลของคุณ
- อัปเดตการสตรีม: หากพาร์ติชันข้อมูลของคุณเต็ม คุณจะสามารถดาวน์โหลดและสตรีมการอัปเดตไปยังช่องที่ไม่ได้ใช้งานได้ มันเป็นคุณสมบัติที่ค่อนข้างเรียบร้อยและหมายความว่าคุณไม่จำเป็นต้องเสียพื้นที่เก็บข้อมูลชั่วคราวในการอัปเดตของคุณ นั่นเป็นเหตุผลว่าทำไมจึงไม่มีพาร์ติชั่นแคชบนอุปกรณ์ A/B เนื่องจากไม่จำเป็นอีกต่อไป
รูปแบบการแบ่งพาร์ติชัน A/B มีผลกระทบต่อพื้นที่จัดเก็บข้อมูลของอุปกรณ์อย่างไร
ความจริงที่ว่าการอัปเดตที่ราบรื่นส่งผลให้มีพาร์ติชั่นที่ซ้ำกันจำนวนมากหมายความว่าคุณจะสูญเสียพื้นที่เก็บข้อมูลจำนวนมากหรือไม่? ไม่เลย. Google กล่าวว่าอุปกรณ์ที่รองรับการอัปเดตอย่างราบรื่นควรจะล่มได้เพียงไม่กี่ร้อยเมกะไบต์เท่านั้น ด้วยการลบพาร์ติชัน /cache และ /recovery ออก การลบทั้งสองอย่างจะสมดุลค่าใช้จ่ายในการเพิ่มพาร์ติชั่นชุดที่สอง จากข้อมูลของ Google อิมเมจระบบ A/B ของ Pixel มีขนาดเพียงครึ่งหนึ่งของอิมเมจระบบ A-only การใช้พื้นที่จัดเก็บเพิ่มเติมส่วนใหญ่มาจากการเพิ่มพาร์ติชันผู้จำหน่ายที่สอง นั่นสมเหตุสมผลแล้วเนื่องจากพาร์ติชันของผู้ขายเป็นที่ตั้งของไบนารีที่เป็นกรรมสิทธิ์ทั้งหมดที่ใช้โดย OEM (ส่วนหนึ่งของ Project Treble) ดังนั้นจึงคาดว่าจะใช้พื้นที่ไม่น้อย แม้ว่า Google จะไม่แนะนำให้มีการแบ่งพาร์ติชัน A/B บนอุปกรณ์ที่มีพื้นที่เก็บข้อมูล 4GB (เนื่องจากเกือบ 10% ของพื้นที่เก็บข้อมูลที่มีอยู่ทั้งหมด) แต่พวกเขาก็แนะนำให้แบ่งพาร์ติชันบนอุปกรณ์ที่มีขนาด 8GB ขึ้นไป
ต่อไปนี้คือรายละเอียดพื้นที่เก็บข้อมูลที่ใช้ใน Google Pixel ที่มีและไม่มีพาร์ติชั่น A/B
ขนาดพาร์ติชัน |
เอ/บี |
เอ-เท่านั้น |
---|---|---|
บูตโหลดเดอร์ |
50MB*2 |
50MB |
บูต |
32MB*2 |
32MB |
การกู้คืน |
32MB |
|
แคช |
100MB |
|
วิทยุ |
70MB*2 |
70MB |
ผู้ขาย |
300MB*2 |
300MB |
ระบบ |
2048MB*2 |
4096MB |
ทั้งหมด |
5,000MB |
4680MB |
เกิดอะไรขึ้นกับพาร์ติชั่นการกู้คืน?
เคอร์เนล Linux ที่ซ่อนอยู่บนอุปกรณ์ Android คือสิ่งที่ทำให้ Android จดจำและใช้ฮาร์ดแวร์ได้อย่างถูกต้องบนสมาร์ทโฟน บนอุปกรณ์ Android แบบ A-only โดยทั่วไปคุณมีเคอร์เนลสองเวอร์ชัน: เวอร์ชันหนึ่งบรรจุอยู่ภายในพาร์ติชันการกู้คืน ในขณะที่อีกเวอร์ชันอยู่ในพาร์ติชันสำหรับเริ่มระบบ บนอุปกรณ์ A/B ที่รองรับการอัปเดตอย่างราบรื่น ขณะนี้การกู้คืนอยู่ภายในอิมเมจสำหรับบูตพร้อมกับเคอร์เนล หน้าที่หลักของการกู้คืนคือการติดตั้งการอัปเดต แต่เนื่องจากระบบจะจัดการเอง (update_engine) ในขณะที่ Android บูทขึ้นมาก็ไม่จำเป็นต้องใช้พาร์ติชั่นการกู้คืนเฉพาะอีกต่อไป
ในการติดตั้งการกู้คืนแบบกำหนดเองบนอุปกรณ์ A/B เราจำเป็นต้องแก้ไขพาร์ติชันสำหรับเริ่มระบบและแทนที่การกู้คืนหุ้นด้วยของเราเอง นี่คือเหตุผลว่าทำไมในการติดตั้ง TWRP คุณต้องใช้คำสั่ง fastboot เพื่อบู๊ตอิมเมจสำหรับบูตแบบกำหนดเองก่อนและ แล้ว แฟลชสคริปต์การติดตั้ง TWRP เนื่องจาก fastboot ไม่สามารถแก้ไขพาร์ติชันได้ - เพียงแฟลชทับพาร์ติชันทั้งหมดเท่านั้น ในทางเทคนิคคุณสามารถแพตช์อิมเมจสำหรับบูตที่มีอยู่ล่วงหน้าด้วย TWRP แล้วจึงแฟลชผ่าน fastboot แต่นั่นเป็นปัญหามากกว่าที่คุ้มค่า สคริปต์ตัวติดตั้ง TWRP จะแก้ไขทั้งพาร์ติชัน boot_a และ boot_b เพื่อติดตั้ง TWRP
เรื่องน่ารู้: Android update_engine ซึ่งจัดการการอัปเดตที่ราบรื่นโดยพื้นฐานแล้วคัดลอกมาจาก Chrome OS โดยตรง เมื่อไม่นานนี้เอง ถูกลบสตริงที่มี "Chrome OS" ออกจากบันทึกของ update_engine เพื่อหลีกเลี่ยงความสับสนสำหรับทุกคนที่บังเอิญตรวจสอบ logcat
สมาร์ทโฟน Android ของฉันรองรับพาร์ติชัน A/B เพื่อการอัปเดตที่ราบรื่นหรือไม่
ในขณะที่เรา เก็บรายชื่ออุปกรณ์ทั้งหมด ที่สนับสนุนมัน คุณสามารถตรวจสอบตัวเองได้อย่างง่ายดาย.
การอัปเดตที่ราบรื่นส่งผลต่อการพัฒนาแบบกำหนดเองอย่างไร
การรับรู้ของผู้ใช้พาร์ติชัน A/B
ถือเป็นอุปสรรคต่อการพัฒนาซอฟต์แวร์ที่กำหนดเองโดยผู้ใช้จำนวนมาก การอัปเดตที่ราบรื่นเป็นประโยชน์ต่อนักพัฒนาจริงๆ เหตุผลที่อุปกรณ์ A/B ถูกมองว่ามีการสนับสนุนการพัฒนาที่ไม่ดีนั้นมาจากราคาของอุปกรณ์ A/B รุ่นแรก ท้ายที่สุดแล้ว อุปกรณ์ Google Pixel เป็นอุปกรณ์กลุ่มแรกๆ ที่รองรับการอัปเดตที่ราบรื่น และเมื่อเปรียบเทียบกับสมาร์ทโฟน Nexus ในอดีตก็มีราคาค่อนข้างแพง นอกจากนี้ ต้องขอบคุณการปรับปรุงมากมายที่ Google ทำกับระบบปฏิบัติการ Android ซึ่งได้สร้าง ROM แบบกำหนดเองและ การปรับเปลี่ยนที่ได้รับความนิยมน้อยกว่าในอุปกรณ์ Google สมาร์ทโฟน Google Pixel ไม่ได้เปิดตัวในฟอรัมของเราเกือบเท่ากับ Nexus สมาร์ทโฟน การรวมกันของปัจจัยภายนอกทำให้การพัฒนาแบบกำหนดเองบนสมาร์ทโฟน Google Pixel ลดลง แม้ว่าผู้ใช้ส่วนใหญ่เลือกที่จะตำหนิการสนับสนุนพาร์ติชัน A/B แทน เปรียบเทียบความพร้อมใช้งานของการพัฒนาแบบกำหนดเองบนอุปกรณ์เช่น Google Pixel กับอุปกรณ์เช่น Xiaomi Mi A1 ในฟอรั่มของเรา.
นอกจากนี้ การขาดความเข้าใจว่าพาร์ติชัน A/B เปลี่ยนวิธีที่ผู้ใช้จำเป็นต้องติดตั้ง ROM เคอร์เนล การกู้คืน และการแก้ไขแบบกำหนดเองได้อย่างไร ทำให้การสนับสนุนพาร์ติชัน A/B ไม่เป็นที่นิยม ขณะนี้การกู้คืนอยู่ภายในอิมเมจสำหรับบูต การแก้ไขแบบแฟลชในลำดับที่ไม่ถูกต้อง เช่น Magisk หรือ Xposed อาจทำให้เกิดข้อขัดแย้งและอาจนำไปสู่การบูตลูปได้ ลำดับที่คุณแฟลชม็อดเหล่านี้มีความสำคัญ แต่ในกรณีของ ROM แบบกำหนดเอง คุณไม่ต้องกังวลว่าคุณกำลังแฟลชช่องใด ตรงกันข้ามกับความเชื่อทั่วไป สคริปต์การติดตั้งสำหรับ ROM แบบกำหนดเองส่วนใหญ่จะไม่กะพริบไปที่ทั้งสองช่อง ส่วนใหญ่คุณไม่จำเป็นต้องกังวลเกี่ยวกับเรื่องนี้ เนื่องจากคุณไม่จำเป็นต้องสลับช่องด้วยตนเอง
นักพัฒนาดูพาร์ติชัน A/B อย่างไร
เมื่อสร้าง ROM นักพัฒนาสามารถใช้ทั้งสองพาร์ติชันเพื่อทดสอบบิลด์แยกกันได้ หากไม่ได้ผล พวกเขาสามารถย้อนกลับไปที่พาร์ติชั่นที่ใช้งานได้และสร้าง ROM ใหม่ นักพัฒนายังสามารถทดสอบการถดถอยได้โดยเพียงแค่ติดตั้งการอัปเดต สลับพาร์ติชันที่ใช้งานอยู่ และเปรียบเทียบทั้งสองโดยไม่ต้องล้างข้อมูล ต่อไปนี้คือวิธีที่ทีม LineageOS มองการรองรับพาร์ติชัน A/B:
"หลายๆ คนในชุมชน Android วิจารณ์ A/B ว่า 'สนับสนุนยาก' และ 'ไม่เป็นมิตรกับนักพัฒนา' ทั้งที่ในความเป็นจริงแล้ว มีการใช้งานอย่างเหมาะสม ง่ายต่อการสนับสนุน และเป็นมิตรกับนักพัฒนา" - jrizzoli บันทึกการเปลี่ยนแปลง LineageOS 19
ปัญหาเบื้องต้นเกี่ยวกับการสนับสนุน A/B สำหรับนักพัฒนามาจากการปรับเปลี่ยนเครื่องมือที่มีอยู่เพื่อรองรับอุปกรณ์เหล่านี้ topjohnwu ผู้พัฒนา Magisk ได้เพิ่มการสนับสนุนอย่างเป็นทางการสำหรับ Google Pixel หนึ่งปีหลังจากนั้น ปล่อยออกมา—ไม่ใช่เพราะมันยาก แต่เป็นเพราะเขาใช้เวลาหนึ่งปีกว่าจะได้อุปกรณ์มาจริงๆ ทำงานต่อไป รองรับ TWRP มาค่อนข้างเร็ว บนอุปกรณ์ A/B หลังจากที่ Dees_Troy ผู้พัฒนาหลักได้ค้นพบช่องโหว่ดังกล่าว Lineage OS 15.1 ตอนนี้รองรับแล้ว อุปกรณ์ A/B หลังจากอาสาสมัครพบเวลาในการแก้ไขสคริปต์ addon.d
วิธีอัปเดตอุปกรณ์ A/B ที่มีการกู้คืนแบบกำหนดเอง เคอร์เนล หรือม็อดอื่นๆ
ROM แบบกำหนดเอง
การอัพเดตแบบกะพริบบนอุปกรณ์ที่มี ROM แบบกำหนดเองหมายความว่าคุณจะต้องระวังว่าช่องใดที่คุณแฟลชอยู่ด้วยใช่ไหม ไม่มาก. TWRP จะจัดการสิ่งต่างๆ มากมายให้กับคุณจริง ๆ และจะมีค่าเริ่มต้นเป็นช่องที่ไม่ได้ใช้งานสำหรับการแฟลช ROM แบบกำหนดเอง หากสล็อตที่ใช้งานอยู่ของคุณคือ A และคุณแฟลช ROM แบบกำหนดเอง แสดงว่าคุณกำลังแฟลชไปที่สล็อต B จริงๆ เมื่อคุณรีบูท สล็อตที่ใช้งานอยู่ตอนนี้จะเป็น B นักพัฒนาสามารถแก้ไขสคริปต์การติดตั้งและแฟลชไปที่ทั้งสองช่องเพื่อให้ผู้ใช้ปลายทางทำได้ง่ายขึ้น แม้ว่าสคริปต์การติดตั้ง ROM แบบกำหนดเองส่วนใหญ่จะแฟลชไปที่ช่องเดียวเท่านั้น สุดท้าย ROM แบบกำหนดเองสามารถใช้ตัวอัปเดต A/B ใน ROM เพื่อให้ผู้ใช้ไม่จำเป็นต้องยุ่งด้วยซ้ำ การอัพเดตแบบแฟลชด้วยตนเอง - LineageOS 15.1 ล่าสุดมีเครื่องมือ Lineage Updater และ XDA Senior Member สหรัฐอเมริกา-เรดดรากอน ทำ ตัวอัปเดต A/B ทั่วไป ที่นักพัฒนารายอื่นสามารถใช้ได้
ROM หุ้น
แต่จะไม่เป็นปัญหาใช่ไหมหากอุปกรณ์ของคุณใช้ ROM หุ้นที่มีการปรับเปลี่ยนต่างๆ และคุณต้องการติดตั้งการอัปเดตโดยไม่สูญเสีย mod เหล่านี้ทั้งหมด อาจเป็นไปได้หากคุณไม่ทราบขั้นตอนที่ถูกต้องในการติดตั้งการอัปเดต ตัวอย่างเช่น ใน OnePlus 6 คุณไม่สามารถแฟลช OTA ส่วนเพิ่มบนอุปกรณ์ที่แก้ไขของคุณได้ เนื่องจาก OTA ส่วนเพิ่มจะพยายามแก้ไขอิมเมจสำหรับบูตที่คุณแก้ไข ดังนั้นคุณอาจจบลงด้วย bootloop และนั่นคือสาเหตุที่คุณต้องแฟลชการอัปเดต ROM แบบเต็มเพื่อเขียนทับอิมเมจสำหรับบูตที่คุณแก้ไขโดยสมบูรณ์ ต่อไปนี้เป็นขั้นตอนทั่วไปที่คุณต้องดำเนินการเพื่อติดตั้งการอัปเดต OxygenOS บน OnePlus 6 ของคุณในขณะที่ยังคงรักษา TWRP, Magisk และเคอร์เนลแบบกำหนดเองไว้
- ดาวน์โหลดล่าสุดแล้ว รอมเต็ม ซิป
- แฟลชไฟล์ ROM ROM แบบเต็มในการกู้คืน
- (ไม่บังคับ) เคอร์เนลแฟลชแบบกำหนดเอง
- ตัวติดตั้ง Flash TWRP
- รีบูตทันทีเพื่อกู้คืน
- แฟลชเมจิก
บนอุปกรณ์ Google Pixel คุณสามารถทำได้ แฟลชอิมเมจจากโรงงานโดยไม่ลบข้อมูลจากนั้นบูต TWRP ติดตั้ง TWRP ผ่านสคริปต์การติดตั้ง จากนั้นติดตั้ง Magisk
การแยกการอัปเดตเพื่อแฟลชอิมเมจพาร์ติชันแต่ละอัน
ไฟล์อัปเดตสำหรับอุปกรณ์ A/B จำนวนมากจะแตกต่างกันเล็กน้อยเมื่อเทียบกับอุปกรณ์ A-only พวกเขาไม่ได้เป็นเพียงไฟล์ zip ที่มีรูปภาพจำนวนมากอีกต่อไป (ยกเว้นรูปภาพจากโรงงานของ Google และ Razer) แต่จะอยู่ในรูปแบบของไฟล์ payload.bin คุณสามารถแยกไฟล์นี้และแฟลชแต่ละส่วนด้วยตนเองได้ แต่ต้องใช้เครื่องมือพิเศษในการทำเช่นนั้น หากคุณสนใจที่จะเรียนรู้วิธีดำเนินการดังกล่าวบน OnePlus 6, Xiaomi Mi A1 และอุปกรณ์ A/B อื่นๆ อีกมากมาย โปรดอ่านต่อ
การตั้งค่าเพื่อแยก payload.bin
- ตรวจสอบให้แน่ใจว่าคุณมี Python 3.6 ติดตั้งแล้ว.
- ดาวน์โหลด payload_dumper.py และ update_metadata_pb2.py ที่นี่.
- แตกไฟล์ OTA ของคุณและวาง payload.bin ในโฟลเดอร์เดียวกับไฟล์เหล่านี้
- เปิด PowerShell, Command Prompt หรือ Terminal ขึ้นอยู่กับระบบปฏิบัติการของคุณ
- ป้อนคำสั่งต่อไปนี้:
python -m pip install protobuf
- เมื่อเสร็จแล้วให้ป้อนคำสั่งนี้:
python payload_dumper.py payload.bin
- การดำเนินการนี้จะเริ่มแยกรูปภาพภายในไฟล์ payload.bin ไปยังโฟลเดอร์ปัจจุบันที่คุณอยู่
คุณสามารถแฟลชแต่ละภาพแยกกันตอนนี้ผ่าน fastboot ได้หากต้องการ ส่วนถัดไปจะแสดงวิธีการทำเช่นนั้น
การใช้ fastboot เพื่อแฟลชภาพบนอุปกรณ์ที่รองรับการอัปเดตอย่างราบรื่น
มีคำสั่งจำนวนหนึ่งที่เป็นเอกสิทธิ์เฉพาะสำหรับอุปกรณ์ระบบพาร์ติชัน A/B คุณสามารถเปลี่ยนช่องที่ใช้งานอยู่และแฟลชไปยังช่องเฉพาะได้ หากคุณมีโครงการ Treble-อุปกรณ์ที่รองรับ และต้องการเรียนรู้วิธีการ แฟลชรูปภาพระบบทั่วไปคุณควรจะคุ้นเคยกับคำสั่งเหล่านี้ ลองดูตารางด้านล่าง
คำสั่ง Fastboot |
สั่งการ |
---|---|
รับช่องที่ใช้งานอยู่ในปัจจุบัน |
fastboot getvar ทั้งหมด | grep "current-slot"หากคุณใช้ Windows PC คำสั่ง "grep" จะไม่ทำงาน |
ตั้งค่าช่องอื่นเป็นใช้งานอยู่ |
fastboot set_active อื่น ๆ |
ตั้งค่าช่องที่ระบุเป็นใช้งานอยู่ |
fastboot set_active $ORfastboot --set-active=_$slot โดยที่ $ เป็น a หรือ b |
แฟลชอิมเมจไปยังพาร์ติชันที่ระบุในช่องปัจจุบัน |
พาร์ติชันแฟลช fastboot partition.img |
แฟลชอิมเมจไปยังพาร์ติชันที่ระบุในช่องที่ระบุ |
fastboot แฟลช partition_a partition.imgfastboot แฟลช partition_b partition.img |
(หมายเหตุ: บนอุปกรณ์ A/B คุณสามารถระบุพาร์ติชั่นในช่องใดช่องหนึ่งที่จะกะพริบ หรือคุณสามารถละส่วนต่อท้ายช่องออกได้ แล้วพาร์ติชั่นจะกะพริบไปที่ช่องที่ใช้งานอยู่ในปัจจุบัน ตัวอย่างเช่น คุณสามารถแทนที่ "partition" ในคำสั่ง flash ด้วย "system", "system_a" หรือ "system_b")
คำเกี่ยวกับ Project Treble และการอัปเดตที่ราบรื่น
ความเข้าใจผิดที่พบบ่อยคือการสนับสนุน Project Treble และการสนับสนุนพาร์ติชัน A/B มีความเกี่ยวข้องกัน แต่จริงๆ แล้วไม่ได้เป็นเช่นนั้น การมีอย่างใดอย่างหนึ่งไม่ได้หมายความถึงอีกสิ่งหนึ่ง Motorola Moto Z2 Force ใช้รูปแบบการแบ่งพาร์ติชัน A/B แต่ไม่รองรับเสียงแหลม ในทางกลับกัน Honor 9 Lite รองรับ Project Treble แต่เป็นอุปกรณ์ A-only
คำถามที่พบบ่อย/สรุป
-
การแบ่งพาร์ติชัน A/B มีประโยชน์อย่างไร
- การแบ่งพาร์ติชัน A/B ช่วยให้คุณสามารถอัปเดตสมาร์ทโฟน Android ของคุณในขณะที่ใช้งาน เพียงแค่รีบูตเมื่อคุณพร้อมที่จะบูตเป็นเวอร์ชันใหม่ นอกจากนี้ยังทำหน้าที่ป้องกันอิฐ หากการอัปเดตผิดพลาด คุณจะกลับไปติดตั้งที่ใช้งานได้
-
การแบ่งพาร์ติชัน A/B เป็นอุปสรรคต่อการพัฒนาหรือไม่
- แม้ว่านักพัฒนาจะใช้เวลาเล็กน้อยในการปรับตัว แต่คำตอบก็คือไม่ ในความเป็นจริง สามารถช่วยนักพัฒนาได้เนื่องจากพวกเขาสามารถบูต ROM แบบกำหนดเองของตนคู่กับเวอร์ชันเก่าและเวอร์ชันทดสอบใหม่เพื่อตรวจสอบการถดถอย
-
พาร์ติชั่น A/B ส่งผลต่อม็อด เช่น เคอร์เนลแบบกำหนดเอง, Magisk หรือ Xposed อย่างไร
- คุณต้องระมัดระวังในการติดตั้ง แต่ขณะนี้ไม่มีปัญหาใดๆ Magisk รองรับอุปกรณ์อย่างเป็นทางการพร้อมการอัปเดตที่ราบรื่น และตราบใดที่คุณแฟลชสิ่งต่าง ๆ ตามลำดับที่ถูกต้อง คุณก็ไม่น่าจะมีปัญหาใด ๆ ตรวจสอบให้แน่ใจว่าได้แฟลชเคอร์เนลที่กำหนดเองก่อนที่จะทำการแฟลช mod อื่น ๆ ของคุณและคุณควรจะพร้อม
-
ฉันสามารถแฟลช ROM สองตัวที่แตกต่างกันในแต่ละพาร์ติชันและบูตคู่ได้หรือไม่
- ตามทฤษฎีแล้วใช่ ปัญหาเกิดขึ้นเนื่องจากพาร์ติชันข้อมูลที่ใช้ร่วมกัน จึงไม่แนะนำ
-
การมีรูปแบบพาร์ติชัน A/B หมายความว่าฉันมีพื้นที่จัดเก็บลดลงหรือไม่
- ไม่! Google กล่าวว่าอุปกรณ์ที่รองรับการอัปเดตอย่างราบรื่นจะต้องเสียสละพื้นที่เก็บข้อมูลเพียงไม่กี่ร้อยเมกะไบต์เพื่อรองรับ ผลประโยชน์มีมากกว่าต้นทุนนั้น
-
อุปกรณ์ของฉันรองรับพาร์ติชัน A/B นั่นหมายความว่าฉันสามารถใช้ประโยชน์จาก Project Treble Generic System Image ได้หรือไม่
- ไม่จำเป็น. การสนับสนุน Project Treble และ A/B ไม่เกี่ยวข้องกัน Motorola Moto Z2 Force ไม่รองรับ Project Treble แต่รองรับรูปแบบพาร์ติชัน A/B
-
อุปกรณ์ของฉันรองรับ Project Treble นั่นหมายความว่าฉันมีรูปแบบพาร์ติชัน A/B หรือไม่
- นี่ไม่ใช่กรณีเสมอไป Honor 9 Lite เป็นตัวอย่างที่สำคัญเนื่องจากรองรับ Project Treble แต่ไม่มีโครงร่างพาร์ติชัน A/B
-
เหตุใดฉันจึงต้องบูต TWRP ด้วย fastboot ก่อนแล้วจึงแฟลช
- นี่เป็นเพราะวิธีการทำงานของ fastboot และความจริงที่ว่าพาร์ติชันการกู้คืนไม่มีอยู่อีกต่อไป การกู้คืนถูกวางไว้ภายในพาร์ติชันสำหรับเริ่มระบบ ดังนั้นเราจึงต้องแก้ไขทั้ง boot_a และ boot_b คุณไม่สามารถแก้ไขพาร์ติชันใน fastboot ได้ แต่จะแฟลชทับพาร์ติชันนั้นเท่านั้น ตามทฤษฎีคุณสามารถสร้างอิมเมจสำหรับบูตที่เตรียมไว้ล่วงหน้าแล้วจึงแฟลชแทน
-
มีอันตรายกับพาร์ติชัน A/B หรือไม่? การป้องกันการย้อนกลับส่งผลต่อสิ่งต่าง ๆ อย่างไร?
- Google พยายามอย่างเต็มที่เพื่อทำให้ปัญหานี้ไม่เป็นปัญหา แต่ในกรณีของ Motorola Moto Z2 บังคับ มีหลายกรณีที่อุปกรณ์เปิดใช้งานสล็อตเก่าอีกครั้งหลังจากอัปเกรดเป็น Android โอรีโอ ซึ่งหมายความว่าการป้องกันการย้อนกลับเริ่มต้นขึ้น และเจ้าของอุปกรณ์สามารถช่วยเหลือสมาร์ทโฟนของตนได้ด้วยการกู้คืน EDL เท่านั้น Google กล่าวว่าการป้องกันการย้อนกลับจะเกิดขึ้นหลังจากการบูตครั้งแรกเท่านั้น ดังนั้นสล็อตจะต้องทำงานได้อย่างสมบูรณ์หลังจากการอัปเดตก่อนที่คุณจะไม่สามารถดาวน์เกรดได้อีกต่อไป