OTA paketleri oluşturma

A/B sistem güncellemeleri veya A/B olmayan sistem güncellemeleri kullanan cihazlar için tam ve artımlı OSA paketleri oluşturmak amacıyla build/make/tools/releasetools içinde sağlanan ota_from_target_files aracını kullanabilirsiniz. Araç, Android derleme sistemi tarafından oluşturulan target-files.zip dosyasını giriş olarak alır.

Android 11 veya sonraki sürümleri çalıştıran cihazlarda, farklı SKU'lara sahip birden fazla cihaz için tek bir OTA paketi oluşturabilirsiniz. Bu işlemi yapmak için hedef cihazların dinamik parmak izleri kullanacak şekilde yapılandırılması ve ön ve koşul öncesi girişlerine cihaz adı ile parmak izini eklemek için OTA meta verilerinin güncellenmesi gerekir.

Android 8.0, A/B dışı cihazlar için dosya tabanlı OTA paketlerini kullanımdan kaldırmıştır. Bu paketler, blok tabanlı OTA paketlerinin kullanılmasını gerektirir. Blok tabanlı OTA paketleri veya Android 7.x ya da önceki sürümleri çalıştıran cihazlar oluşturmak için --block seçeneğini ota_from_target_files parametresine iletin.

Eksiksiz güncellemeler oluşturun

Tam güncelleme, cihazın son durumunun tamamını (sistem, başlatma ve kurtarma bölümleri) içeren bir OTA paketidir. Cihaz, paketi alabildiği ve uygulayabildiği sürece paket, cihazın mevcut durumundan bağımsız olarak derlemeyi yükleyebilir. Örneğin, aşağıdaki komutlar tardis cihazı için target-files.zip arşivini oluşturmak amacıyla yayınlama araçlarını kullanır.

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

make dist, tam bir OTA paketi ($OUT içinde) oluşturur. Elde edilen .zip dosyası, tardis cihazı için OTA paketleri oluşturmak amacıyla gereken her şeyi içerir. Ayrıca ota_from_target_files öğesini python ikili programı olarak derleyebilir ve tam veya artımlı paketler oluşturmak için çağırabilirsiniz.

ota_from_target_files dist_output/tardis-target_files.zip ota_update.zip

ota_from_target_files yolu $PATH içinde ayarlanır ve elde edilen python ikilisi out/ dizininde bulunur.

ota_update.zip artık test cihazlarına gönderilmeye hazır (her şey test anahtarıyla imzalanır). Kullanıcı cihazları için kendi özel anahtarlarınızı yayınlanacak derlemeleri imzalama bölümünde açıklandığı şekilde oluşturup kullanın.

Artımlı güncellemeler oluşturun

Ek güncelleme, cihazda halihazırda bulunan verilere ikili yamalar içeren bir OTA paketidir. Artımlı güncellemelere sahip paketler değiştirilmemiş dosyaları içermedikleri için genellikle daha küçüktür. Ayrıca, değiştirilen dosyalar genellikle önceki sürümlerine çok benzediğinden, paketin yalnızca iki dosya arasındaki farkların kodlamasını içermesi yeterlidir.

Artımlı güncelleme paketini yalnızca paketi oluştururken kullanılan kaynak derlemeye sahip cihazlara yükleyebilirsiniz. Artımlı güncelleme oluşturmak için önceki derlemedeki target_files.zip dosyasına (güncellemek istediğiniz dosya) ve yeni derlemedeki target_files.zip dosyasına ihtiyacınız vardır. Örneğin, aşağıdaki komutlar tardis cihaz için artımlı bir güncelleme oluşturmak amacıyla yayınlama araçlarını kullanır.

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

Bu derleme önceki derlemeye çok benzer ve artımlı güncelleme paketi (incremental_ota_update.zip) karşılık gelen tam güncellemeden çok daha küçük (60 MB yerine yaklaşık 1 MB).

Artımlı paketi yalnızca artımlı paketin başlangıç noktası olarak kullanılan önceki derlemenin aynısını çalıştıran cihazlara dağıtın. PRODUCT_OUT dizinindeki (fastboot flashall ile birlikte yüklenen make ile oluşturulanlar) yerine, PREVIOUS-tardis-target_files.zip veya PREVIOUS-tardis-img.zip içindeki resimleri (her ikisi de fastboot update ile yüklenecek şekilde) PREVIOUS-tardis-target_files.zip veya PREVIOUS-tardis-img.zip biçiminde yüklemelisiniz. Artımlı paketi başka derlemelerin bulunduğu bir cihaza yüklemeye çalışmak, yükleme hatasına neden olur.make dist Yükleme işlemi başarısız olduğunda, cihaz aynı çalışma durumunda kalır (eski sistemi çalıştırır); paket, güncellediği tüm dosyaların önceki durumunu onlara dokunmadan önce doğrular. Böylece cihaz, yarı yarıya yükseltilmiş durumda kalmaz.

En iyi kullanıcı deneyimi için her 3-4 artımlı güncelleme için tam bir güncelleme sunun. Bu, kullanıcıların en son sürümü alabilmelerine ve uzun süren artımlı güncellemelerden kaçınmalarına yardımcı olur.

Birden fazla SKU için OTA paketi oluşturma

Android 11 veya sonraki sürümler, farklı SKU'lara sahip birden fazla cihaz için tek bir OTA paketi kullanılmasını destekler. Bu işlemi yapmak için hedef cihazların dinamik parmak izleri kullanacak şekilde yapılandırılması ve OTA meta verilerini, durum öncesi ve sonrası girişlere cihaz adı ve parmak izini içerecek şekilde güncellemek (OTA araçlarını kullanarak) gerekir.

