Update non-AB adalah metodologi OTA yang tidak digunakan lagi dan digunakan oleh Perangkat Android lama (Android 6 dan yang lebih lama). Perangkat ini memiliki partisi pemulihan khusus yang berisi software yang diperlukan untuk mengekstrak paket update yang didownload dan menerapkan update ke partisi lainnya.
Pada perangkat Android lama tanpa partisi A/B, ruang flash biasanya berisi partisi berikut:
- booting
- Berisi kernel Linux dan sistem file root minimal (dimuat ke disk RAM). File ini memasang sistem dan partisi lainnya serta memulai runtime yang terletak di partisi sistem.
- system
- Berisi aplikasi sistem dan library yang memiliki kode sumber yang tersedia di Project Open Source Android (AOSP). Selama operasi normal, partisi ini dipasang sebagai hanya baca; kontennya hanya berubah selama update OTA.
- vendor
- Berisi aplikasi dan library sistem yang tidak memiliki kode sumber yang tersedia di Proyek Open Source Android (AOSP). Selama operasi normal, partisi ini dipasang sebagai hanya baca; kontennya hanya berubah selama update OTA.
- userdata
- Menyimpan data yang disimpan oleh aplikasi yang diinstal oleh pengguna, dll. Partisi ini biasanya tidak disentuh oleh proses update OTA.
- cache
- Area penyimpanan sementara yang digunakan oleh beberapa aplikasi (mengakses partisi ini memerlukan izin aplikasi khusus) dan untuk penyimpanan paket update OTA yang didownload. Program lain menggunakan ruang ini dengan harapan bahwa file dapat hilang kapan saja. Beberapa penginstalan paket OTA dapat menyebabkan partisi ini dihapus sepenuhnya. Cache juga berisi log update dari update OTA.
- pemulihan
- Berisi sistem Linux lengkap kedua, termasuk kernel dan biner pemulihan khusus yang membaca paket dan menggunakan kontennya untuk mengupdate partisi lainnya.
- misc
- Partisi kecil yang digunakan oleh pemulihan untuk menyimpan beberapa informasi tentang apa yang dilakukannya jika perangkat dimulai ulang saat paket OTA diterapkan.
Durasi update OTA
Update OTA standar berisi langkah-langkah berikut:
- Perangkat melakukan check in reguler dengan server OTA dan diberi tahu tentang ketersediaan update, termasuk URL paket update dan string deskripsi untuk ditampilkan kepada pengguna.
-
Memperbarui download ke cache atau partisi data, dan tanda tangan kriptografisnya diverifikasi
terhadap sertifikat di
/system/etc/security/otacerts.zip
. Pengguna diminta untuk menginstal update. - Perangkat dimulai ulang ke mode pemulihan, dengan kernel dan sistem di partisi pemulihan di-booting, bukan kernel di partisi booting.
-
Biner pemulihan dimulai oleh init. Fungsi ini menemukan argumen command line di
/cache/recovery/command
yang mengarahkannya ke paket yang didownload. -
Pemulihan memverifikasi tanda tangan kriptografi paket dengan kunci publik di
/res/keys
(bagian dari disk RAM yang terdapat di partisi pemulihan). - Data diambil dari paket dan digunakan untuk mengupdate partisi booting, sistem, dan/atau vendor sesuai kebutuhan. Salah satu file baru yang tersisa di partisi sistem berisi konten partisi pemulihan baru.
-
Perangkat dimulai ulang seperti biasa.
- Partisi booting yang baru diupdate dimuat, dan di-mount serta mulai mengeksekusi biner di partisi sistem yang baru diupdate.
-
Sebagai bagian dari startup normal, sistem akan memeriksa konten partisi pemulihan
dengan konten yang diinginkan (yang sebelumnya disimpan sebagai file di
/system
). Keduanya berbeda, sehingga partisi pemulihan di-flash ulang dengan konten yang diinginkan. (Pada booting berikutnya, partisi pemulihan sudah berisi konten baru, sehingga tidak perlu melakukan flash ulang.)
Update sistem selesai. Log update dapat ditemukan di
/cache/recovery/last_log.#
.
Mengupdate paket
Paket update adalah file .zip
yang berisi META-INF/com/google/android/update-binary
biner
yang dapat dieksekusi. Setelah memverifikasi tanda tangan pada
paket, recovery
mengekstrak biner ini ke /tmp
dan menjalankan biner,
dengan meneruskan argumen berikut:
- Memperbarui nomor versi API biner. Jika argumen yang diteruskan ke update biner berubah, angka ini akan bertambah.
- Deskriptor file pipa perintah. Program update dapat menggunakan pipe ini untuk mengirim perintah kembali ke biner pemulihan, sebagian besar untuk perubahan UI, seperti menunjukkan progres kepada pengguna.
-
Nama file
.zip
paket update.
Paket update dapat menggunakan biner yang ditautkan secara statis sebagai biner update. Alat pembuatan paket
OTA menggunakan program updater (bootable/recovery/updater
), yang
menyediakan bahasa skrip sederhana yang dapat melakukan banyak tugas penginstalan. Anda dapat mengganti
biner lain yang berjalan di perangkat.
Untuk mengetahui detail tentang biner updater, sintaksis edify, dan fungsi bawaan, lihat Di Dalam Paket OTA.
Bermigrasi dari rilis sebelumnya
Saat bermigrasi dari rilis Android 2.3/3.0/4.0, perubahan utamanya adalah konversi semua fungsi khusus perangkat dari kumpulan fungsi C dengan nama yang telah ditentukan ke objek C++. Tabel berikut mencantumkan fungsi lama dan metode baru yang memiliki tujuan yang kurang lebih setara:
Fungsi C | Metode C++ |
---|---|
device_recovery_start() | Device::RecoveryStart() |
device_toggle_display() device_reboot_now() |
RecoveryUI::CheckKey() (juga RecoveryUI::IsKeyPressed()) |
device_handle_key() | Device::HandleMenuKey() |
device_perform_action() | Device::InvokeMenuItem() |
device_wipe_data() | Device::WipeData() |
device_ui_init() | ScreenRecoveryUI::Init() |
Konversi fungsi lama ke metode baru seharusnya cukup mudah. Jangan lupa
untuk menambahkan fungsi make_device()
baru guna membuat dan menampilkan instance subclass Perangkat baru Anda.