จัดการการอัปเดตระบบ

คู่มือสำหรับนักพัฒนาซอฟต์แวร์นี้อธิบายวิธีที่เครื่องมือควบคุมนโยบายด้านอุปกรณ์ (DPC) จัดการการอัปเดตระบบ Android ในนามของผู้ใช้อุปกรณ์

ข้อมูลเบื้องต้น

อุปกรณ์ Android สามารถรับและติดตั้งการอัปเดตผ่านอากาศ (OTA) ในระบบได้ และซอฟต์แวร์ประยุกต์ Android แจ้งผู้ใช้อุปกรณ์ว่าการอัปเดตระบบ พร้อมใช้งาน และผู้ใช้อุปกรณ์สามารถติดตั้งอัปเดตทันทีหรือภายหลังก็ได้

ผู้ดูแลระบบไอทีสามารถจัดการการอัปเดตระบบให้กับผู้ใช้อุปกรณ์ได้โดยใช้ DPC DPC สามารถเป็นเจ้าของอุปกรณ์ที่มีการจัดการครบวงจร (เรียกว่าเจ้าของอุปกรณ์) หรือเป็นเจ้าของโปรไฟล์งานได้ (เรียกว่าเจ้าของโปรไฟล์) ตารางที่ 1 แสดงวิธีที่เจ้าของอุปกรณ์จัดการระบบได้ แต่เจ้าของโปรไฟล์สามารถรายงานได้เฉพาะข้อมูลเกี่ยวกับการอัปเดตระบบเท่านั้น

ตาราง 1: งานที่ใช้ได้กับ DPC จะขึ้นอยู่กับโหมดเจ้าของ

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

ตรวจหาการอัปเดตที่รอดำเนินการ

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

เจ้าของอุปกรณ์และเจ้าของโปรไฟล์ที่ใช้ Android 8.0 (API ระดับ 26) ขึ้นไ�� สามารถตรวจสอบว่าอุปกรณ์มีการอัปเดตระบบที่รอดำเนินการหรือไม่ โทร DevicePolicyManager.getPendingSystemUpdate() ซึ่งจะแสดงผล null หากอุปกรณ์เป็นเวอร์ชันล่าสุด หากการอัปเดตระบบรอดำเนินการอยู่ วิธีการนี้จะแสดงข้อมูลเกี่ยวกับการอัปเดต

ดูข้อมูลเพิ่มเติมเกี่ยวกับการอัปเดตที่รอดำเนินการ

หลังจากโทรหา getPendingSystemUpdate() แล้ว คุณจะตรวจสอบสินค้าที่ส่งคืนได้ SystemUpdateInfo เพื่อดูข้อมูลเพิ่มเติมเกี่ยวกับการอัปเดตที่รอดำเนินการ ตัวอย่างต่อไปนี้แสดงวิธีที่คุณอาจทราบเมื่อการอัปเดตที่รอดำเนินการเกิดขึ้นครั้งแรก พร้อมใช้งานกับอุปกรณ์:

Kotlin

val firstAvailable =
        dpm.getPendingSystemUpdate(adminName)?.receivedTime
firstAvailable?.let {
    Log.i(TAG, "Update first available: ${Date(firstAvailable)}")
}

Java

SystemUpdateInfo updateInfo = dpm.getPendingSystemUpdate(adminName);
if (updateInfo != null) {
  Long firstAvailable = updateInfo.getReceivedTime();
  Log.i(TAG, "Update first available: " + new Date(firstAvailable));
}

Callback ของระบบ

เมื่อมีการอัปเดต ระบบ Android จะแจ้งเจ้าของอุปกรณ์เกี่ยวกับ อัปเดตใหม่ ใน Android 8.0 ขึ้นไป ระบบจะแจ้งให้เจ้าของโปรไฟล์ทราบด้วย

