Membangun paket OTA

Anda dapat menggunakan alat ota_from_target_files yang disediakan di build/make/tools/releasetools untuk mem-build paket OTA lengkap dan inkremental untuk perangkat yang menggunakan update sistem A/B atau update sistem non-A/B. Alat ini mengambil file target-files.zip yang dihasilkan oleh sistem build Android sebagai input.

Untuk perangkat yang menjalankan Android 11 atau yang lebih tinggi, Anda dapat membangun satu paket OTA untuk beberapa perangkat dengan SKU yang berbeda. Untuk melakukannya, Anda harus mengonfigurasi perangkat target untuk menggunakan sidik jari dinamis dan memperbarui metadata OTA untuk menyertakan nama dan sidik jari perangkat dalam entri pra- dan pascakondisi.

Android 8.0 tidak lagi menggunakan paket OTA berbasis file untuk perangkat non-A/B, yang harus menggunakan paket OTA berbasis blok. Untuk membuat paket OTA berbasis blok atau perangkat yang menjalankan Android 7.x atau yang lebih lama, teruskan opsi --block ke parameter ota_from_target_files.

Membuat update lengkap

Update lengkap adalah paket OTA yang berisi seluruh status akhir perangkat (partisi sistem, booting, dan pemulihan). Selama perangkat dapat menerima dan menerapkan paket, paket tersebut dapat menginstal build, terlepas dari status perangkat saat ini. Misalnya, perintah berikut menggunakan alat rilis untuk mem-build arsip target-files.zip untuk perangkat tardis.

. build/envsetup.sh && lunch tardis-eng
mkdir dist_output
make dist DIST_DIR=dist_output

make dist membangun paket OTA lengkap (di $OUT). File .zip yang dihasilkan berisi semua yang diperlukan untuk membuat paket OTA untuk perangkat tardis. Anda juga dapat membangun ota_from_target_files sebagai biner python dan memanggilnya untuk membuat paket lengkap atau inkremental.

ota_from_target_files dist_output/tardis-target_files.zip ota_update.zip

Jalur ota_from_target_files disiapkan di $PATH, dan biner python yang dihasilkan terletak di direktori out/.

ota_update.zip kini siap dikirim ke perangkat pengujian (semuanya ditandatangani dengan kunci pengujian). Untuk perangkat pengguna, buat dan gunakan kunci pribadi Anda sendiri seperti yang dijelaskan dalam Penandatanganan build untuk rilis.

Mem-build update inkremental

Update inkremental adalah paket OTA yang berisi patch biner untuk data yang sudah ada di perangkat. Paket dengan update inkremental biasanya lebih kecil karena tidak perlu menyertakan file yang tidak berubah. Selain itu, karena file yang diubah sering kali sangat mirip dengan versi sebelumnya, paket hanya perlu menyertakan enkode perbedaan antara kedua file.

Anda hanya dapat menginstal paket update inkremental di perangkat yang memiliki build sumber yang digunakan dalam membuat paket. Untuk mem-build update inkremental, Anda memerlukan file target_files.zip dari build sebelumnya (yang ingin diupdate dari) serta file target_files.zip dari build baru. Misalnya, perintah berikut menggunakan alat rilis untuk mem-build update inkremental untuk perangkat tardis.

ota_from_target_files -i PREVIOUS-tardis-target_files.zip dist_output/tardis-target_files.zip incremental_ota_update.zip

Build ini sangat mirip dengan build sebelumnya, dan paket update inkremental (incremental_ota_update.zip) jauh lebih kecil daripada update lengkap yang sesuai (sekitar 1 MB, bukan 60 MB).

Distribusikan paket inkremental hanya ke perangkat yang menjalankan build sebelumnya yang sama persis yang digunakan sebagai titik awal paket inkremental. Anda harus mem-flash image dalam PREVIOUS-tardis-target_files.zip atau PREVIOUS-tardis-img.zip (keduanya di-build dengan make dist, untuk di-flash dengan fastboot update), bukan image pada direktori PRODUCT_OUT (di-build dengan make, yang akan di-flash dengan fastboot flashall). Mencoba menginstal paket inkremental di perangkat dengan beberapa build lainnya akan menyebabkan error penginstalan. Jika penginstalan gagal, perangkat akan tetap dalam status kerja yang sama (menjalankan sistem lama); paket akan memverifikasi status sebelumnya dari semua file yang diupdate sebelum menyentuhnya, sehingga perangkat tidak di-upgrade setengah.

Untuk pengalaman pengguna terbaik, tawarkan update lengkap untuk setiap 3–4 update inkremental. Hal ini membantu pengguna mengikuti rilis terbaru dan menghindari urutan penginstalan yang lama dari update inkremental.

Membangun paket OTA untuk beberapa SKU

Android 11 atau yang lebih tinggi mendukung penggunaan satu paket OTA untuk beberapa perangkat dengan SKU yang berbeda. Untuk melakukannya, Anda harus mengonfigurasi perangkat target agar menggunakan sidik jari dinamis dan memperbarui metadata OTA (menggunakan alat OTA) untuk menyertakan nama dan sidik jari perangkat dalam entri kondisi pra dan pasca.

Tentang SKU

Format SKU adalah variasi dari nilai parameter build gabungan dan biasanya merupakan subset parameter build_fingerprint saat ini yang tidak dideklarasikan. OEM dapat menggunakan kombinasi parameter build apa pun yang disetujui CDD untuk SKU sekaligus menggunakan satu image untuk SKU tersebut. Misalnya, SKU berikut memiliki beberapa variasi:

