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 olduğunu bildirir 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 iş profiline (profil sahibi olarak adlandırılır) sahip olabilir. 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 arama alma
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

Beklemede olan 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.

Beklemedeki 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 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. PBM'nizin geri aramayı alması için kayıt yaptırmanız veya reklam yayınlamanız gerekmez. 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 aralığının 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ünlük süre sona erdiğinde sistem, cihaz kullanıcısından 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 şu anda ayarlanmamış.

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. Dondurma dönemindeki bir cihaz 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, cihazın süresiz olarak dondurulmasını önlemek için tanımlanan dondurma dönemlerinden sonra zorunlu bir 60 günlük ara dönem uygular. Sistem güncellemelerini dondurmanın, cihazların kritik güncellemeleri almasını engelleyebileceğini unutmayın.

Ş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. Politika belirlemeden dondurma dönemleri ayarlayamazsınız. 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 belirlemeden önce cihaz için. Adımlar şu şekildedir:

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

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

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.

Yüklü tüm uygulamalar, daha önce bir sistem güncelleme politikası nesnesinde ayarlanan dondurma dönemlerinin listesini almak için SystemUpdatePolicy.getFreezePeriods() işlevini çağırabilir. 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. Bu nedenle, dondurma döneminin süresi hesaplanırken 29 Şubat dikkate alınmaz.

Geliştirme ve test

DPC'nizin sistem güncelleme özelliğini geliştirip test ederken birçok dondurma dönemi oluşturmanız gerekebilir. 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 bölümüne giderek manuel olarak da yüklenebilir.

Güncellemeyi geri alma

Bazı durumlarda Google Play Sistem Güncellemesi Geri Alma (GPSUR) aracı, Sorunlu bir Google Play Sistem Güncellemesi nedeniyle cihaz durumunu kurtarmak için kullanıldı teşekkür ederiz. Bu araç ileri düzey kullanıcılar tarafından veya kullanıcıya yönlendirildiğinde kullanılmalıdır bu nedenle veri kaybına neden olabileceği için GPSUR şu şekilde kullanılır: araç:

  1. Makinenizde Android Debug Bridge (adb) çalışıyorsa uygulamayı durdurun. adb hizmetini kullanmaya devam etmeden önce, geri alabilir. Adb'yi durdurmak için adb kill-server komutunu çalıştırın.
  2. GPSUR aracını açın.
  3. Aracın adb üzerinden test cihazınızla iletişim kurmasına izin vermek için ADB erişimine izin ver'i tıklayın.
  4. Yeni cihaz ekle'yi tıklayın.
  5. Listeden cihazınızı seçin ve Bağlan'ı tıklayın. Bu listede tam cihaz adını içermelidir.
  6. Cihazınızın ekranında Bu bilgisayardan her zaman izin ver'i seçin ve USB hata ayıklama bağlantısını kabul etmek için Tamam'ı tıklayın.
  7. Tarayıcınızda bağlı cihazı seçin.
  8. Sayfadaki düğme metni, Geri Alma Yok yerine Cihazınızda geri alma özelliği varsa Son Güncellemeleri Geri Al. Son Güncellemeleri Geri Al'ı tıklayın.
  9. Geri Almayı Onayla iletişim kutusundaki uyarıları okuyup Onayla'yı tıklayın.
  10. Geri alma işleminin tamamlanmasını bekleyin. İşlem tamamlandığında Geri Alma Başarılı kalıcı pencere görünür ve cihaz yeniden başlatılır. Artık cihazınızı güvenli bir şekilde çıkarabilirsiniz olanak tanır.

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