ในคลาสย่อย DeviceAdminReceiver ให้ลบล้าง การติดต่อกลับของ onSystemUpdatePending() คุณไม่จำเป็นต้องใช้ ลงทะเบียนหรือลงโฆษณาให้ DPC เพื่อให้ได้รับการติดต่อกลับ ระบบอาจ เรียกใช้เมธอดนี้มากกว่า 1 ครั้งสำหรับการอัปเดตครั้งเดียว ดังนั้นโปรดตรวจสอบสถานะการอัปเดต ก่อนที่จะตอบ โทรหา getPendingSystemUpdate() เพื่อดูข้อมูลเพิ่มเติมเกี่ยวกับ การอัปเดตระบบใน Callback ตัวอย่างต่อไปนี้แสดงวิธีดำเนินการดังกล่าว

Kotlin

/**
 * Called when a new update is available.
 */
override fun onSystemUpdatePending(context: Context?, intent: Intent?,
                                   receivedTime: Long) {

    // System update information is supported in API level 26 or higher.
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {
        return
    }

    val updateInfo = getManager(context)
            .getPendingSystemUpdate(getWho(context))
            ?: return
    if (updateInfo.securityPatchState ==
            SystemUpdateInfo.SECURITY_PATCH_STATE_TRUE) {
        // Perhaps install because this is a security patch.
        // ...
    }
}

Java

/**
 * Called when a new update is available.
 */
public void onSystemUpdatePending (Context context, Intent intent,
                                   long receivedTime) {

  // System update information is supported in API level 26 or higher.
  if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {
    return;
  }
  SystemUpdateInfo updateInfo = getManager(context)
      .getPendingSystemUpdate(getWho(context));
  if (updateInfo == null) {
    return;
  }
  if (updateInfo.getSecurityPatchState() ==
      SystemUpdateInfo.SECURITY_PATCH_STATE_TRUE) {
    // Perhaps install because this is a security patch.
    // ...
  }
}

เมื่อระบบมี DPC มากกว่า 1 รายการ เช่น โปรไฟล์งานในอุปกรณ์ที่มีการจัดการครบวงจร เจ้าของอุปกรณ์และเจ้าของโปรไฟล์จะได้รับการติดต่อกลับทั้งคู่

อัปเดตนโยบาย

เจ้าของอุปกรณ์ควบคุมได้ว่าจะติดตั้งการอัปเดตเมื่อใดด้วยการตั้งค่าระบบในเครื่อง อัปเดตนโยบายสำหรับอุปกรณ์ นโยบายการอัปเดตระบบมี 3 ประเภทดังนี้

อัตโนมัติ
ติดตั้งการอัปเดตระบบทันที ว่าง (โดยไม่ต้องมีการโต้ตอบของผู้ใช้) การตั้งค่าประเภทนโยบายนี้จะติดตั้งการอัปเดตที่รอดำเนินการทั้งหมดทันที ซึ่งอาจมีการเลื่อนเวลาการบำรุงรักษาหรือรอช่วงเวลาบำรุงรักษา
โหมดหน้าต่าง
ติดตั้งการอัปเดตระบบในช่วงเวลาบำรุงรักษาประจำวัน (โดยไม่ต้องมีการโต้ตอบจากผู้ใช้) กำหนดเวลาเริ่มต้นและสิ้นสุดของช่วงเวลาบำรุงรักษารายวัน เป็นนาที วันนั้นเมื่อสร้างนโยบายกรอบเวลาใหม่
เลื่อนกำหนดการ
เลื่อนการติดตั้งการอัปเดตระบบเป็นเวลา 30 วัน หลังจาก 30 วัน สิ้นสุดระยะเวลาแล้ว ระบบจะแจ้งให้ผู้ใช้อุปกรณ์ติดตั้งการอัปเดต

ระยะเวลาเลื่อน

