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. Tindakan ini memerlukan konfigurasi perangkat target untuk menggunakan sidik jari dinamis dan mengupdate metadata OTA untuk menyertakan nama perangkat dan sidik jari dalam entri pra-dan pasca-kondisi.
Android 8.0 menghentikan penggunaan paket OTA berbasis file untuk perangkat non-A/B, dan sebagai gantinya
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 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 (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.
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 berubah. Selain itu, karena file yang diubah sering kali sangat mirip dengan versi sebelumnya, paket hanya perlu menyertakan encoding perbedaan antara kedua file tersebut.
Anda dapat menginstal paket update inkremental hanya di perangkat yang memiliki
build sumber yang digunakan dalam pembuatan paket. Untuk mem-build update inkremental,
Anda memerlukan file target_files.zip
dari build sebelumnya (file yang ingin Anda
update 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
terkait (sekitar 1 MB, bukan 60 MB).
Distribusikan paket inkremental hanya ke perangkat yang menjalankan build yang sama
persis dengan build sebelumnya 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 mengakibatkan 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 update inkremental yang panjang.
Membangun paket OTA untuk beberapa SKU
Android 11 atau yang lebih baru mendukung penggunaan satu paket OTA untuk beberapa perangkat dengan SKU yang berbeda. Tindakan ini memerlukan konfigurasi perangkat target agar menggunakan sidik jari dinamis dan mengupdate metadata OTA (menggunakan alat OTA) untuk menyertakan nama perangkat dan sidik jari dalam entri kondisi sebelum dan setelah kondisi.
Tentang SKU
Format SKU adalah variasi dari gabungan nilai parameter
build 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 level 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
kecil tetapi nama produk yang berbeda untuk berbagi gambar yang sama (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
ID unik gambar (dan byte) yang berjalan pada 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 bagi 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).
Mengupdate 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
di perangkat setelah paket OTA diinstal. Nilai kolom pre-
dan post-
berasal dari properti build yang sesuai berikut ini.
- Nilai
pre-device
berasal dari properti buildro.product.device
. - Nilai
pre-build-incremental
danpost-build-incremental
berasal dari properti buildro.build.version.incremental
. - Nilai
pre-build
danpost-build
berasal dari properti buildro.build.fingerprint
.
Pada 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 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
properti
ro.boot.*
. Digunakan untuk menghitung kemungkinan sidik jari runtime saat beberapa propertiro.product.*
diganti oleh pernyataan impor. File ini mengharapkan satu properti per baris dengan setiap baris memiliki format berikut:prop_name=value1,value2
.
Misalnya, jika properti adalah ro.boot.product.hardware.sku=std,pro
, metadata OTA untuk perangkat tardis
dan tardispro
akan ditampilkan 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 implementasi
referensi.
Daftar perubahan ini secara bersyarat mengurai pernyataan import
dalam file build.prop
, sehingga penggantian properti dapat dikenali dan ditampilkan dalam
metadata OTA final.