إدارة تحديثات النظام

يوضّح دليل المطوّرين هذا كيفية إدارة جهاز التحكّم في سياسة الجهاز (DPC) لتعديلات نظام Android نيابةً عن مستخدم الجهاز.

مقدّمة

يمكن لأجهزة Android تلقّي التحديثات عبر شبكة غير سلكيّة (OTA) وتثبيتها على النظام. والبرامج التطبيقية. يُرسِل Android إشعارًا إلى مستخدم الجهاز بأنّه يتم تحديث النظام. ويمكن لمستخدم الجهاز تثبيت التحديث على الفور أو لاحقًا.

وباستخدام وحدة التحكّم بسياسة الجهاز (DPC)، يمكن لمشرف تكنولوجيا المعلومات إدارة تحديثات النظام لمستخدم الجهاز. وحدات التحكّم بسياسة الجهاز (DPC) امتلاك جهاز مُدار بالكامل (يُسمى مالك الجهاز) أو امتلاك ملف شخصي للعمل (يُعرف باسم مالك الملف التجاري). يوضح الجدول 1 كيفية إدارة مالكي الأجهزة للنظام التحديثات، بينما يمكن لمالكي الملفات الشخصية الإبلاغ عن المعلومات المتعلقة بتحديثات النظام فقط.

الجدول 1: تعتمد المهام المتاحة لوحدات التحكّم بسياسة الجهاز على وضع المالك.

المهمة مالك الجهاز مالك الملف الشخصي
التحقّق من توفّر تحديثات للنظام في انتظار المراجعة
تلقّي معاودة الاتصال عند توفُّر تحديثات النظام الجديدة
ضبط سياسة التحديث المحلي للتحكّم في مواعيد تثبيت تحديثات النظام من خلال نظام التشغيل Android
تجميد إصدار نظام التشغيل خلال الفترات الحرجة

البحث عن تحديثات في انتظار المراجعة

التحديث في انتظار المراجعة هو تحديث نظام لجهاز لم يتم تثبيته بعد. يمكن لوحدة التحكُّم بسياسة الجهاز (DPC) مساعدة مشرفي تكنولوجيا المعلومات في التحقُّق من الأجهزة التي تتضمن تحديثات النظام في انتظار المراجعة، وكذلك أو مطالبة مستخدمي الأجهزة بتثبيت التحديثات المهمة على الفور.

مالكو الأجهزة ومالكي الملفات الشخصية التي تعمل بنظام التشغيل Android 8.0 (المستوى 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));
}

عمليات استدعاء النظام

عند توفُّر تحديث، يُرسِل نظام Android إشعارات إلى مالكي الجهاز بشأن التحديث الجديد. في الإصدار 8.0 من نظام التشغيل Android أو الإصدارات الأحدث، يرسل النظام إشعارًا إلى مالكي الملفات الشخصية أيضًا.

في الفئة الفرعية DeviceAdminReceiver، يمكنك إلغاء onSystemUpdatePending() معاودة الاتصال. لست بحاجة إلى تسجيل DPC أو الإعلان عنه لتلقّي المكالمة. قد يتعرض النظام استدعاء هذه الطريقة أكثر من مرة لتحديث واحد، لذا تحقق من حالة التحديث قبل الاستجابة. يمكنك الاتصال بالرقم getPendingSystemUpdate() للاطّلاع على مزيد من المعلومات عن تحديث النظام في عملية معاودة الاتصال. يوضّح المثال التالي كيفية إجراء ذلك:

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) واحدة، مثل الملفات الشخصية للعمل في حسابات مُدارة بالكامل جهاز واحد، سيتم معاودة الاتصال بكل من مالك الجهاز ومالك الملف الشخصي.

تعديل السياسات

يمكن لصاحب الجهاز التحكّم في وقت تثبيت التحديثات من خلال ضبط سياسة تحديث النظام على الجهاز. هناك ثلاثة أنواع من سياسة تحديثات النظام:

تلقائي
يتم تثبيت تحديثات النظام فور توفُّرها متاحة (بدون تفاعل المستخدم). يؤدي ضبط نوع السياسة هذا إلى تثبيت أي تحديثات في انتظار المراجعة على الفور. التي يمكن تأجيلها أو انتظار نافذة صيانة.
نافذة
يتم تثبيت تحديثات النظام أثناء عملية الصيانة اليومية. (بدون تفاعل المستخدم). اضبط وقتَي بدء نافذة الصيانة اليومية وانتهائها، بدقيقتَي اليوم، عند إنشاء سياسة جديدة مستندة إلى نافذة زمنية.
مؤجلة
تأجيل تثبيت تحديثات النظام لمدة 30 يومًا بعد 30 يومًا عند انتهاء فترة زمنية معينة، سيطلب النظام من مستخدم الجهاز تثبيت التحديث.

فترات التأجيل

يفرض النظام قيودًا على فترة كل تحديث لمدة 30 يومًا. تبدأ الفترة عندما يؤجل النظام التحديث لأول مرة، ولن يؤدي ضبط سياسات تأجيل جديدة إلى إطالة هذه الفترة.

بالإضافة إلى التأجيل، قد يتعذّر على Android تثبيت تحديث لأسباب أخرى، مثل عدم توفّر اتصال بالإنترنت أو عدم توفّر مساحة كافية على القرص أو انخفاض طاقة البطارية.

يعيد النظام ضبط موقّت التأجيل الذي يبلغ 30 يومًا في حال حدوث تحديث مختلف. متاحة خلال تلك الفترة، ما يمنح مشرفي تكنولوجيا المعلومات فرصة لتجربة النظام المدمج التحديثات. بعد مرور 30 يومًا بدون توفُّر تحديث جديد، يطلب النظام من المستخدم تثبيت جميع التحديثات المعلّقة. وعندما يتوفر تحديث نظام جديد في وقت لاحق، تبدأ فترة 30 يومًا من جديد.

