Sistem güncellemelerini yönetme

Bu geliştirici kılavuzunda, cihaz politikası denetleyicinizin (DPC) Android sistem güncellemelerini cihaz kullanıcısı adına yönetebilir.

Giriş

Android cihazlar sisteme kablosuz (OTA) güncellemeler alıp yükleyebilir ve uygulama yazılımıdır. Android, cihaz kullanıcısına sistem güncellemesi yapıldığını bildirir kullanılabilir ve cihaz kullanıcısı güncellemeyi hemen veya daha sonra yükleyebilir.

BT yöneticisi, DPC'nizi kullanarak cihaz kullanıcısının sistem güncellemelerini yönetebilir. DPC'ler tümüyle yönetilen bir cihaza (cihaz sahibi olarak adlandırılır) veya bir iş profiline sahip olabilirler (profil sahibi olarak adlandırılır). Tablo 1'de, cihaz sahiplerinin sistemi nasıl yönetebileceği gösterilmektedir güncellemelerine ilişkin bir bildirim alırsınız. Ancak profil sahipleri yalnızca sistem güncellemeleriyle ilgili bilgileri bildirebilir.

Tablo 1: DPC'lerin kullanabileceği görevler, sahip moduna bağlıdır

Görev Cihaz sahibi Profil sahibi
Bekleyen sistem güncellemelerini kontrol etme
Yeni sistem güncellemeleri kullanıma sunulduğunda geri çağırma alın
Android'in sistem güncellemelerini ne zaman yükleyeceğini kontrol etmek için yerel güncelleme politikası ayarlama
Kritik dönemlerde işletim sistemi sürümünü dondurma

Bekleyen güncellemeleri kontrol etme

Bekleyen güncelleme, henüz yüklenmemiş bir cihaza yönelik sistem güncellemesidir. DPC'niz, BT yöneticilerinin bekleyen sistem güncellemelerinin olup olmadığını kontrol etmesine yardımcı olabilir. cihaz kullanıcılarından kritik güncellemeleri derhal yüklemelerini isteyebiliriz.

Android 8.0 (API düzeyi 26) veya sonraki sürümleri çalıştıran cihaz sahipleri ve profil sahipleri cihazın beklemede olan bir sistem güncellemesi olup olmadığını kontrol edebilir. Telefonla arama DevicePolicyManager.getPendingSystemUpdate() (cihaz güncelse null değerini döndürür.) Bekleyen bir sistem güncellemesi varsa yöntem, güncellemeyle ilgili bilgileri döndürür.

Bekleyen güncelleme hakkında daha fazla bilgi

getPendingSystemUpdate() numaralı telefonu aradıktan sonra, iade edilen öğeleri inceleyebilirsiniz Beklemedeki güncelleme hakkında daha fazla bilgi edinmek için SystemUpdateInfo değeri. İlgili içeriği oluşturmak için kullanılan aşağıdaki örnekte, bekleyen bir güncellemenin ilk ne zaman olduğunu nasıl öğrenebileceğiniz gösterilmektedir cihaz tarafından kullanılabilir:

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));
}

Sistem geri çağırma işlevleri

Bir güncelleme kullanıma sunulduğunda Android sistemi, cihaz sahiplerini yeni güncellemeyi gözden geçirin. Android 8.0 veya sonraki sürümlerde sistem, profil sahiplerini de bilgilendirir.

DeviceAdminReceiver alt sınıfınızda onSystemUpdatePending() geri arama. Herhangi bir teknik numaralı telefonu arayın. Sistem bu durumu tek bir güncelleme için bu yöntemi birden fazla kez çağırın. Bu nedenle, güncellemenin durumunu kontrol edin inceleyin. getPendingSystemUpdate() numaralı telefonu arayarak olduğunu varsayalım. Aşağıdaki örnekte bunu nasıl yapabileceğiniz gösterilmektedir:

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.
    // ...
  }
}

Bir sistemde birden fazla DPC varsa (örneğin, tümüyle yönetilen iş profilleri) cihaz sahibi ve profil sahibi geri arama alır.

Politikaları güncelleme

Cihaz sahibi, yerel bir sistem ayarlayarak güncellemelerin ne zaman yükleneceğini kontrol edebilir güncelleme politikası. Sistem güncelleme politikası üç türden biri olabilir:

