Panduan developer ini menjelaskan bagaimana pengendali kebijakan perangkat (DPC) Anda dapat mengelola update sistem Android atas nama pengguna perangkat.
Pengantar
Perangkat Android dapat menerima dan menginstal update over the air (OTA) ke sistem dan perangkat lunak aplikasi. Android memberi tahu pengguna perangkat bahwa update sistem tersedia dan pengguna perangkat dapat segera menginstal pembaruan atau nanti.
Dengan menggunakan DPC, admin IT dapat mengelola update sistem untuk pengguna perangkat. DPC dapat memiliki perangkat terkelola sepenuhnya (disebut pemilik perangkat) atau dapat memiliki profil kerja (disebut pemilik profil). Tabel 1 menunjukkan cara pemilik perangkat mengelola sistem sementara pemilik profil hanya dapat melaporkan informasi tentang update sistem.
Tabel 1: Tugas yang tersedia untuk DPC bergantung pada mode pemilik
Memeriksa update yang tertunda
Update tertunda adalah update sistem untuk perangkat yang belum diinstal. DPC dapat membantu admin IT memeriksa perangkat mana yang memiliki update sistem yang tertunda—dan mungkin meminta pengguna perangkat untuk segera menginstal pembaruan penting.
Pemilik perangkat dan pemilik profil yang berjalan di Android 8.0 (level API 26) atau yang lebih tinggi
dapat memeriksa apakah perangkat memiliki
pembaruan sistem yang tertunda. Telepon
DevicePolicyManager.getPendingSystemUpdate()
yang menampilkan null
jika perangkat sudah diupdate. Jika update sistem tertunda,
metode akan menampilkan informasi tentang update.
Cari tahu info selengkapnya tentang update yang tertunda
Setelah memanggil getPendingSystemUpdate()
, Anda dapat memeriksa objek yang ditampilkan
Nilai SystemUpdateInfo
untuk mengetahui lebih lanjut update yang tertunda. Contoh
berikut menunjukkan cara mengetahui kapan update tertunda pertama kali
tersedia untuk perangkat:
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)); }
Callback sistem
Saat update tersedia, sistem Android akan memberi tahu pemilik perangkat tentang update baru. Di Android 8.0 atau yang lebih tinggi, sistem juga akan memberi tahu pemilik profil.
Di subclass DeviceAdminReceiver
Anda, ganti
Callback onSystemUpdatePending()
. Anda tidak perlu
untuk mendaftar atau mengiklankan DPC agar menerima callback. Sistem mungkin
memanggil metode ini lebih dari sekali untuk satu update, jadi periksa status update
sebelum merespons. Panggil getPendingSystemUpdate()
untuk mengetahui informasi selengkapnya tentang
dalam callback. Contoh berikut menunjukkan cara Anda dapat melakukan ini:
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. // ... } }
Jika sistem memiliki lebih dari satu DPC, misalnya profil kerja di DPC yang terkelola sepenuhnya perangkat, pemilik perangkat dan pemilik profil akan menerima callback.
Perbarui kebijakan
Pemilik perangkat dapat mengontrol waktu penginstalan update dengan menyetel sistem lokal kebijakan pembaruan untuk perangkat. Kebijakan update sistem dapat berupa salah satu dari tiga jenis:
- Otomatis
- Menginstal update sistem segera setelah tersedia tersedia (tanpa interaksi pengguna). Menyetel jenis kebijakan ini akan segera menginstal update tertunda yang mungkin ditunda atau menunggu masa pemeliharaan.
- Berjendela
- Menginstal update sistem selama pemeliharaan harian periode (tanpa interaksi pengguna). Tetapkan awal dan akhir masa pemeliharaan harian, sebagai menit hari, saat membuat kebijakan jendela baru.
- Ditunda
- Menunda penginstalan update sistem selama 30 hari. Setelah 30 hari berakhir, sistem akan meminta pengguna perangkat untuk menginstal pembaruan.
Periode penundaan
Sistem membatasi setiap update ke satu penundaan 30 hari. Periode dimulai ketika sistem menunda pembaruan terlebih dahulu dan menetapkan kebijakan penundaan baru tidak akan memperpanjang periode.
Selain penundaan, Android mungkin tidak dapat menginstal update untuk alasan seperti tidak ada konektivitas, kapasitas {i>disk<i} tidak cukup, atau daya baterai lemah.
Sistem akan mereset timer penundaan 30 hari jika pembaruan yang dilakukan berbeda yang tersedia selama periode tersebut—memberikan admin IT kesempatan untuk mencoba sistem pembaruan. Setelah 30 hari berlalu tanpa update baru, sistem akan meminta pengguna untuk menginstal semua pembaruan yang tertunda. Kemudian, ketika pembaruan sistem baru menjadi tersedia, periode 30 hari akan dimulai lagi.
Cara menetapkan kebijakan
Anda dapat menyetel kebijakan update di Android 8.0 (level API 26) atau yang lebih baru. Untuk menentukan
ketika perangkat harus menginstal update sistem, buat instance
SystemUpdatePolicy
menggunakan salah satu dari tiga jenis yang diuraikan
di atas. Untuk menetapkan kebijakan, pemilik perangkat Anda memanggil metode DevicePolicyManager
setSystemUpdatePolicy()
. Kode berikut
contoh menunjukkan bagaimana
Anda dapat melakukannya. Untuk melihat contoh {i>windowed-policy<i}, lihat
dokumentasi 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);
Instance kebijakan tidak dapat diubah setelah Anda membuatnya. Untuk mengubah kapan perangkat
menginstal update, Anda dapat membuat dan menetapkan kebijakan baru. Untuk menghapus kebijakan dari
perangkat, panggil setSystemUpdatePolicy()
yang meneruskan null
sebagai argumen policy
.
Setelah DPC menghapus kebijakan, pengguna perangkat akan melihat notifikasi untuk
update sistem yang tersedia.
Aplikasi dapat memanggil getSystemUpdatePolicy()
untuk mendapatkan
kebijakan saat ini untuk perangkat. Jika metode ini menampilkan null
, ini berarti
kebijakan saat ini tidak disetel.
Periode pembekuan
Untuk membekukan versi OS selama periode kritis, seperti hari libur atau waktu sibuk lainnya, pemilik perangkat dapat menangguhkan update sistem hingga 90 hari. Saat perangkat berada dalam periode pembekuan, perilakunya adalah sebagai berikut:
- Perangkat tidak menerima notifikasi apa pun tentang update sistem yang tertunda.
- Update sistem OS tidak diinstal.
- Pengguna perangkat tidak dapat memeriksa update sistem secara manual di Setelan.
Sistem memberlakukan masa tenggang selama 60 hari wajib setelah pembekuan yang ditentukan periode untuk mencegah pembekuan perangkat tanpa batas waktu. Ingat, sistem pembekuan dapat mencegah perangkat menerima pembaruan penting.
Anda menetapkan periode pembekuan pada kebijakan update. Anda tidak dapat menetapkan periode pembekuan tanpa menetapkan kebijakan. Jika perangkat berada di luar periode pembekuan yang Anda tetapkan, perilaku kebijakan normal (otomatis, terjadwal, atau ditunda) akan berlaku.
Cara menyetel periode pembekuan
Anda dapat menyetel periode pembekuan di Android 9 (level API 28) atau yang lebih baru. Perangkat pemilik menetapkan periode pembekuan pada kebijakan update sistem sebelum menyetel kebijakan untuk perangkat. Langkah-langkahnya adalah:
- Buat kebijakan update sistem baru (atau dapatkan versi saat ini).
- Tetapkan periode pembekuan pada kebijakan dengan memanggil
setFreezePeriods()
- Menyetel kebijakan dan membekukan periode untuk perangkat dengan memanggil
setSystemUpdatePolicy()
Karena periode pembekuan berulang setiap tahun, tanggal mulai dan akhir periode periode diwakili oleh nilai bulan dan nilai hari. Hari mulai harus dimulai pada setidaknya 60 hari setelah akhir periode pembekuan sebelumnya. Contoh berikut menunjukkan cara menetapkan dua periode pembekuan untuk kebijakan update sistem yang ada:
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 ... }
Hari mulai dan hari akhir bersifat inklusif. Jika hari mulai lebih besar
daripada hari terakhir (seperti winterSale
pada contoh sebelumnya), pembekuan
periode ini meluas hingga
tahun berikutnya.
Saat menyetel pembekuan periode pada kebijakan update sistem, Android menguji persyaratan berikut:
- Tidak ada periode pembekuan yang lebih dari 90 hari.
- Interval antara periode pembekuan minimal 60 hari.
- Periode pembekuan tidak tumpang tindih.
- Tidak ada periode pembekuan duplikat.
Saat menyetel kebijakan update sistem untuk perangkat, Android akan mengulangi pengujian ini dan termasuk periode pembekuan saat ini atau sebelumnya untuk perangkat.
Android akan menampilkan SystemUpdatePolicy.ValidationFailedException
saat
salah satu pengujian ini gagal.
Untuk mendapatkan daftar periode pembekuan yang sebelumnya
ditetapkan pada objek kebijakan update sistem,
semua aplikasi terinstal bisa memanggil
SystemUpdatePolicy.getFreezePeriods()
Contoh
berikut memanggil metode ini untuk mencatat periode pembekuan perangkat:
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()); } }
Tahun kabisat
Android menggunakan kalender ISO 8601 (juga disebut kalender Gregorian) untuk menghitung periode pembekuan dan mengabaikan tahun kabisat. Artinya bahwa tanggal 29 Februari tidak dikenal sebagai tanggal yang valid dan diperlakukan seolah-olah tanggal tersebut adalah 28 Februari. Oleh karena itu, 29 Februari tidak dihitung saat menghitung durasi pembekuan titik.
Pengembangan dan pengujian
Selagi Anda mengembangkan dan menguji fitur pembaruan sistem DPC, Anda mungkin perlu membuat banyak periode pembekuan. Karena Android memeriksa interval 60 hari antara periode pembekuan sebelumnya, Anda mungkin tidak dapat menetapkan periode pembekuan baru tanpa menghapus data periode sebelumnya terlebih dahulu. Untuk mengatasi pembekuan pada perangkat periode record, jalankan perintah berikut di Android Debug Bridge {i>shell<i} (adb):
adb shell dpm clear-freeze-period-record
Anda dapat mengonfirmasi bahwa perangkat berada dalam periode pembekuan dengan memeriksa bahwa pengguna antarmuka untuk pembaruan sistem dinonaktifkan.
Update Sistem Google Play (Utama)
Update Sistem Google Play (juga disebut update Utama) akan otomatis didownload, tetapi perangkat harus dimulai ulang untuk menginstalnya. Ini pembaruan tidak akan memicu {i>reboot<i} otomatis dan pembaruan itu diinstal di memulai ulang pengguna, admin, atau kebijakan berikutnya. Mulai ulang yang dipicu oleh sistem akan menginstal update sistem Google/OEM terkait dan setiap update Sistem Google Play yang telah didownload sebelumnya.
Update Sistem Google Play juga dapat diinstal secara manual dengan membuka Setelan > Tentang > Versi Android > Update sistem Google Play.
Me-roll back update
Dalam beberapa kasus, alat Rollback Update Sistem Google Play (GPSUR) dapat digunakan untuk memulihkan status perangkat karena Update Sistem Google Play yang bermasalah penginstalan. Alat ini harus digunakan oleh pengguna tingkat lanjut atau ketika diarahkan untuk melakukannya sehingga oleh staf pendukung karena dapat mengakibatkan kehilangan data. Berikut cara menggunakan GPSUR alat:
- Jika Anda memiliki Android Debug Bridge (adb) yang berjalan di komputer, hentikan
layanan adb sebelum melanjutkan agar tidak mengganggu
proses rollback. Untuk menghentikan adb, jalankan
adb kill-server
. - Buka alat GPSUR.
- Klik Allow ADB access untuk mengizinkan alat berkomunikasi dengan pengujian Anda perangkat melalui adb.
- Klik Tambahkan perangkat baru.
- Pilih perangkat Anda dari daftar, lalu klik Connect. Daftar ini mungkin tidak berisi nama lengkap perangkat.
- Pada layar perangkat, pilih Selalu izinkan dari komputer ini dan klik OK untuk menerima koneksi proses debug USB.
- Pilih perangkat yang terhubung di browser Anda.
- Teks tombol di halaman harus beralih dari Tidak Ada Rollback Tersedia menjadi Rollback Update Terbaru jika ada rollback yang tersedia di perangkat Anda. Klik Rollback Update Terbaru.
- Baca peringatan di modal Konfirmasi Rollback, lalu klik Konfirmasi.
- Tunggu hingga rollback selesai. Setelah selesai, pesan Rollback Berhasil akan muncul dan perangkat akan dimulai ulang. Sekarang aman untuk mencabut perangkat seluler.
Referensi lainnya
Untuk mempelajari update sistem lebih lanjut, baca OTA Project Open Source Android Update.