طريقة ضبط سياسة

يمكنك ضبط سياسات التحديث في الإصدار 8.0 من نظام التشغيل Android (المستوى 26 من واجهة برمجة التطبيقات) أو الإصدارات الأحدث. لتحديد الوقت الذي ينبغي فيه تثبيت تحديثات النظام على الجهاز، فأنشئ مثيلاً SystemUpdatePolicy باستخدام أحد الأنواع الثلاثة الموضّحة أعلاه. لضبط سياسة، يطلب مالك الجهاز طريقة 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. بعد أن تزيل وحدة التحكّم بسياسة الجهاز إحدى السياسات، سيظهر لمستخدم الجهاز إشعارات لأي من هذه السياسات. تحديثات النظام المتوفرة.

يمكن للتطبيقات الاتصال بالرقم getSystemUpdatePolicy() للحصول على السياسة الحالية للجهاز. وإذا أرجعت هذه الطريقة القيمة null، يعني ذلك أنّ لم يتم ضبط السياسة حاليًا.

فترات تجميد البيانات

تجميد إصدار نظام التشغيل خلال الفترات المهمة، مثل العطلات أو الأنشطة الأخرى المزدحمة يمكن لمالكي الأجهزة تعليق تحديثات النظام لمدة تصل إلى 90 يومًا. عندما الجهاز ضمن فترة إيقاف التحديثات، وهو يتصرف على النحو التالي:

  • لا يتلقّى الجهاز أي إشعارات بشأن تحديثات النظام في انتظار المراجعة.
  • لم يتم تثبيت تحديثات النظام على نظام التشغيل.
  • لا يمكن لمستخدمي الأجهزة البحث يدويًا عن تحديثات النظام من خلال "الإعدادات".

يفرض النظام فترة احتياطي إلزامي تبلغ 60 يومًا بعد أي تجميد بيانات محدَّد. فترات منع تجميد الجهاز إلى أجل غير مسمى. تذكر أن نظام التجميد يمكن أن تمنع التحديثات الأجهزة من تلقّي تحديثات مهمة.

الشكل 1. ضبط فترتَين لإيقاف التحديثات للجهاز
&quot;تقويم Google&quot; يعرض فترتَين لإيقاف التحديثات في السنة مع مخازن مؤقتة تبلغ 60 يومًا.

يتم ضبط فترات إيقاف التحديثات على سياسة التحديث. لا يمكنك ضبط فترات تجميد البيانات بدون ضبط سياسة عندما يكون الجهاز خارج أي فترات تجميد بيانات تحددها، ينطبق السلوك العادي للسياسة (تلقائي أو تم إدراجه في النافذة أو تم تأجيله).

كيفية ضبط فترة تجميد

يمكنك ضبط فترات إيقاف التحديثات في Android 9 (المستوى 28 من واجهة برمجة التطبيقات) أو الإصدارات الأحدث. يضبط مالك الجهاز فترة تجميد على سياسة تحديث النظام قبل ضبط السياسة للجهاز. الخطوات هي:

  1. أنشئ سياسة جديدة (أو احصل على السياسة الحالية) لتحديث النظام.
  2. يمكنك ضبط فترات تجميد الحساب في السياسة من خلال الاتصال بالرقم setFreezePeriods().
  3. يمكنك ضبط السياسة وإيقاف الفترات مؤقتًا للجهاز من خلال الاتصال. setSystemUpdatePolicy()

ولأنّ فترة التجميد تتكرّر سنويًا، يتم تمثيل تاريخَي بدء الفترة وانتهائها بقيم الشهر واليوم. يجب أن يبدأ يوم البدء في بعد 60 يومًا على الأقل من نهاية أي فترة تعليق سابقة. المثال التالي يوضّح هذا العمود كيفية ضبط فترتَين لإيقاف التحديثات لسياسة تحديث النظام الحالية:

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 شباط (فبراير) عند احتساب مدة التجميد. الفترة.

التطوير والاختبار

أثناء تطوير واختبار ميزة تحديث النظام في وحدة التحكّم بسياسة الجهاز (DPC)، قد بحاجة إلى إنشاء العديد من فترات التوقف. لأنّ Android يتحقّق من فاصل زمني مدته 60 يومًا بين فترات إيقاف التحديثات السابقة، قد لا تتمكّن من ضبط فترة إيقاف جديدة. بدون محو سجل الفترات الماضية أولاً. لمحو سجلّ مدّة تجميد الجهاز، شغِّل الأمر التالي في واجهة Android Debug Bridge (adb):

adb shell dpm clear-freeze-period-record

يمكنك التأكد من أنّ الجهاز في فترة توقُّف عن العمل من خلال التحقّق من أنّ المستخدم تم إيقاف الواجهة لتحديثات النظام.

تحديثات نظام Google Play (Mainline)

يتم تلقائيًا تنزيل تحديثات نظام Google Play (المعروفة أيضًا باسم تحديثات Mainline)، ولكن يجب إعادة تشغيل الجهاز لتثبيتها. هذه فلن تؤدي التحديثات إلى إعادة تشغيل الجهاز تلقائيًا وبدلاً من ذلك، يتم تثبيتها على إعادة التشغيل التي بدأها المستخدم أو المشرف أو السياسة التالية. ستؤدي عمليات إعادة التشغيل من خلال سياسة تحديث النظام إلى تثبيت تحديث نظام Google/المصنّع الأصلي للجهاز المرتبط وأي تحديثات لنظام 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 Open Source Project.