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, sistem ve uygulama yazılımına kablosuz olarak (OTA) güncelleme alıp yükleyebilir. Android, cihaz kullanıcısına sistem güncellemesi yapıldığını bildirir kullanılabilir ve cihaz kullanıcısı güncellemeyi hemen ya da daha sonra yükleyebilir.

BT yöneticileri, DPC'nizi kullanarak cihaz kullanıcısı için 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 sistem güncellemelerini nasıl yönetebileceği gösterilmektedir. Profil sahipleri ise 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 bir güncelleme politikası ayarlama
Kritik dönemlerde OS 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. BT yöneticiniz, hangi cihazlarda bekleyen sistem güncellemeleri olduğunu kontrol etmesine yardımcı olabilir ve belki de cihaz kullanıcılarından kritik güncellemeleri hemen yüklemelerini isteyebilir.

Android 8.0 (API düzeyi 26) veya sonraki sürümleri çalıştıran cihaz sahipleri ve profil sahipleri, bir cihazda bekleyen sistem güncellemesi olup olmadığını kontrol edebilir. Cihaz güncelse null döndüren DevicePolicyManager.getPendingSystemUpdate() işlevini çağırın. Beklemede olan 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. Aşağıdaki örnekte, bekleyen bir güncellemenin cihazda ilk ne zaman kullanıma sunulduğunu nasıl öğrenebileceğiniz gösterilmektedir:

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

Android sistemi, kullanıma sunulan güncellemeler hakkında cihaz sahiplerini bilgilendirir. Android 8.0 veya sonraki sürümlerde sistem, profil sahiplerini de bilgilendirir.

DeviceAdminReceiver alt sınıfınızda onSystemUpdatePending() geri çağırma işlevini geçersiz kılın. Herhangi bir teknik numaralı telefonu arayın. Sistem, tek bir güncelleme için bu yöntemi birden fazla kez çağırabilir. Bu nedenle, yanıt vermeden önce güncellemenin durumunu kontrol edin. Geri arama sırasında sistem güncellemesi hakkında daha fazla bilgi edinmek için getPendingSystemUpdate() numaralı telefonu arayın. 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 olduğunda (ör. tümüyle yönetilen cihazlardaki iş profilleri) geri arama hem cihaz sahibine hem de profil sahibine gönderilir.

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üncellemeleri kullanıma sunulduğu anda (kullanıcı etkileşimi olmadan) yüklenir. Bu politika türü ayarlandığında, ertelenmiş veya bakım aralığı bekleyen bekleyen tüm güncellemeler hemen yüklenir.
Aralıklı
Sistem güncellemelerini günlük bakım sırasında yükler (kullanıcı etkileşimi olmadan). Yeni bir zaman aralıklı politika oluştururken günlük bakım döneminin başlangıç ve bitiş zamanını günün dakikaları olarak ayarlayın.
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. Bu dönem, sistem güncellemeyi ilk kez ertelediğinde başlar ve yeni erteleme politikaları belirlemek bu dönemi uzatmaz.

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 örnekleri oluşturulduktan sonra değiştirilemez. Bir cihazın güncellemeleri ne zaman yükleyeceğini değiştirmek için yeni bir politika oluşturabilir ve ayarlayabilirsiniz. Bir politikayı cihazdan kaldırmak için setSystemUpdatePolicy() işlevini çağırın ve null bağımsız değişkenini policy bağımsız değişkeni olarak iletin. İTŞ'niz bir politikayı kaldırdıktan sonra cihaz kullanıcısı, mevcut sistem güncellemeleriyle ilgili bildirimleri görür.

Uygulamalar, cihazın mevcut politikasını almak için getSystemUpdatePolicy() çağrısı yapabilir. Bu yöntem null değerini döndürürse bu, politika şu anda ayarlanmamış.

Dönemleri dondurma

Cihaz sahipleri, tatiller veya yoğun dönemler gibi kritik dönemlerde işletim sistemi sürümünü dondurmak için 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 bildirim almaz.
  • İşletim sisteminde sistem güncellemeleri yüklenmez.
  • 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 önemli güncellemeleri almasını engelleyebilir.

Şekil 1. Bir cihaz için iki dondurma dönemi ayarlandı
Yılda 60 günlük tamponlarla iki dondurma dönemi 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 dönemi ayarlama

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. 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().

Dondurma dönemi her yıl tekrarlandığı için dönemin başlangıç ve bitiş tarihleri 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 ö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:

  • Dondurma dönemi 90 günden uzun olamaz.
  • 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ıllar

Android, dondurma dönemlerini hesaplamak için ISO 8601 takvimini (Gregoryen takvimi olarak da bilinir) kullanır ve artık yılları yoksayar. Bu durumda 29 Şubat geçerli bir tarih olarak tanınmaz ve 28 Şubat gibi değerlendirilir. 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şturması gerekir. Android, geçmiş dondurma dönemleri arasında 60 günlük bir aralık olup olmadığını kontrol ettiğinden, önce geçmiş dönemlerin kaydını temizlemeden yeni bir dondurma dönemi ayarlayamayabilirsiniz. Cihazın donma süresi kaydını silmek için Android Hata Ayıklama Köprüsü (adb) kabuğunda aşağıdaki komutu çalıştırın:

adb shell dpm clear-freeze-period-record

Sistem güncellemeleri için kullanıcı arayüzünün devre dışı olup olmadığını kontrol ederek bir cihazın dondurma döneminde olduğunu onaylayabilirsiniz.

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, sorunlu bir Google Play sistem güncellemesi yüklemesi nedeniyle cihaz durumunu kurtarmak için Google Play sistem güncellemesi geri alma (GPSUR) aracı kullanılabilir. Veri kaybına neden olabileceğinden bu araç, ileri düzey kullanıcılar tarafından veya destek ekibi tarafından yönlendirildiğinde kullanılmalıdır. GPSUR aracını nasıl kullanacağınız aşağıda açıklanmıştır:

  1. Makinenizde Android Debug Bridge (adb) çalışıyorsa geri alma işlemini etkilememesi için devam etmeden önce adb hizmetini durdurun. 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 modal penceresindeki uyarıları okuyup Onayla'yı tıklayın.
  10. Geri alma işleminin tamamlanmasını bekleyin. İşlem tamamlandığında Geri Alma Başarılı modal penceresi gösterilir ve cihaz yeniden başlatılır. Artık cihazınızın fişini çekebilirsiniz.

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