พาร์ติชัน A/B และการอัปเดตที่ราบรื่นส่งผลต่อการพัฒนาแบบกำหนดเองบน XDA อย่างไร

คุณอาจเคยได้ยินเกี่ยวกับ 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 ที่สำคัญเท่านั้น แต่ยังรวมถึงการอัปเดตแพตช์ความปลอดภัยด้วย

  1. เราเริ่มต้นด้วยพาร์ติชันระบบสองพาร์ติชัน system_a และ system_b ทั้งคู่อยู่บน Android เวอร์ชันเดียวกัน
  2. สมมติว่า system_a ทำงานอยู่ การอัปเดต OTA จะแก้ไข system_b ซึ่งเป็นพาร์ติชันที่ไม่ได้ใช้งานในเบื้องหลัง
  3. system_a ถูกตั้งค่าเป็น inactive และ system_b จะเริ่มทำงานเมื่อผู้ใช้รีบูต
  4. พาร์ติชัน system_a ที่ไม่ได้ใช้งานอยู่ในขณะนี้ จะได้รับการอัปเดตเมื่อมีการอัปเดต OTA ครั้งถัดไป

กระบวนการอัพเดตนี้มีประโยชน์อย่างไร?

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

  1. ดาวน์โหลดล่าสุดแล้ว รอมเต็ม ซิป
  2. แฟลชไฟล์ ROM ROM แบบเต็มในการกู้คืน
  3. (ไม่บังคับ) เคอร์เนลแฟลชแบบกำหนดเอง
  4. ตัวติดตั้ง Flash TWRP
  5. รีบูตทันทีเพื่อกู้คืน
  6. แฟลชเมจิก

บนอุปกรณ์ Google Pixel คุณสามารถทำได้ แฟลชอิมเมจจากโรงงานโดยไม่ลบข้อมูลจากนั้นบูต TWRP ติดตั้ง TWRP ผ่านสคริปต์การติดตั้ง จากนั้นติดตั้ง Magisk

การแยกการอัปเดตเพื่อแฟลชอิมเมจพาร์ติชันแต่ละอัน

ไฟล์อัปเดตสำหรับอุปกรณ์ A/B จำนวนมากจะแตกต่างกันเล็กน้อยเมื่อเทียบกับอุปกรณ์ A-only พวกเขาไม่ได้เป็นเพียงไฟล์ zip ที่มีรูปภาพจำนวนมากอีกต่อไป (ยกเว้นรูปภาพจากโรงงานของ Google และ Razer) แต่จะอยู่ในรูปแบบของไฟล์ payload.bin คุณสามารถแยกไฟล์นี้และแฟลชแต่ละส่วนด้วยตนเองได้ แต่ต้องใช้เครื่องมือพิเศษในการทำเช่นนั้น หากคุณสนใจที่จะเรียนรู้วิธีดำเนินการดังกล่าวบน OnePlus 6, Xiaomi Mi A1 และอุปกรณ์ A/B อื่นๆ อีกมากมาย โปรดอ่านต่อ

การตั้งค่าเพื่อแยก payload.bin

  1. ตรวจสอบให้แน่ใจว่าคุณมี Python 3.6 ติดตั้งแล้ว.
  2. ดาวน์โหลด payload_dumper.py และ update_metadata_pb2.py ที่นี่.
  3. แตกไฟล์ OTA ของคุณและวาง payload.bin ในโฟลเดอร์เดียวกับไฟล์เหล่านี้
  4. เปิด PowerShell, Command Prompt หรือ Terminal ขึ้นอยู่กับระบบปฏิบัติการของคุณ
  5. ป้อนคำสั่งต่อไปนี้: python -m pip install protobuf
  6. เมื่อเสร็จแล้วให้ป้อนคำสั่งนี้: python payload_dumper.py payload.bin
  7. การดำเนินการนี้จะเริ่มแยกรูปภาพภายในไฟล์ 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")

บนพีซี Windows คุณไม่สามารถใช้ grep ได้ ดังนั้นให้ลบส่วนนั้นออกแล้วมองหา "current-slot"

คำเกี่ยวกับ Project Treble และการอัปเดตที่ราบรื่น

ความเข้าใจผิดที่พบบ่อยคือการสนับสนุน Project Treble และการสนับสนุนพาร์ติชัน A/B มีความเกี่ยวข้องกัน แต่จริงๆ แล้วไม่ได้เป็นเช่นนั้น การมีอย่างใดอย่างหนึ่งไม่ได้หมายความถึงอีกสิ่งหนึ่ง Motorola Moto Z2 Force ใช้รูปแบบการแบ่งพาร์ติชัน A/B แต่ไม่รองรับเสียงแหลม ในทางกลับกัน Honor 9 Lite รองรับ Project Treble แต่เป็นอุปกรณ์ A-only

Honor 9 Lite รองรับ Project Treble แต่ไม่รองรับการอัปเดตแบบไม่มีรอยต่อ

คำถามที่พบบ่อย/สรุป

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