การอัปเดตระบบที่ไม่ใช่ A/B

การอัปเดตที่ไม่ใช่ AB เป็นวิธีการ OTA ที่เลิกใช้งานแล้วซึ่งอุปกรณ์ Android รุ่นเก่าใช้ (Android 6 และเก่ากว่า) อุปกรณ์เหล่านี้มีพาร์ติชันการกู้คืนเฉพาะที่มีซอฟต์แวร์ที่จำเป็นในการแตกไฟล์แพ็กเกจการอัปเดตที่ดาวน์โหลดมาและใช้การอัปเดตกับพาร์ติชันอื่นๆ

ในอุปกรณ์ Android รุ่นเก่าที่ไม่มีพาร์ติชัน A/B พื้นที่เก็บข้อมูลแฟลชมักจะมีพาร์ติชันต่อไปนี้

บูต
มีเคอร์เนล Linux และระบบไฟล์รูทขั้นต่ำ (โหลดลงในดิสก์ RAM) โดยจะมาต่อเชื่อมระบบและพาร์ติชันอื่นๆ และเริ่มรันไทม์ที่อยู่ในพาร์ติชันระบบ
ระบบ
มีแอปพลิเคชันและไลบรารีของระบบที่มีซอร์สโค้ดอยู่ในโครงการโอเพนซอร์ส Android (AOSP) ในระหว่างการทํางานตามปกติ ระบบจะเมานต์พาร์ติชันนี้แบบอ่านอย่างเดียว เนื้อหาของพาร์ติชันจะเปลี่ยนแปลงเฉพาะระหว่างการอัปเดต OTA
ผู้จำหน่าย
มีแอปพลิเคชันและไลบรารีของระบบที่ไม่มีซอร์สโค้ดในโครงการโอเพนซอร์ส Android (AOSP) ในระหว่างการทํางานตามปกติ ระบบจะเมานต์พาร์ติชันนี้เป็นแบบอ่านอย่างเดียว โดยเนื้อหาจะเปลี่ยนแปลงเฉพาะระหว่างการอัปเดต OTA
userdata
จัดเก็บข้อมูลที่บันทึกโดยแอปพลิเคชันที่ผู้ใช้ติดตั้งไว้ ฯลฯ โดยปกติแล้วกระบวนการอัปเดต OTA จะไม่แตะต้องพาร์ติชันนี้
แคช
พื้นที่เก็บข้อมูลชั่วคราวที่แอปพลิเคชันบางรายการใช้ (การเข้าถึงพาร์ติชันนี้ต้องมีสิทธิ์พิเศษของแอป) และสำหรับจัดเก็บแพ็กเกจการอัปเดต OTA ที่ดาวน์โหลด โปรแกรมอื่นๆ ใช้พื้นที่นี้โดยคาดหวังว่าไฟล์อาจหายไปได้ทุกเมื่อ การติดตั้งแพ็กเกจ OTA บางรายการอาจส่งผลให้พาร์ติชันนี้ถูกล้างออกทั้งหมด แคชยังมีบันทึกการอัปเดตจากการอัปเดต OTA ด้วย
การกู้คืน
มีระบบ Linux ที่สมบูรณ์ระบบที่ 2 ซึ่งรวมถึงเคอร์เนลและไบนารีการกู้คืนพิเศษที่อ่านแพ็กเกจและใช้เนื้อหาของแพ็กเกจเพื่ออัปเดตพาร์ติชันอื่นๆ
เบ็ดเตล็ด
พาร์ติชันขนาดเล็กที่การกู้คืนใช้เพื่อเก็บข้อมูลบางอย่างเกี่ยวกับสิ่งที่กำลังทำไว้ในกรณีที่อุปกรณ์รีสตาร์ทขณะกำลังใช้แพ็กเกจ OTA

ระยะเวลาของการอัปเดต OTA

