OTA paketleri oluşturma

ota_from_target_files aracını kullanarak build/make/tools/releasetools içinde 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 paket, cihazın mevcut durumundan bağımsız olarak derlemeyi yükleyebilir. Örneğin, aşağıdaki komutlar target-files.zip cihazı için tardis 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 ikilisi 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çtaki python ikili dosyası 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 başlıklı makalede ayrıntılı olarak açıklandığı gibi kendi özel anahtarlarınızı oluşturun ve 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 klasörlerindeki (her ikisi de make dist ile oluşturulmuş olup fastboot update ile flashlanacaktır) görüntüleri, PRODUCT_OUT dizinindeki (make ile oluşturulmuş olup fastboot flashall ile flashlanacaktır) görüntüler yerine flashlamanız gerekir. Artımlı paketi başka bir derlemenin bulunduğu cihaza yüklemeye çalışmak yükleme hatasıyla sonuçlanır. 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 onlara dokunmadan önce doğrular. Böylece 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ü yükleyebilir ve uzun bir yükleme dizisiyle artımlı güncellemeler yapmaktan kurtulabilir.

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 kullanılabilir. 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'da birden fazla varyasyon 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 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ştirir. Böylece, küçük özelleştirmeler içeren ancak farklı ürün adlarına sahip cihazlar ortak resimleri (ör. tardis ve tardispro) paylaşabilir.

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 bir 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

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ında --boot_variable_file işaretini kullanabilirsiniz. Ardından, OTA meta verilerini güncellemek için veriler kullanılır. Bu güncelleme, pre- ve post- koşullarına cihaz adını ve parmak izini ekler (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 uygulamaya 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.