OTA paketleri oluşturma

A/B sistem güncellemeleri veya A/B dışındaki sistem güncellemeleri kullanan cihazlar için tam ve artımlı OTA paketleri oluşturmak üzere build/make/tools/releasetools'da sağlanan ota_from_target_files aracını kullanabilirsiniz. Araç, Android derleme sistemi tarafından üretilen target-files.zip dosyasını giriş olarak alır.

Android 11 veya sonraki sürümleri çalıştıran cihazlar için farklı SKU'lara sahip birden fazla cihaz için tek bir OTA paketi oluşturabilirsiniz. Bunu yapmak için hedef cihazları dinamik parmak izleri kullanacak şekilde yapılandırmanız ve OTA meta verilerini ön ve son koşul girişlerine cihaz adını ve parmak izini içerecek şekilde güncellemeniz gerekir.

Android 8.0, A/B olmayan cihazlar için dosya tabanlı OTA paketlerinin desteğini sonlandırdı. Bu cihazlar bunun yerine blok tabanlı OTA paketlerini kullanmalıdır. Android 7.x veya daha eski sürümleri çalıştıran cihazlar için blok tabanlı OTA paketleri oluşturmak istiyorsanız --block seçeneğini ota_from_target_files parametresine iletin.

Tam güncellemeler oluşturma

Tam güncelleme, cihazın nihai durumunun tamamını (sistem, önyükleme ve kurtarma bölümleri) içeren bir OTA paketidir. Cihaz paketi alıp uygulayabiliyorsa 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şivi oluşturmak üzere sürüm 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 biçiminde) oluşturur. Elde edilen .zip dosyası, tardis cihazı için OTA paketleri oluşturmak için gereken her şeyi içerir. ota_from_target_files'yi bir Python ikili dosyası olarak da 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'da ayarlanır ve oluşturulan Python ikili dosyası out/ dizininde bulunur.

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

Artımlı güncellemeler oluşturma

Artımlı güncelleme, cihazda bulunan verilere yönelik ikili yamalar içeren bir OTA paketidir. Artımlı güncelleme içeren paketler, değişmeyen dosyaları içermek zorunda olmadıkları 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 gerekir.

Artımlı güncelleme paketini yalnızca paketin oluşturulmasında kullanılan kaynak derlemenin bulunduğu 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ı güncelleme oluşturmak üzere sürüm 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 derlemeyle tam olarak aynı derlemeyi çalıştıran cihazlara dağıtın. PRODUCT_OUT dizinindeki (fastboot flashall ile oluşturulacak make ile oluşturulan) videolar yerine, PREVIOUS-tardis-target_files.zip veya PREVIOUS-tardis-img.zip (her ikisi de make dist ile oluşturulacak ve fastboot update ile yansıtılacak) resimleri yüklemeniz gerekir. Artımlı paketi başka bir derlemenin bulunduğu bir cihaza yüklemeye çalışmak, yükleme hatasına neden olur. 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üncellemede bir tam güncelleme sunun. Bu sayede kullanıcılar en son sürüme geçebilir ve artımlı güncellemelerin uzun yükleme sırasını atlayabilir.

Birden fazla SKU için OTA paketleri oluşturma

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

SKU'lar hakkında

SKU'nun biçimi, birleştirilmiş derleme parametresi değerlerinin bir varyasyonudur ve genellikle mevcut build_fingerprint parametrelerinin tanımlanmamış bir alt kümesidir. OEM'ler, bir SKU için CDD onaylı derleme parametrelerinin herhangi bir kombinasyonunu kullanabilir ve aynı zamanda bu SKU'lar için tek bir görüntü kullanabilir. Örneğin, aşağıdaki SKU'nun birden fazla varyantı vardır:

SKU = <product><device><modifierA><modifierB><modifierC>
  • modifierA, cihaz düzeyidir (ör. Pro, Premium veya Plus)
  • modifierB, donanım varyantıdır (ör. radyo)
  • modifierC, genel (ör. NA, EMEA veya CHN) ya da ülkeye ya da dile özel (ör. JPN, ENG veya CHN) olabilen bölgedir.

Birçok OEM, birden fazla SKU için tek bir resim kullanır ve ardından cihaz açıldıktan sonra çalışma zamanında nihai ürün adını ve cihaz parmak izini oluşturur. Bu işlem, platform geliştirme sürecini basitleştirerek küçük özelleştirmelere sahip ancak farklı ürün adlarına sahip cihazların ortak resimleri (tardis ve tardispro gibi) paylaşmasına olanak tanır.

Dinamik parmak izleri kullanma

Parmak izi, ro.product.brand, ro.product.name ve ro.product.device gibi derleme parametrelerinin tanımlanmış bir birleşimidir. Bir cihazın parmak izi, sistem bölümü parmak izinden türetilir ve cihazda çalışan resimlerin (ve baytların) benzersiz tanımlayıcı 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 cihazlar için dinamik parmak izleri kullanmak istiyorsanız 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ını, parmak izini ve ro.build.fingerprint değerlerini ro.boot.product.hardware.sku önyükleyici ö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 son koşulu da 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 cihazın sahip olması beklenen durumu tanımlar. pre- ve post- alanlarının değerleri, aşağıdaki ilgili derleme özelliklerinden 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 mülkünden 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. Ardından veriler, OTA meta verilerini pre- ve post- koşullarına cihaz adını ve parmak izini içerecek şekilde güncellemek için kullanılır (sınırlayıcı olarak | boru karakteri kullanılır). --boot_variable_file işaretinin söz dizimi ve açıklaması aşağıda verilmiştir.

  • 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. Dosyada, her satırın aşağıdaki biçime sahip olduğu her satırda bir mülk beklenir: prop_name=value1,value2.

Örneğin, mülk ro.boot.product.hardware.sku=std,pro olduğunda tardis ve tardispro cihazları için 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

Android 10 çalıştıran cihazlarda bu işlevi desteklemek için referans uygulamaya bakın. Bu değişiklik listesi, build.prop dosyasında import ifadelerini koşullu olarak ayrıştırır. Bu sayede, tesis geçersiz kılmaları tanınabilir ve nihai OTA meta verilerine yansıtılabilir.