Pembaruan sistem non-A/B

Pada perangkat Android lama tanpa partisi A/B, ruang flash biasanya berisi partisi berikut:

boot
Berisi kernel Linux dan sistem file root minimal (dimuat ke dalam disk RAM). Ini memasang sistem dan partisi lain dan memulai runtime yang terletak di partisi sistem.
sistem
Berisi aplikasi sistem dan perpustakaan yang memiliki kode sumber yang tersedia di Android Open Source Project (AOSP). Selama pengoperasian normal, partisi ini dipasang hanya-baca; isinya hanya berubah selama pembaruan OTA.
penjual
Berisi aplikasi sistem dan perpustakaan yang tidak memiliki kode sumber yang tersedia di Android Open Source Project (AOSP). Selama pengoperasian normal, partisi ini dipasang hanya-baca; isinya hanya berubah selama pembaruan OTA.
data pengguna
Menyimpan data yang disimpan oleh aplikasi yang diinstal oleh pengguna, dll. Partisi ini biasanya tidak disentuh oleh proses pembaruan OTA.
cache
Area penyimpanan sementara yang digunakan oleh beberapa aplikasi (mengakses partisi ini memerlukan izin aplikasi khusus) dan untuk penyimpanan paket pembaruan OTA yang diunduh. Program lain menggunakan ruang ini dengan harapan file dapat hilang kapan saja. Beberapa instalasi paket OTA mungkin menyebabkan partisi ini terhapus seluruhnya. Cache juga berisi log pembaruan dari pembaruan OTA.
pemulihan
Berisi sistem Linux lengkap kedua, termasuk kernel dan biner pemulihan khusus yang membaca sebuah paket dan menggunakan isinya untuk memperbarui partisi lain.
lain-lain
Partisi kecil yang digunakan oleh pemulihan untuk menyimpan beberapa informasi tentang apa yang dilakukannya jika perangkat di-restart saat paket OTA sedang diterapkan.

Kehidupan pembaruan OTA

Pembaruan OTA pada umumnya berisi langkah-langkah berikut:

  1. Perangkat melakukan pemeriksaan rutin dengan server OTA dan diberi tahu tentang ketersediaan pembaruan, termasuk URL paket pembaruan dan string deskripsi untuk ditampilkan kepada pengguna.
  2. Perbarui unduhan ke cache atau partisi data, dan tanda tangan kriptografinya diverifikasi terhadap sertifikat di /system/etc/security/otacerts.zip . Pengguna diminta untuk menginstal pembaruan.
  3. Perangkat di-boot ulang ke mode pemulihan, yang mana kernel dan sistem di partisi pemulihan di-boot, bukan kernel di partisi boot.
  4. Biner pemulihan dimulai oleh init. Ia menemukan argumen baris perintah di /cache/recovery/command yang mengarahkannya ke paket yang diunduh.
  5. Pemulihan memverifikasi tanda tangan kriptografi paket terhadap kunci publik di /res/keys (bagian dari disk RAM yang terdapat dalam partisi pemulihan).
  6. Data diambil dari paket dan digunakan untuk memperbarui partisi boot, sistem, dan/atau vendor jika diperlukan. Salah satu file baru yang tersisa di partisi sistem berisi konten partisi pemulihan baru.
  7. Perangkat reboot secara normal.
    1. Partisi boot yang baru diperbarui dimuat, lalu dipasang dan mulai mengeksekusi binari di partisi sistem yang baru diperbarui.
    2. Sebagai bagian dari startup normal, sistem memeriksa konten partisi pemulihan terhadap konten yang diinginkan (yang sebelumnya disimpan sebagai file di /system ). Mereka berbeda, sehingga partisi pemulihan di-reflash dengan konten yang diinginkan. (Pada boot berikutnya, partisi pemulihan sudah berisi konten baru, jadi tidak diperlukan reflash.)

Pembaruan sistem selesai! Log pembaruan dapat ditemukan di /cache/recovery/last_log. # .

Perbarui paket

Paket pembaruan adalah file .zip yang berisi biner META-INF/com/google/android/update-binary yang dapat dieksekusi. Setelah memverifikasi tanda tangan pada paket, recovery mengekstrak biner ini ke /tmp dan menjalankan biner tersebut, meneruskan argumen berikut:

  • Perbarui nomor versi API biner . Jika argumen yang diteruskan ke biner pembaruan berubah, jumlah ini bertambah.
  • Deskriptor file dari pipa perintah . Program pembaruan dapat menggunakan pipa ini untuk mengirim perintah kembali ke biner pemulihan, sebagian besar untuk perubahan UI, seperti menunjukkan kemajuan kepada pengguna.
  • Nama file paket pembaruan file .zip .

Paket pembaruan dapat menggunakan biner apa pun yang tertaut secara statis sebagai biner pembaruan. Alat konstruksi paket OTA menggunakan program pembaru ( bootable/recovery/updater ), yang menyediakan bahasa skrip sederhana yang dapat melakukan banyak tugas instalasi. Anda dapat mengganti biner lain yang berjalan di perangkat.

Untuk detail tentang biner pembaru, 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 besar adalah konversi semua fungsi khusus perangkat dari serangkaian fungsi C dengan nama yang telah ditentukan sebelumnya menjadi objek C++. Tabel berikut mencantumkan fungsi lama dan metode baru yang memiliki tujuan yang kira-kira setara:

fungsi C metode C++
perangkat_pemulihan_mulai() Perangkat::RecoveryStart()
perangkat_toggle_display()
perangkat_reboot_sekarang()
UI Pemulihan::CheckKey()
(juga RecoveryUI::IsKeyPressed())
perangkat_handle_key() Perangkat::HandleMenuKey()
perangkat_perform_action() Perangkat::InvokeMenuItem()
perangkat_penghapusan_data() Perangkat::WipeData()
perangkat_ui_init() UI Pemulihan Layar::Init()

Konversi fungsi lama ke metode baru seharusnya cukup mudah. Jangan lupa untuk menambahkan fungsi make_device() baru untuk membuat dan mengembalikan instance subkelas Perangkat baru Anda.