Anda dapat menggunakan alat ota_from_target_files
yang disediakan di build/make/tools/releasetools
untuk membangun paket OTA lengkap dan tambahan untuk perangkat yang menggunakan pembaruan sistem A/B atau pembaruan 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 lebih tinggi, Anda dapat membuat satu paket OTA untuk beberapa perangkat dengan SKU yang berbeda. Melakukannya memerlukan konfigurasi perangkat target untuk menggunakan sidik jari dinamis dan memperbarui metadata OTA untuk menyertakan nama perangkat dan sidik jari dalam entri pra dan pascakondisi.
Paket OTA berbasis file Android 8.0 tidak digunakan lagi untuk perangkat non-A/B, yang sebagai gantinya harus menggunakan paket OTA berbasis blok . Untuk menghasilkan paket atau perangkat OTA berbasis blok yang menjalankan Android 7.x atau lebih rendah, teruskan opsi --block
ke parameter ota_from_target_files
.
Membangun pembaruan penuh
Pembaruan lengkap adalah paket OTA yang berisi seluruh status akhir perangkat (sistem, boot, dan partisi pemulihan). Selama perangkat mampu menerima dan menerapkan paket, paket tersebut dapat menginstal build terlepas dari status perangkat saat ini. Misalnya, perintah berikut menggunakan alat rilis untuk membuat 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 (dalam $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 menyebutnya untuk membangun paket lengkap atau tambahan.
ota_from_target_files dist_output/tardis-target_files.zip ota_update.zip
Jalur ota_from_target_files
diatur di $PATH
, dan biner python yang dihasilkan terletak di direktori out/
.
ota_update.zip
sekarang siap dikirim ke perangkat uji (semuanya ditandatangani dengan kunci uji). Untuk perangkat pengguna, buat dan gunakan kunci pribadi Anda sendiri seperti yang dijelaskan dalam Signing builds for release .
Membangun pembaruan tambahan
Pembaruan tambahan adalah paket OTA yang berisi tambalan biner ke data yang sudah ada di perangkat. Paket dengan pembaruan tambahan biasanya lebih kecil karena tidak perlu menyertakan file yang tidak diubah. Selain itu, karena file yang diubah sering kali sangat mirip dengan versi sebelumnya, paket hanya perlu menyertakan penyandian perbedaan antara kedua file.
Anda dapat menginstal paket pembaruan inkremental hanya pada perangkat yang memiliki build sumber yang digunakan dalam membuat paket. Untuk membuat pembaruan tambahan, Anda memerlukan file target_files.zip
dari versi sebelumnya (yang ingin Anda perbarui dari ) serta file target_files.zip
dari versi baru. Misalnya, perintah berikut menggunakan alat rilis untuk membuat pembaruan tambahan untuk perangkat tardis
.
ota_from_target_files -i PREVIOUS-tardis-target_files.zip dist_output/tardis-target_files.zip incremental_ota_update.zip
Versi ini sangat mirip dengan versi sebelumnya, dan paket pembaruan tambahan ( incremental_ota_update.zip
) jauh lebih kecil daripada pembaruan lengkap yang sesuai (sekitar 1 MB, bukan 60 MB).
Distribusikan paket inkremental hanya ke perangkat yang menjalankan build sebelumnya yang sama persis dengan yang digunakan sebagai titik awal paket inkremental. Anda harus mem-flash gambar di PREVIOUS-tardis-target_files.zip
atau PREVIOUS-tardis-img.zip
(keduanya dibuat dengan make dist
, untuk di-flash dengan fastboot update
), alih-alih yang ada di bawah direktori PRODUCT_OUT
(dibuat dengan make
, yang akan di-flash dengan fastboot flashall
). Mencoba menginstal paket inkremental pada perangkat dengan beberapa build lain akan menghasilkan kesalahan penginstalan. Saat penginstalan gagal, perangkat tetap dalam kondisi kerja yang sama (menjalankan sistem lama); paket memverifikasi status sebelumnya dari semua file yang diperbarui sebelum menyentuhnya, sehingga perangkat tidak terdampar dalam status setengah ditingkatkan.
Untuk pengalaman pengguna terbaik, tawarkan pembaruan lengkap untuk setiap 3-4 pembaruan tambahan. Ini membantu pengguna mengikuti rilis terbaru dan menghindari urutan penginstalan yang lama dari pembaruan inkremental.
Membangun paket OTA untuk beberapa SKU
Android 11 atau lebih tinggi mendukung penggunaan satu paket OTA untuk beberapa perangkat dengan SKU yang berbeda. Melakukannya memerlukan konfigurasi perangkat target untuk menggunakan sidik jari dinamis dan memperbarui metadata OTA (menggunakan alat OTA) untuk memasukkan nama perangkat dan sidik jari dalam entri kondisi sebelum dan sesudah.
Tentang SKU
Format SKU adalah variasi dari nilai parameter build gabungan dan biasanya merupakan subset yang tidak dideklarasikan dari parameter build_fingerprint
saat ini. OEM dapat menggunakan kombinasi parameter build yang disetujui CDD untuk SKU sekaligus menggunakan satu gambar 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 perangkat keras (seperti radio) -
modifierC
adalah wilayah, yang dapat bersifat umum (seperti NA, EMEA, atau CHN ) atau khusus negara atau bahasa (seperti JPN, ENG, atau CHN)
Banyak OEM menggunakan satu gambar untuk beberapa SKU, kemudian mendapatkan nama produk akhir dan sidik jari perangkat saat runtime setelah perangkat melakukan booting. Proses ini menyederhanakan proses pengembangan platform, memungkinkan perangkat dengan penyesuaian kecil tetapi nama produk berbeda untuk berbagi gambar umum (seperti tardis
dan tardispro
).
Menggunakan sidik jari dinamis
Sidik jari adalah rangkaian 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 pengenal unik dari 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 boot 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 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-baris ini secara dinamis mengatur nilai nama perangkat, sidik jari, dan ro.build.fingerprint
berdasarkan nilai properti bootloader ro.boot.product.hardware.sku
(yang hanya-baca).
Memperbarui metadata paket OTA
Paket OTA berisi file metadata ( META-INF/com/android/metadata
) yang menjelaskan paket, termasuk prakondisi dan pascakondisi 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 dimiliki perangkat setelah paket OTA diinstal. Nilai bidang pre-
dan post-
diturunkan dari properti build yang sesuai berikut ini.
- Nilai
pre-device
berasal dari properti buildro.product.device
. - Nilai
pre-build-incremental
danpost-build-incremental
diturunkan dari properti buildro.build.version.incremental
. - Nilai
pre-build
danpost-build
diturunkan dari properti buildro.build.fingerprint
.
Pada perangkat yang menjalankan Android 11 atau lebih tinggi, Anda dapat menggunakan tanda --boot_variable_file
di alat OTA untuk menentukan jalur ke file yang berisi nilai variabel waktu proses yang digunakan dalam membuat sidik jari dinamis perangkat. Data tersebut kemudian digunakan untuk memperbarui metadata OTA untuk menyertakan nama perangkat dan sidik jari dalam kondisi pre-
dan post-
(menggunakan karakter pipa | sebagai pembatas). Bendera --boot_variable_file
memiliki sintaks dan deskripsi berikut.
- Sintaks:
--boot_variable_file <path>
- Deskripsi: Menentukan jalur ke file yang berisi kemungkinan nilai properti
ro.boot.*
. Digunakan untuk menghitung kemungkinan sidik jari runtime ketika beberapa propertiro.product.*
ditimpa oleh pernyataan impor. File mengharapkan satu properti per baris di mana setiap baris memiliki format berikut:prop_name=value1,value2
.
Misalnya, ketika propertinya 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 pada perangkat yang menjalankan Android 10, lihat implementasi referensi . Daftar perubahan ini secara kondisional mem-parsing pernyataan import
dalam file build.prop
, yang memungkinkan penggantian properti dikenali dan tercermin dalam metadata OTA akhir.