Otomatik
Sistem güncellemelerini alındıkları anda yükler kullanılabilir (kullanıcı etkileşimi olmadan). Bu politika türünün ayarlanması, bekleyen tüm güncellemeleri hemen yükler ertelenebilir veya bakım dönemini bekleyebilir.
Aralıklı
Sistem güncellemelerini günlük bakım sırasında yükler (kullanıcı etkileşimi olmadan). Günlük bakım döneminin başlangıcını ve bitişini yeni pencereli bir politika oluştururken de kullanılır.
Ertelendi
Sistem güncellemelerinin yüklenmesini 30 gün erteler. 30 günden sonra süresi sona erdiğinde sistem, cihaz kullanıcısının güncellemeyi yüklemesini ister.

Erteleme dönemleri

Sistem, her güncellemeyi bir 30 günlük ertelemeyle sınırlandırır. Söz konusu dönem, sistem öncelikle güncellemeyi erteler ve yeni erteleme politikaları süreyi uzatabilirsiniz.

Android, ertelemenin yanı sıra diğer bağlantı olmaması, yetersiz disk alanı veya düşük pil gibi nedenler olabilir.

Farklı bir güncelleme olursa sistem, 30 günlük erteleme zamanlayıcısını sıfırlar. kontrol edilebilir ve BT yöneticilerine birleşik sistemi deneme olanağı verir. güncellemelerine göz atın. Yeni bir güncelleme yapılmazsa 30 gün geçtikten sonra, sistem bekleyen tüm güncellemeleri yüklemek için kullanılır. Daha sonra, yeni bir sistem güncellemesi 30 günlük süre tekrar başlar.

Politika ayarlama

Güncelleme politikalarını Android 8.0 (API düzeyi 26) veya sonraki sürümlerde ayarlayabilirsiniz. Belirtmek için: cihazın sistem güncellemelerini yüklemesi gerektiğinde, Belirtilen üç türden birini kullanarak SystemUpdatePolicy bölümünü ziyaret edin. Politika belirlemek için cihaz sahibiniz DevicePolicyManager yöntemini kullanır setSystemUpdatePolicy() Aşağıdaki kod örneği bunu nasıl yapabileceğinizi gösterir. Pencereli politika örneği görmek için SystemUpdatePolicy belgelerini inceleyin.

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);

Politika örneklerini oluşturduktan sonra değiştiremezsiniz. Cihazın ne zaman yeni bir politika oluşturup ayarlayabilirsiniz. Bir politikayı bir cihazında policy bağımsız değişkeni olarak null ileten setSystemUpdatePolicy() çağrısı. DPC'niz bir politikayı kaldırdıktan sonra, cihaz kullanıcısı mevcut sistem güncellemelerinden yararlanabilirsiniz.

Uygulamalar almak için getSystemUpdatePolicy() numaralı telefonu arayabilir cihazın geçerli politikasına. Bu yöntem null değerini döndürürse bu, politika henüz belirlenmemiş olmalıdır.

Dönemleri dondurma

Tatil veya diğer yoğunluk gibi kritik dönemlerde işletim sistemi sürümünü dondurmak cihaz sahipleri, sistem güncellemelerini 90 güne kadar askıya alabilir. Bir Cihaz donma süresi içindeyse aşağıdaki şekilde davranır:

  • Cihaz, bekleyen sistem güncellemeleri hakkında herhangi bir bildirim almaz.
  • İşletim sisteminin sistem güncellemeleri yüklü değil.
  • Cihaz kullanıcıları, Ayarlar'da sistem güncellemelerini manuel olarak kontrol edemez.

Sistem, tanımlanmış herhangi bir dondurmanın ardından 60 günlük zorunlu bir tampon süresi uygular cihazın süresiz olarak donmasını önler. Unutmayın, sistem donuyor güncellemeler, cihazların kritik güncellemeleri almasını engelleyebilir.

Şekil 1. Bir cihaz için iki dondurma dönemi ayarlandı
60 günlük tamponlarla bir yıl içinde iki dondurma dönemini gösteren takvim.

Bir güncelleme politikasında dondurma dönemleri ayarlarsınız. Şu olmadan dondurma dönemleri ayarlayamazsınız: politika ayarlama. Cihaz, ayarladığınız dondurma dönemlerinin dışında olduğunda normal politika davranışı (otomatik, aralıklı veya ertelenmiş) geçerlidir.

Dondurma süresi nasıl ayarlanır?

