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

يوضّح دليل المطوِّر هذا كيفية تنفيذ وحدة التحكّم بسياسة الجهاز (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) Shell:

adb shell dpm clear-freeze-period-record

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

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

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

يمكن أيضًا تثبيت تحديثات نظام Google Play يدويًا من خلال الانتقال إلى الإعدادات > لمحة عن > إصدار Android > تحديث نظام Google Play

مصادر إضافية

لمعرفة المزيد من المعلومات عن تحديثات النظام، يُرجى الاطّلاع على برنامج عبر الهواء في "مشروع مفتوح المصدر لنظام Android". مستندات التعديلات