การอัปเดต OTA โดยทั่วไปมีขั้นตอนต่อไปนี้

  1. อุปกรณ์จะตรวจสอบกับเซิร์ฟเวอร์ OTA เป็นประจําและได้รับการแจ้งเตือนเมื่อมีอัปเดต รวมถึง URL ของแพ็กเกจอัปเดตและสตริงคําอธิบายที่จะแสดงต่อผู้ใช้
  2. อัปเดตการดาวน์โหลดลงในแคชหรือพาร์ติชันข้อมูล และยืนยันลายเซ็นการเข้ารหัสเทียบกับใบรับรองใน/system/etc/security/otacerts.zip ระบบจะแจ้งให้ผู้ใช้ติดตั้งการอัปเดต
  3. อุปกรณ์จะรีบูตเข้าสู่โหมดการกู้คืน ซึ่งระบบจะบูตเคอร์เนลและระบบในพาร์ติชันการกู้คืนแทนเคอร์เนลในพาร์ติชันการบูต
  4. init เริ่มไบนารีการกู้คืน โดยจะค้นหาอาร์กิวเมนต์บรรทัดคำสั่งใน /cache/recovery/command ที่ชี้ไปยังแพ็กเกจที่ดาวน์โหลด
  5. การกู้คืนจะยืนยันลายเซ็นการเข้ารหัสของแพ็กเกจเทียบกับคีย์สาธารณะใน /res/keys (ส่วนหนึ่งของดิสก์ RAM ที่มีอยู่ในพาร์ติชันการกู้คืน)
  6. ระบบจะดึงข้อมูลจากแพ็กเกจและใช้เพื่ออัปเดตพาร์ติชันสำหรับบูต ระบบ และ/หรือผู้ให้บริการตามที่จำเป็น ไฟล์ใหม่ 1 ไฟล์ที่เหลืออยู่ในพาร์ติชันระบบจะมีเนื้อหาของพาร์ติชันการกู้คืนใหม่
  7. อุปกรณ์รีบูตตามปกติ
    1. ระบบจะโหลดพาร์ติชันสำหรับบูตที่อัปเดตใหม่ จากนั้นจะเมานต์และเริ่มดำเนินการไบนารีในพาร์ติชันระบบที่อัปเดตใหม่
    2. ในการเริ่มต้นระบบตามปกติ ระบบจะตรวจสอบเนื้อหาของพาร์ติชันการกู้คืนเทียบกับเนื้อหาที่ต้องการ (ซึ่งก่อนหน้านี้จัดเก็บเป็นไฟล์ใน /system) หากเนื้อหาไม่ตรงกัน ระบบจะแฟลชพาร์ติชันการกู้คืนอีกครั้งด้วยเนื้อหาที่ต้องการ (ในการบูตครั้งต่อๆ ไป พาร์ติชันการกู้คืนจะมีเนื้อหาใหม่อยู่แล้ว จึงไม่จำเป็นต้องแฟลชอีกครั้ง)

การอัปเดตระบบเสร็จสมบูรณ์แล้ว ดูบันทึกการอัปเดตได้ใน /cache/recovery/last_log.#

อัปเดตแพ็กเกจ

แพ็กเกจอัปเดตคือไฟล์ .zip ที่มีไบนารีที่ปฏิบัติการได้ META-INF/com/google/android/update-binary หลังจากยืนยันลายเซ็นในแพ็กเกจแล้ว recovery จะแตกไฟล์ไบนารีนี้ไปยัง /tmp และเรียกใช้ไบนารีโดยส่งอาร์กิวเมนต์ต่อไปนี้

  • อัปเดตหมายเลขเวอร์ชันของ API แบบไบนารี หากอาร์กิวเมนต์ที่ส่งไปยังการอัปเดตไบนารีมีการเปลี่ยนแปลง ตัวเลขนี้จะเพิ่มขึ้น
  • ตัวระบุไฟล์ของไปป์คำสั่ง โปรแกรมอัปเดตสามารถใช้ไปป์นี้เพื่อส่งคำสั่งกลับไปที่ไบนารีการกู้คืนได้ โดยส่วนใหญ่จะใช้สำหรับการเปลี่ยนแปลง UI เช่น แสดงความคืบหน้าต่อผู้ใช้
  • ชื่อไฟล์ .zip ของแพ็กเกจอัปเดต

แพ็กเกจอัปเดตสามารถใช้ไบนารีที่ลิงก์แบบคงที่ใดก็ได้เป็นไบนารีอัปเดต เครื่องมือสร้างแพ็กเกจ OTA ใช้โปรแกรมอัปเดต (bootable/recovery/updater) ซึ่งมีภาษาสคริปต์ง่ายๆ ที่ทํางานต่างๆ ของการติดตั้งได้ คุณแทนที่ไบนารีอื่นๆ ที่ทำงานในอุปกรณ์ได้

ดูรายละเอียดเกี่ยวกับไบนารีโปรแกรมอัปเดต ไวยากรณ์ edify และฟังก์ชันในตัวได้ที่ภายในแพ็กเกจ OTA

ย้ายข้อมูลจากรุ่นก่อนหน้า

เมื่อย้ายข้อมูลจากรุ่น Android 2.3/3.0/4.0 การเปลี่ยนแปลงที่สำคัญคือการเปลี่ยนฟังก์ชันการทำงานทั้งหมดที่เจาะจงอุปกรณ์จากชุดฟังก์ชัน C ที่มีชื่อที่กำหนดไว้ล่วงหน้าเป็นออบเจ็กต์ C++ ตารางต่อไปนี้แสดงฟังก์ชันเดิมและเมธอดใหม่ที่ทํางานสําหรับวัตถุประสงค์ที่เทียบเท่ากัน

ฟังก์ชัน C เมธอด C++
device_recovery_start() Device::RecoveryStart()
device_toggle_display()
device_reboot_now()
RecoveryUI::CheckKey()
(หรือ RecoveryUI::IsKeyPressed())
device_handle_key() Device::HandleMenuKey()
device_perform_action() Device::InvokeMenuItem()
device_wipe_data() Device::WipeData()
device_ui_init() ScreenRecoveryUI::Init()

การแปลงฟังก์ชันเก่าเป็นเมธอดใหม่ควรทำได้ง่าย อย่าลืมเพิ่มmake_device()ฟังก์ชันใหม่เพื่อสร้างและแสดงผลอินสแตนซ์ของคลาสย่อย Device ใหม่