OTA paketleri oluşturma

ota_from_target_files aracını kullanarak build/make/tools/releasetools'de sağlanan A/B sistem güncellemelerini veya A/B olmayan sistem güncellemelerini kullanan cihazlar için tam ve artımlı OTA paketleri oluşturabilirsiniz. Araç, giriş olarak Android derleme sistemi tarafından oluşturulan target-files.zip dosyasını alır.

Android 11 veya sonraki sürümlerin yüklü olduğu cihazlarda, farklı SKU'lara sahip birden fazla cihaz için tek bir OTA paketi oluşturabilirsiniz. Bunun için hedef cihazların dinamik parmak izlerini kullanacak şekilde yapılandırılması ve OTA meta verilerinin güncellenerek cihaz adının ve parmak izinin ön koşul ve son koşul girişlerine eklenmesi 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 önceki sürümlerin yüklü olduğu cihazlar için blok tabanlı OTA paketleri oluşturmak üzere --block seçeneğini ota_from_target_files parametresine iletin.

Tam güncellemeler oluşturma

Tam güncelleme, cihazın son durumunun tamamını (sistem, başlatma ve kurtarma bölümleri) içeren bir OTA paketidir. Cihaz paketi alıp uygulayabildiği sürece, cihazın mevcut durumundan bağımsız olarak derleme yüklenebilir. Örneğin, aşağıdaki komutlar tardis cihazı için target-files.zip arşivini oluşturmak üzere yayın 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. Ortaya çıkan .zip dosyası, tardis cihazı için OTA paketleri oluşturmak üzere gereken her şeyi içerir. ota_from_target_files öğesini Python ikili programı olarak da oluşturabilir 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 sonuçta elde edilen python ikili programı out/ dizininde bulunur.

ota_update.zip artık test cihazlarına gönderilmeye hazır (her şey test anahtarıyla imzalanmıştır). Kullanıcı cihazları için Yayın için derlemeleri imzalama bölümünde ayrıntılı olarak açıklandığı gibi 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. Değişmeyen dosyaları içermeleri gerekmediğinden, artımlı güncellemeler içeren paketler 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 paketi oluşturmak için kullanılan kaynak derlemenin yüklü olduğu cihazlara yükleyebilirsiniz. Artımlı güncelleme oluşturmak için önceki derlemeye ait target_files.zip dosyası (güncellemek istediğiniz derleme kaynağı) ve yeni derlemeye ait target_files.zip dosyası gerekir. Örneğin, aşağıdaki komutlar tardis cihazı için artımlı bir güncelleme oluşturmak üzere yayın 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 benzerdir ve artımlı güncelleme paketi (incremental_ota_update.zip), ilgili tam güncellemeden (60 MB yerine yaklaşık 1 MB) çok daha küçüktür.

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. PREVIOUS-tardis-target_files.zip veya PREVIOUS-tardis-img.zip içindeki görüntüleri (her ikisi de make dist ile oluşturulmuş olup fastboot update ile yüklenir) PRODUCT_OUT dizinindeki görüntüler yerine (make ile oluşturulmuş olup fastboot flashall ile yüklenir) yüklemeniz gerekir. Artımlı paketi başka bir derlemenin yüklü olduğu bir cihaza yüklemeye çalışırsanız yükleme hatası oluşur. Yükleme 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 değiştirmeden önce doğrular. Bu nedenle cihaz, yarı yükseltilmiş bir 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ümü kolayca yükleyebilir ve uzun bir yükleme sürecinde artımlı güncellemeler yapmak zorunda kalmaz.

Birden fazla SKU için OTA paketleri oluşturma

Android 11 veya sonraki sürümlerde, farklı SKU'lara sahip birden fazla cihaz için tek bir OTA paketi kullanma özelliği desteklenir. Bunun için hedef cihazları dinamik parmak izlerini kullanacak şekilde yapılandırmanız ve OTA meta verilerini (OTA araçlarını kullanarak) ön ve son koşul girişlerine cihaz adını ve parmak izini içerecek şekilde güncellemeniz gerekir.

SKU'lar hakkında

SKU biçimi, birleştirilmiş build parameter 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 kullanabilir ve bu SKU'lar için tek bir görüntü kullanabilir. Örneğin, aşağıdaki SKU'nun birden fazla varyasyonu vardır:

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

Birçok OEM, birden fazla SKU için tek bir görüntü kullanır ve 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 içeren ancak farklı ürün adlarına sahip cihazların ortak resimleri (ör. tardis ve tardispro) paylaşmasına olanak tanır.

Dinamik parmak izlerini kullanma

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

Örneğin, tardis ve tardispro cihazlarda dinamik parmak izlerini kullanmak için aşağıdaki dosyaları 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

Bir 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 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 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 özelliğinden türetilir.
  • pre-build ve post-build değerleri, ro.build.fingerprint derleme özelliğinden elde edilir.

Android 11 veya sonraki sürümlerin yüklü olduğu 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. Bazı ro.product.* özellikleri içe aktarma ifadesiyle geçersiz kılındığında olası çalışma zamanı parmak izlerini hesaplamak için kullanılır. Dosyada her satırda bir mülk olması beklenir. Her satırda şu biçim kullanılır: prop_name=value1,value2.

Örneğin, özellik ro.boot.product.hardware.sku=std,pro olduğunda tardis ve tardispro cihazlarını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

Android 10 çalıştıran cihazlarda bu işlevin desteklenmesi için referans uygulamasına bakın. Bu değişiklik listesi, build.prop dosyasındaki import ifadelerini koşullu olarak ayrıştırır. Bu sayede, özellik geçersiz kılmalarının tanınması ve nihai OTA meta verilerine yansıtılması sağlanır.