ระบบจะจำกัดการอัปเดตแต่ละครั้งไว้ที่การเลื่อนเวลา 30 วันหนึ่งครั้ง ระยะเวลาจะเริ่มต้นเมื่อ ระบบจะเลื่อนการอัปเดตออกไปก่อน และการตั้งค่านโยบายการเลื่อนใหม่จะไม่ ขยายระยะเวลา

นอกจากการเลื่อนเวลาแล้ว Android อาจติดตั้งอัปเดตไม่ได้ด้วยเหตุผลอื่นๆ เช่น ไม่มีการเชื่อมต่อ พื้นที่ในดิสก์ไม่เพียงพอ หรือแบตเตอรี่เหลือน้อย

ระบบจะรีเซ็ตตัวจับเวลาการเลื่อน 30 วันหากมีการอัปเดตอื่นพร้อมใช้งานในช่วงเวลาดังกล่าว ซึ่งจะช่วยให้ผู้ดูแลระบบไอทีมีโอกาสลองใช้การอัปเดตระบบแบบรวม หลังจากผ่านไป 30 วันโดยไม่มีการอัปเดตใหม่ ระบบจะแจ้งให้ ติดตั้งอัปเดตที่รอดำเนินการทั้งหมด หลังจากนั้น เมื่อการอัปเดตระบบใหม่พร้อมให้ดำเนินการแล้ว ระยะเวลา 30 วันจะเริ่มอีกครั้ง

วิธีกำหนดนโยบาย

คุณตั้งค่านโยบายการอัปเดตได้ใน Android 8.0 (API ระดับ 26) ขึ้นไป หากต้องการระบุ เวลาที่อุปกรณ์ควรติดตั้งการอัปเดตระบบ ให้สร้างอินสแตนซ์ SystemUpdatePolicy โดยใช้ 1 ใน 3 ประเภทที่สรุป ที่ด้านบน หากต้องการตั้งค่านโยบาย เจ้าของอุปกรณ์เรียกใช้เมธอด DevicePolicyManager setSystemUpdatePolicy() ตัวอย่างโค้ดต่อไปนี้แสดงวิธีดำเนินการ หากต้องการดูตัวอย่างนโยบายกรอบเวลา ให้ดูที่ ในเอกสารประกอบของ SystemUpdatePolicy

Kotlin

// Create the system update policy to postpone installation for 30 days.
val policy = SystemUpdatePolicy.createPostponeInstallPolicy()

// Get a DevicePolicyManager instance to set the policy on the device.
val dpm = context.getSystemService(Context.DEVICE_POLICY_SERVICE)
        as DevicePolicyManager
val adminName = getComponentName(context)

// Set the policy.
dpm.setSystemUpdatePolicy(adminName, policy)

Java

// Create the system update policy to postpone installation for 30 days.
SystemUpdatePolicy policy = SystemUpdatePolicy.createPostponeInstallPolicy();

// Get a DevicePolicyManager instance to set the policy on the device.
DevicePolicyManager dpm = (DevicePolicyManager) context
    .getSystemService(Context.DEVICE_POLICY_SERVICE);
ComponentName adminName = getComponentName(context);

// Set the policy.
dpm.setSystemUpdatePolicy(adminName, policy);

เมื่อสร้างอินสแตนซ์นโยบายแล้วจะเปลี่ยนแปลงไม่ได้ วิธีเปลี่ยนเวลาของอุปกรณ์ ติดตั้งการอัปเดต คุณจะสามารถสร้างและตั้งค่านโยบายใหม่ได้ หากต้องการนำนโยบายออกจาก อุปกรณ์ เ����ยก setSystemUpdatePolicy() ผ่าน null เป็นอาร์กิวเมนต์ policy หลังจาก DPC นำนโยบายออกแล้ว ผู้ใช้อุปกรณ์จะเห็นการแจ้งเตือนสำหรับการอัปเดตระบบที่พร้อมใช้งาน

แอปจะโทรหา getSystemUpdatePolicy() เพื่อรับ นโยบายปัจจุบันของอุปกรณ์ หากเมธอดนี้แสดงผล null หมายความว่า ยังไม่ได้กำหนดนโยบายในขณะนี้

