Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.

Membangun Paket OTA

Anda dapat menggunakan fitur ota_from_target_files yang disediakan di build/make/tools/releasetools untuk membuat paket OTA lengkap dan inkremental untuk perangkat yang menggunakan update sistem A / B atau update sistem non-A / B. Alat tersebut mengambil file target-files.zip 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 berbeda. Melakukan hal itu memerlukan konfigurasi perangkat target untuk menggunakan sidik jari dinamis dan memperbarui metadata OTA untuk memasukkan nama perangkat dan sidik jari di entri pra dan pasca kondisi.

Android 8.0 menghentikan 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 lebih rendah, --block opsi --block ke parameter ota_from_target_files .

Membangun pembaruan penuh

Pembaruan lengkap adalah paket OTA yang berisi seluruh status akhir perangkat (partisi sistem, boot, dan pemulihan). Selama perangkat dapat menerima dan menerapkan paket, paket 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 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

Path 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 Pembuatan penandatanganan untuk rilis .

Membangun pembaruan tambahan

Pembaruan tambahan adalah paket OTA yang berisi patch 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 seringkali sangat mirip dengan versi sebelumnya, paket hanya perlu menyertakan pengkodean perbedaan antara kedua file tersebut.

Anda dapat menginstal paket update tambahan hanya di perangkat yang build sumbernya digunakan dalam membuat paket. Untuk membangun sebuah update inkremental, Anda memerlukan target_files.zip file dari membangun sebelumnya (yang Anda ingin update dari) serta target_files.zip file dari membangun 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 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 ), bukan yang di bawah direktori PRODUCT_OUT (dibuat dengan make , yang akan di-flash dengan fastboot flashall ). Mencoba menginstal paket inkremental di perangkat dengan beberapa build lain menghasilkan error penginstalan. Saat penginstalan gagal, perangkat tetap dalam status 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 mengejar rilis terbaru dan menghindari urutan penginstalan yang panjang dari pembaruan tambahan.

Membangun paket OTA untuk beberapa SKU

Android 11 atau lebih tinggi mendukung penggunaan satu paket OTA untuk beberapa perangkat dengan SKU berbeda. Melakukan hal itu 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 gabungan nilai parameter build dan biasanya merupakan subset parameter build_fingerprint tidak dideklarasikan saat ini. OEM dapat menggunakan kombinasi apa pun dari parameter build yang disetujui CDD untuk SKU sementara juga 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 pada waktu proses 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 di file build.prop perangkat untuk mendapatkan nilai variabel bootloader pada waktu boot perangkat, lalu gunakan data tersebut untuk membuat sidik jari dinamis untuk perangkat itu.

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 menyetel nilai nama perangkat, sidik jari, dan ro.build.fingerprint berdasarkan nilai properti ro.boot.product.hardware.sku bootloader (yang bersifat hanya baca).

Memperbarui metadata paket OTA

Paket OTA berisi file metadata ( META-INF/com/android/metadata ) yang mendeskripsikan paket, termasuk prasyarat dan kondisi pasca 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 perangkat yang diharapkan setelah paket OTA diinstal. Nilai bidang pre- dan post- diturunkan dari properti build terkait berikut ini.

  • Nilai pre-device diturunkan dari properti build ro.product.device .
  • Nilai pre-build-incremental dan post-build-incremental diturunkan dari properti build ro.build.version.incremental .
  • Nilai pre-build dan post-build diturunkan dari properti build ro.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 runtime yang digunakan dalam membuat sidik jari dinamis perangkat. Data tersebut kemudian digunakan untuk memperbarui metadata OTA untuk memasukkan nama perangkat dan sidik jari dalam kondisi pre- dan post- (menggunakan karakter pipa | sebagai pembatas). Flag --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 sidik jari runtime yang mungkin ketika beberapa properti ro.product.* dengan pernyataan import. File tersebut mengharapkan satu properti per baris di mana 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 ditampilkan 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 bersyarat mem-parsing pernyataan import dalam file build.prop , yang memungkinkan penggantian properti dikenali dan direfleksikan dalam metadata OTA akhir.