SKU'lar hakkında

SKU'nun biçimi, birleşik derleme parametresi değerlerinin bir varyasyonudur ve genellikle mevcut build_fingerprint parametrelerinin bildirilmemiş bir alt kümesidir. OEM'ler, bir SKU için CDD onaylı derleme parametrelerinin herhangi bir kombinasyonunu kullanırken bu SKU'lar için tek bir resim kullanabilir. Örneğin, aşağıdaki SKU'nun birden fazla varyasyonu vardır:

SKU = <product><device><modifierA><modifierB><modifierC>
  • modifierA, cihaz düzeyidir (ör. Pro, Premium veya Plus)
  • modifierB, donanım varyasyonu (radyo gibi)
  • modifierC, genel (ör. Kuzey Amerika, EMEA veya CHN) ya da ülkeye veya dile özgü (ör. JPN, ENG veya CHN) olabilir.

Birçok OEM, birden fazla SKU için tek bir görüntü kullanır. Ardından, cihaz başlatıldıktan sonra çalışma zamanında nihai ürün adını ve cihaz parmak izini türetir. Bu işlem, platform geliştirme sürecini basitleştirerek küçük özelleştirmeler gerektiren ancak farklı ürün adları olan cihazların ortak resimlerin (tardis ve tardispro gibi) paylaşılmasını sağlar.

Dinamik parmak izleri kullanma

Parmak izi; ro.product.brand, ro.product.name ve ro.product.device gibi derleme parametrelerinin tanımlı bir birleşimidir. Bir cihazın parmak izi, sistem bölümü parmak izinden elde edilir ve cihazda çalıştırılan görüntülerin (ve baytların) benzersiz bir tanımlayıcısı olarak kullanılır. Dinamik parmak izi oluşturmak için cihazın build.prop dosyasında dinamik mantığı kullanarak cihaz başlatma sırasında bootloader değişkenlerinin değerini alın, ardından bu verileri kullanarak söz konusu cihaz için dinamik bir parmak izi oluşturun.

Örneğin, tardis ve tardispro cihazlarda dinamik parmak izleri kullanmak için aşağıdaki dosyaları aşağıda gösterildiği gibi güncelleyin.

  • odm/etc/build_std.prop dosyasını aşağıdaki satırı içerecek şekilde güncelleyin.

    ro.odm.product.device=tardis
    
  • odm/etc/build_pro.prop dosyasını aşağıdaki satırı içerecek şekilde güncelleyin.

    ro.odm.product.device=tardispro
    
  • odm/etc/build.prop dosyasını aşağıdaki satırları içerecek şekilde güncelleyin.

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

Bu satırlar, cihaz adı, parmak izi ve ro.build.fingerprint değerlerini ro.boot.product.hardware.sku bootloader özelliğinin (salt okunur) değerine göre dinamik olarak ayarlar.

OTA paketi meta verilerini güncelleme

OTA paketi, OTA paketinin ön koşulu ve sonrası durumu dahil olmak üzere paketi açıklayan bir meta veri dosyası (META-INF/com/android/metadata) içerir. Örneğin, aşağıdaki kod, tardis cihazını hedefleyen bir OTA paketinin meta veri dosyasıdır.

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

pre-device, pre-build-incremental ve pre-build değerleri, OTA paketinin yüklenebilmesi için bir cihazın sahip olması gereken durumu tanımlar. post-build-incremental ve post-build değerleri, OTA paketi yüklendikten sonra bir cihazın sahip olması beklenen durumu tanımlar. pre- ve post- alanlarının değerleri, aşağıdaki karşılık gelen derleme mülklerinden türetilir.

  • pre-device değeri, ro.product.device derleme özelliğinden türetilir.
  • pre-build-incremental ve post-build-incremental değerleri, ro.build.version.incremental derleme özelliğinden türetilir.
  • pre-build ve post-build değerleri, ro.build.fingerprint derleme mülkünden türetilir.

Android 11 veya sonraki sürümleri çalıştıran cihazlarda, cihazın dinamik parmak izini oluştururken kullanılan çalışma zamanı değişkenlerinin değerlerini içeren bir dosyanın yolunu belirtmek için OTA araçlarındaki --boot_variable_file işaretini kullanabilirsiniz. Bu veriler daha sonra OTA meta verilerini, cihaz adını ve parmak izini pre- ve post- koşullarında içerecek şekilde güncellemek için kullanılır (sınırlayıcı olarak dikey çizgi karakteri | kullanılır). --boot_variable_file işareti aşağıdaki söz dizimine ve açıklamaya sahiptir.

  • Sözdizimi: --boot_variable_file <path>
  • Açıklama: ro.boot.* özelliklerinin olası değerlerini içeren bir dosyanın yolunu belirtir. İçe aktarma ifadesi tarafından bazı ro.product.* özellikleri geçersiz kılındığında olası çalışma zamanı dijital parmak izlerini hesaplamak için kullanılır. Dosya, her satırın şu biçimde olduğu her satır için bir özellik bekler: prop_name=value1,value2.

Örneğin, mülk ro.boot.product.hardware.sku=std,pro olduğunda tardis ve tardispro cihazların OTA meta verileri aşağıda gösterildiği gibidir.

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

Bu işlevi Android 10 çalıştıran cihazlarda desteklemek için referans uygulamasına göz atın. Bu değişiklik listesi, build.prop dosyasındaki import ifadelerini koşullu olarak ayrıştırır. Böylece, özellik geçersiz kılmaları tanınır ve nihai OTA meta verilerine yansıtılır.