ช่วงหยุดทำงาน

เพื่อระงับเวอร์ชันของระบบปฏิบัติการในช่วงเวลาที่สำคัญ เช่น วันหยุดหรือเทศกาลอื่นๆ เจ้าของอุปกรณ์สามารถระงับการอัปเดตระบบได้สูงสุด 90 วัน เมื่อ อุปกรณ์อยู่ในช่วงระ��ะเวลาค้าง จะมีการทำงานดังนี้

  • อุปกรณ์ไม่ได้รับการแจ้งเตือนใดๆ เกี่ยวกับการอัปเดตระบบที่รอดำเนินการ
  • ไม่ได้ติดตั้งการอัปเดตระบบสำหรับระบบปฏิบัติการ
  • ผู้ใช้อุปกรณ์ไม่สามารถตรวจหาการอัปเดตระบบด้วยตนเองในการตั้งค่า

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

รูปที่ 1. ตั้งช่วงหยุดทำงาน 2 ช่วงในอุปกรณ์
ปฏิทินแสดงช่วงหยุดทำงาน 2 ช่วงใน 1 ปี โดยมีบัฟเฟอร์ 60 วัน

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

วิธีกำหนดช่วงหยุดทำงาน

คุณกำหนดช่วงหยุดทำงานใน Android 9 (API ระดับ 28) ขึ้นไปได้ เจ้าของอุปกรณ์จะกำหนดระยะเวลาหยุดทำงานในนโยบายการอัปเดตระบบก่อนที่จะตั้งค่านโยบายสำหรับอุปกรณ์ ขั้นตอนมีดังนี้

  1. สร้างนโยบายการอัปเดตระบบใหม่ (หรือรับนโยบายปัจจุบัน)
  2. กำหนดช่วงหยุดทำงานในนโยบายโดยการโทร setFreezePeriods()
  3. ตั้งค่านโยบายและระงับการใช้งานอุปกรณ์ด้วยการโทร setSystemUpdatePolicy()

เนื่องจากช่วงหยุดทำงานนี้เกิดซ้ำทุกปี วันที่เริ่มต้นและวันที่สิ้นสุดของช่วงวันที่ ระยะเวลาจะแสดงด้วยค่าเดือนและวัน วันที่เริ่มต้นต้องอยู่หลังสิ้นสุดระยะเวลาหยุดทำงานก่อนหน้าอย่างน้อย 60 วัน ตัวอย่างต่อไปนี้ แสดงวิธีการตั้งค่าช่วงหยุดทำงาน 2 ช่วงสำหรับนโยบายการอัปเดตระบบที่มีอยู่ ดังนี้

Kotlin

// Get the existing policy from the DevicePolicyController instance.
val policy = dpm.systemUpdatePolicy ?: return

try {
    // Set the two annual freeze periods on the policy for our retail
    // point-of-sale devices.
    val summerSale = FreezePeriod(
            MonthDay.of(6, 1),
            MonthDay.of(7, 31)) // Jun 1 - Jul 31 inclusive
    val winterSale = FreezePeriod(
            MonthDay.of(11, 20),
            MonthDay.of(1, 12)) // Nov 20 - Jan 12 inclusive
    policy.freezePeriods = Arrays.asList(summerSale, winterSale)

    // Set the policy again to activate the freeze periods.
    dpm.setSystemUpdatePolicy(adminName, policy)

} catch (e: SystemUpdatePolicy.ValidationFailedException) {
    // There must be previous periods recorded on the device because
    // summerSale and winterSale don’t overlap and are separated by more
    // than 60 days. Report the overlap ...
}

Java

// Get the existing policy from the DevicePolicyController instance.
SystemUpdatePolicy policy = dpm.getSystemUpdatePolicy();