Android 9 (API düzeyi 28) veya sonraki sürümlerde dondurma dönemleri ayarlayabilirsiniz. Cihaz sahip bir sistem güncelleme politikasında dondurma süresi belirleyerek politikayı ayarlamadan önce cihaz için. Adımlar şu şekildedir:

  1. Yeni bir sistem güncelleme politikası oluşturun (veya mevcut politikayı alın).
  2. Politikadaki dondurma sürelerini ayarlamak için şu çağrıyı kullanın: setFreezePeriods().
  3. Şu numarayı arayarak cihaz için politikayı ve dondurma dönemlerini ayarlayın: setSystemUpdatePolicy().

Dondurulma dönemi her yıl tekrarlandığından, dönemi ay ve gün değerleriyle temsil edilir. Başlangıç günü şu saatte başlamalıdır: dondurma döneminin bitiminden en az 60 gün sonra. Aşağıdaki örnek mevcut bir sistem güncelleme politikası için iki dondurma dönemini nasıl ayarlayabileceğinizi gösterir:

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 ...
}

Hem başlangıç günü hem de bitiş günü dahildir. Başlangıç günü daha büyükse gün içinde (örneğin, önceki örnekte winterSale) olduğu gibi, sonraki yıla uzanır.

Dondur ayarını yaparken Android'in aşağıdaki gereksinimleri test etmesi gerekir:

  • Dondurulma süresi 90 günden uzun olmamalıdır.
  • Dondurulma dönemleri arasındaki aralık en az 60 gündür.
  • Dondurma dönemleri çakışmaz.
  • Yinelenen dondurma dönemleri yok.

Android, bir cihaz için sistem güncelleme politikası ayarlanırken bu testleri tekrarlar ve cihazın şu anki veya geçmişteki dondurma dönemlerini içerir.

Android, aşağıdaki durumlarda SystemUpdatePolicy.ValidationFailedException atar bunlardan hiçbiri başarısız olmaz.

Sistem güncelleme politikası nesnesinde daha önce ayarlanmış dondurma dönemlerinin listesini almak için: yüklü tüm uygulamalar arayabilir SystemUpdatePolicy.getFreezePeriods(). Aşağıdakiler örnek, cihazın donma dönemlerini günlüğe kaydetmek için bu yöntemi çağırır:

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());
  }
}

Artık yıl

Android, aşağıdaki amaçlarla ISO 8601 takvimini (Gregoryen takvimi de denir) kullanır: dondurma dönemlerini hesaplar ve artık yılları yok sayar. Bu, 29 Şubat'ın geçerli bir tarih olarak tanınmaz ve 28 Şubat gibi kabul edilir. Dolayısıyla, 29 Şubat donma süresi hesaplanırken sayılmaz geçerlidir.

Geliştirme ve test

DPC'nizin sistem güncelleme özelliğini geliştirip test ederken birçok dondurma dönemi oluşturması gerekir. Android, 60 günlük bir aralık kontrol ettiği için geçmiş dondurma dönemleri arasında geçiş yaparsanız yeni bir dondurma dönemi ayarlayamayabilirsiniz. geçmiş dönemlerin kaydını temizlemeden ilerler. Cihazın donmasını temizlemek için periyot kaydı için Android Debug Bridge'de aşağıdaki komutu çalıştırın (adb) kabuk:

adb shell dpm clear-freeze-period-record

Kullanıcının sistem güncellemeleri arayüzü devre dışı bırakıldı.

Google Play sistem güncellemeleri (Mainline)

Google Play sistem güncellemeleri (Mainline güncellemeleri olarak da adlandırılır) otomatik olarak indirilir ancak yüklenmesi için cihazın yeniden başlatılması gerekir. Bu güncellemeler otomatik yeniden başlatma işlemini tetiklemez ve bunun yerine Bir sonraki kullanıcı, yönetici veya politika tarafından başlatılan yeniden başlatma işlemi. Sistem tarafından tetiklenen yeniden başlatma işlemleri güncelleme politikası, ilişkili Google/OEM sistem güncellemesini ve daha önce indirilen Google Play sistem güncellemeleri.

Google Play sistem güncellemeleri, Ayarlar > Hakkında > Android Sürümü > Google Play sistem güncellemesi.

Ek kaynaklar

Sistem güncellemeleri hakkında daha fazla bilgi için Android Açık Kaynak Projesi'nin OTA'sını okuyun. Güncellemeler dokümanları.