SKU = <product><device><modifierA><modifierB><modifierC>
  • modifierA adalah tingkat perangkat (seperti Pro, Premium, atau Plus)
  • modifierB adalah variasi hardware (seperti radio)
  • modifierC adalah wilayah, yang dapat bersifat umum (seperti NA, EMEA, atau CHN ) atau spesifik per negara atau bahasa (seperti JPN, ENG, atau CHN)

Banyak OEM menggunakan satu gambar untuk beberapa SKU, lalu mendapatkan nama produk akhir dan sidik jari perangkat saat runtime setelah perangkat melakukan booting. Proses ini menyederhanakan proses pengembangan platform, sehingga perangkat dengan penyesuaian minor tetapi nama produk yang berbeda dapat berbagi gambar umum (seperti tardis dan tardispro).

Menggunakan sidik jari dinamis

Sidik jari adalah penyambungan parameter build yang ditentukan seperti ro.product.brand, ro.product.name, dan ro.product.device. Sidik jari perangkat berasal dari sidik jari partisi sistem dan digunakan sebagai ID unik gambar (dan byte) yang berjalan di perangkat. Untuk membuat sidik jari dinamis, gunakan logika dinamis dalam file build.prop perangkat untuk mendapatkan nilai variabel bootloader pada waktu booting perangkat, lalu gunakan data tersebut untuk membuat sidik jari dinamis untuk perangkat tersebut.

Misalnya, agar dapat menggunakan sidik jari dinamis untuk perangkat tardis dan tardispro, update file berikut seperti yang ditunjukkan di bawah ini.

  • Perbarui file odm/etc/build_std.prop agar berisi baris berikut.

    ro.odm.product.device=tardis
    
  • Perbarui file odm/etc/build_pro.prop agar berisi baris berikut.

    ro.odm.product.device=tardispro
    
  • Perbarui file odm/etc/build.prop agar berisi baris berikut.

    ro.odm.product.device=tardis
    import /odm/etc/build_${ro.boot.product.hardware.sku}.prop
    

Baris ini secara dinamis menetapkan nama perangkat, sidik jari, dan nilai ro.build.fingerprint berdasarkan nilai properti bootloader ro.boot.product.hardware.sku (yang bersifat hanya baca).

Memperbarui metadata paket OTA

Paket OTA berisi file metadata (META-INF/com/android/metadata) yang menjelaskan paket, termasuk prasyarat dan pascasyarat paket OTA. Misalnya, kode berikut adalah file metadata untuk paket OTA yang menargetkan perangkat tardis.

post-build=google/tardis/tardis:11/RP1A.200521.001/6516341:userdebug/dev-keys
post-build-incremental=6516341
post-sdk-level=30
post-security-patch-level=2020-07-05
post-timestamp=1590026334
pre-build=google/tardis/tardis:11/RP1A.200519.002.A1/6515794:userdebug/dev-keys
pre-build-incremental=6515794
pre-device=tardis

Nilai pre-device, pre-build-incremental, dan pre-build menentukan status yang harus dimiliki perangkat sebelum paket OTA dapat diinstal. Nilai post-build-incremental dan post-build menentukan status yang diharapkan di perangkat setelah paket OTA diinstal. Nilai kolom pre- dan post- berasal dari properti build yang sesuai berikut.

  • Nilai pre-device berasal dari properti build ro.product.device.
  • Nilai pre-build-incremental dan post-build-incremental berasal dari properti build ro.build.version.incremental.
  • Nilai pre-build dan post-build berasal dari properti build ro.build.fingerprint.

Di perangkat yang menjalankan Android 11 atau yang lebih tinggi, Anda dapat menggunakan tanda --boot_variable_file di alat OTA untuk menentukan jalur ke file yang berisi nilai variabel runtime yang digunakan dalam membuat sidik jari dinamis perangkat. Data tersebut kemudian digunakan untuk memperbarui metadata OTA agar menyertakan nama dan sidik jari perangkat dalam kondisi pre- dan post- (menggunakan karakter pipa | sebagai pemisah). Flag --boot_variable_file memiliki sintaksis dan deskripsi berikut.

  • Sintaksis: --boot_variable_file <path>
  • Deskripsi: Menentukan jalur ke file yang berisi kemungkinan nilai properti ro.boot.*. Digunakan untuk menghitung kemungkinan sidik jari runtime saat beberapa properti ro.product.* diganti oleh pernyataan impor. File ini mengharapkan satu properti per baris dengan setiap baris memiliki format berikut: prop_name=value1,value2.

Misalnya, jika propertinya adalah ro.boot.product.hardware.sku=std,pro, metadata OTA untuk perangkat tardis dan tardispro adalah seperti yang ditunjukkan di bawah.

post-build=google/tardis/tardis:11/<suffix>|google/tardis/tardispro:11/<suffix>
pre-build=google/tardis/tardis:11/<suffix>|google/tardis/tardispro:11/<suffix>
pre-device=tardis|tardispro

Untuk mendukung fungsi ini di perangkat yang menjalankan Android 10, lihat penerapan referensi. Daftar perubahan ini mengurai pernyataan import secara kondisional dalam file build.prop, yang memungkinkan penggantian properti dikenali dan tercermin dalam metadata OTA akhir.