try {
  // Set the two annual freeze periods on the policy for our
  // retail point-of-sale devices.
  FreezePeriod summerSale = new FreezePeriod(
      MonthDay.of(6, 1),
      MonthDay.of(7, 31)); // Jun 1 - Jul 31 inclusive
  FreezePeriod winterSale = new FreezePeriod(
      MonthDay.of(11, 20),
      MonthDay.of(1, 12)); // Nov 20 - Jan 12 inclusive
  policy.setFreezePeriods(Arrays.asList(summerSale, winterSale));

  // Don’t forget to set the policy again to activate the freeze periods.
  dpm.setSystemUpdatePolicy(adminName, policy);

} catch (SystemUpdatePolicy.ValidationFailedException e) {
  // There must be previous periods recorded on the device because summerSale
  // and winterSale don’t overlap and are separated by more than 60 days.
  // Report the overlap ...
}

ทั้งวันที่เริ่มต้นและวันที่สิ้นสุดจะรวมอยู่ด้วย หากวันที่เริ่มต้นมากกว่า มากกว่าวันที่สิ้นสุด (เช่น winterSale ในตัวอย่างก่อนหน้านี้) ครอบคลุมถึงปีถัดไป

เมื่อตั้งค่าค้าง ระยะเวลาในนโยบายการอัปเดตระบบ โดย Android จะทดสอบตามข้อกำหนดต่อไปนี้

  • ไม่มีช่วงหยุดทำงานที่นานกว่า 90 วัน
  • ช่วงเวลาระหว่างช่วงหยุดทำงานต้องห่างกันอย่างน้อย 60 วัน
  • ช่วงหยุดทำงานจะไม่ซ้อนทับกัน
  • ไม่มีช่วงหยุดทำงานที่ซ้ำกัน

เมื่อตั้งค่านโยบายการอัปเดตระบบสำหรับอุปกรณ์ Android จะทำการทดสอบเหล่านี้ซ้ำและรวมระยะเวลาการหยุดทำงานในปัจจุบันหรือที่ผ่านมาของอุปกรณ์

Android จะส่ง SystemUpdatePolicy.ValidationFailedException เมื่อ การทดสอบใดๆ เหล่านี้ล้มเหลว

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

Kotlin

// Log any freeze periods that might be set on a system update policy.
dpm.systemUpdatePolicy?.freezePeriods?.forEach {
    Log.i(TAG, "Freeze period: $it")
}

Java

// Log any freeze periods that might be set on a system update policy.
SystemUpdatePolicy currentPolicy = dpm.getSystemUpdatePolicy();
if (currentPolicy != null) { // A policy might not be set.
  for (FreezePeriod freezePeriod : currentPolicy.getFreezePeriods()) {
    Log.i(TAG, "Freeze period: " + freezePeriod.toString());
  }
}

ปีอธิกสุรทิน

Android ใช้ปฏิทิน ISO 8601 (หรือเรียกว่าปฏิทินเกรกอเรียน) เพื่อ จะคำนวณช่วงหยุดทำงานและไม่รวมปีอธิกสุรทิน ซึ่งหมายความว่าวันที่ 29 กุมภาพันธ์ ไม่ใช่วันที่ที่ถูกต้องและจะถือว่าเป็นวันที่ 28 กุมภาพันธ์ ดังนั้น ระบบจึงไม่นับวันที่ 29 กุมภาพันธ์เมื่อคำนวณระยะเวลาของการค้าง 6 เดือน

การพัฒนาและการทดสอบ

ขณะพัฒนาและทดสอบฟีเจอร์การอัปเดตระบบของ DPC คุณอาจต้องสร้างระยะเวลาหยุดทำงานหลายครั้ง เพราะ Android ตรวจสอบช่วงเวลา 60 วัน ระหว่างช่วงหยุดทำงานที่ผ่านมา คุณอาจไม่สามารถตั้งช่วงหยุดทำงานใหม่ โดยไม่ล้างข้อมูลของช่วงเวลาที่ผ่านมาก่อน วิธีล้างการหยุดทำงานของอุปกรณ์ ให้เรียกใช้คำสั่งต่อไปนี้ใน Android Debug Bridge (adb) เชลล์:

