Membangun paket OTA

Anda dapat menggunakan ota_from_target_files yang disediakan di build/make/tools/releasetools untuk membuat build penuh dan inkremental Paket OTA 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 baru, Anda dapat membangun satu paket OTA untuk beberapa perangkat dengan SKU yang berbeda. Melakukan hal ini memerlukan mengonfigurasi perangkat target untuk menggunakan sidik jari dinamis dan memperbarui metadata OTA untuk menyertakan perangkat dan sidik jari dalam entri pra- dan pascakondisi.

Android 8.0 menghentikan paket OTA berbasis file untuk perangkat non-A/B, sehingga harus sebagai gantinya, gunakan paket OTA berbasis blok. Kepada membuat paket OTA berbasis blok atau perangkat yang menjalankan Android 7.x atau lebih rendah, teruskan opsi --block ke parameter ota_from_target_files.

Membuat update lengkap

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

. 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 bagi perangkat tardis. Anda juga dapat membangun ota_from_target_files sebagai biner python dan memanggilnya ke 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 python yang dihasilkan biner ini terletak di direktori out/.

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

Membuat update inkremental

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

Anda dapat menginstal paket pembaruan inkremental hanya di perangkat yang memiliki build sumber yang digunakan dalam menyusun paket. Untuk membangun pembaruan bertahap, Anda memerlukan file target_files.zip dari build sebelumnya (file yang Anda inginkan untuk mengupdate dari) serta file target_files.zip dari build baru. Sebagai contohnya, perintah berikut menggunakan alat rilis untuk membangun 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 update inkremental paket (incremental_ota_update.zip) jauh lebih kecil dari yang sesuai pembaruan penuh (sekitar 1 MB, bukan 60 MB).

Distribusikan paket inkremental hanya ke perangkat yang berjalan sama persis versi sebelumnya yang digunakan sebagai titik awal paket inkremental. Anda harus mem-flash gambar dalam PREVIOUS-tardis-target_files.zip atau PREVIOUS-tardis-img.zip (keduanya dibangun dengan make dist, untuk di-flash dengan fastboot update), bukan file yang ada di direktori PRODUCT_OUT (dibuat dengan make, yang akan di-flash dengan fastboot flashall). Mencoba menginstal paket inkremental pada perangkat dengan beberapa versi lainnya menyebabkan {i>error<i} instalasi. Jika penginstalan gagal, perangkat tetap dalam status kerja yang sama (menjalankan versi lama sistem); paket memverifikasi status sebelumnya dari semua file yang diperbaruinya sebelum menyentuhnya, agar perangkat tidak dalam status diupgrade setengah.

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

Membangun paket OTA untuk beberapa SKU

Android 11 atau yang lebih baru mendukung penggunaan satu OTA untuk beberapa perangkat dengan SKU yang berbeda. Untuk melakukannya, Anda perlu mengonfigurasi perangkat target untuk menggunakan sidik jari dinamis dan memperbarui metadata OTA (menggunakan alat OTA) untuk menyertakan nama perangkat dan sidik jari di kolom pra- dan pasca-pengujian entri kondisi.

Tentang SKU

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

SKU = <product><device><modifierA><modifierB><modifierC>
  • modifierA adalah level perangkat (seperti Pro, Premium, atau Plus)
  • modifierB adalah variasi hardware (seperti radio)
  • modifierC adalah wilayah, yang dapat berupa 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 produk akhir dan sidik jari perangkat saat runtime setelah perangkat dimulai. Proses ini menyederhanakan proses pengembangan platform, memungkinkan perangkat dengan khusus, tetapi nama produk yang berbeda untuk memiliki gambar yang sama (seperti tardis dan tardispro).

Menggunakan sidik jari dinamis

Sidik jari adalah rangkaian build yang ditentukan parameter seperti ro.product.brand, ro.product.name, dan ro.product.device. Sidik jari 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 {i>bootloader<i} pada waktu {i>booting<i} perangkat, lalu gunakan data tersebut untuk membuat sidik jari dinamis untuk perangkat tersebut.

Misalnya, untuk menggunakan sidik jari dinamis untuk perangkat tardis dan tardispro, perbarui file berikut seperti yang ditunjukkan di bawah.

  • 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 ro.build.fingerprint nilai berdasarkan nilai Properti bootloader ro.boot.product.hardware.sku (yang bersifat hanya baca).

Mengupdate metadata paket OTA

Paket OTA berisi file metadata (META-INF/com/android/metadata) yang menjelaskan paket, termasuk prasyarat dan kondisi pos OTA paket. 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. Tujuan Nilai post-build-incremental dan post-build menentukan status perangkat yang diharapkan setelah paket OTA diinstal. Nilai pre- dan Kolom 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.

Pada perangkat yang menjalankan Android 11 atau yang lebih baru, Anda dapat menggunakan flag --boot_variable_file di alat OTA untuk menentukan jalur ke file yang berisi nilai variabel runtime yang digunakan dalam pembuatan atribut sidik jari dinamis. Data ini kemudian digunakan untuk memperbarui metadata OTA agar disertakan nama perangkat dan sidik jari dalam kondisi pre- dan post- (menggunakan karakter pipa | sebagai pembatas). Flag --boot_variable_file memiliki sintaksis dan deskripsi berikut.

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

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

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 referensi penerapan. Daftar perubahan ini secara bersyarat mengurai pernyataan import di build.prop yang memungkinkan penggantian properti dikenali dan tercermin dalam metadata OTA final.