adb shell dpm clear-freeze-period-record

คุณสามารถยืนยันว่าอุปกรณ์อยู่ในช่วงหยุดทำงานได้โดยการตรวจสอบว่าผู้ใช้ อินเทอร์เฟซสำหรับการอัปเดตระบบถูกปิดใช้งาน

การอัปเดตระบบ Google Play (เมนไลน์)

การอัปเดตระบบ Google Play (เรียกอีกอย่างว่าการอัปเดตเมนไลน์) ดาวน์โหลดโดยอัตโนมัติ แต่ต้องมีการรีบูตอุปกรณ์จึงจะติดตั้งได้ เหล่านี้ การอัปเดตจะไม่��ริกเกอร์การรีบูตโดยอัตโนมัติ แต่จะติดตั้งบน ผู้ใช้ ผู้ดูแลระบบ หรือนโยบายรายถัดไปเริ่มรีบูต การรีบูตที่เกิดจากระบบ นโยบายการอัปเดตจะติดตั้งการอัปเดตระบบ Google/OEM ที่เกี่ยวข้องและ การอัปเดตระบบ Google Play ที่ดาวน์โหลดไว้ก่อนหน้านี้

นอกจากนี้ คุณยังติดตั้งการอัปเดตระบบ Google Play ด้วยตนเองได้โดยไปที่ การตั้งค่า > เกี่ยวกับ > เวอร์ชัน Android > อัปเดตระบบ Google Play

ย้อนกลับการอัปเดต

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

  1. หากคุณมี Android Debug Bridge (adb) ที่ทำงานอยู่ในเครื่อง ให้หยุด บริการ adb ก่อนที่จะดำเนินการต่อ เพื่อไม่ให้รบกวน ย้อนกลับ หากต้องการหยุด adb ให้เรียกใช้ adb kill-server
  2. เปิดเครื่องมือ GPSUR
  3. คลิกอนุญาตให้เข้าถึง ADB เพ���่ออนุญาตให้เครื่องมือสื่อสารกับการทดสอบ อุปกรณ์ผ่าน adb
  4. คลิกเพิ่มอุปกรณ์ใหม่
  5. เลือกอุปกรณ์จากรายการ แล้วคลิกเชื่อมต่อ รายการนี้อาจไม่ มีชื่อเต็มของอุปกรณ์
  6. บนหน้าจอของอุปกรณ์ ให้เลือกอนุญาตจากคอมพิวเตอร์เครื่องนี้เสมอ แล้วคลิก ตกลง เพื่อยอมรับการเชื่อมต่อการแก้ไขข้อบกพร่อง USB
  7. เลือกอุปกรณ์ที่เชื่อมต่อในเบราว์เซอร์
  8. ข้อความปุ่มในหน้าเว็บควรเปลี่ยนจากไม่มีการย้อนกลับเป็น ย้อนกลับการอัปเดตล่าสุด หากมีการย้อนกลับบนอุปกรณ์ คลิกย้อนกลับการอัปเดตล่าสุด
  9. อ่านคำเตือนในโมดัลยืนยันการย้อนกลับ แล้วคลิกยืนยัน
  10. รอให้การย้อนกลับเสร็จสมบูรณ์ เมื่อดำเนินการเสร็จแล้ว การย้อนกลับ���ำเร็จ โมดัลจะปรากฏขึ้นและอุปกรณ์จะรีบูต ตอนนี้สามารถถอดปลั๊กได้อย่างปลอดภัยแล้ว อุปกรณ์

แหล่งข้อมูลเพิ่มเติม

หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับการอัปเดตระบบ โปรดอ่าน OTA ของโครงการโอเพนซอร์ส Android อัปเดต