OTA Paketleri Oluşturma

A/B sistem güncellemelerini veya A/B olmayan sistem güncellemelerini kullanan cihazlar için tam ve artımlı OTA paketleri oluşturmak build/make/tools/releasetools releasetools içinde sağlanan ota_from_target_files aracını kullanabilirsiniz. Araç, Android derleme sistemi tarafından üretilen target-files.zip dosyasını girdi 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. Bunu yapmak, hedef cihazların dinamik parmak izlerini kullanacak şekilde yapılandırılmasını ve OTA meta verilerinin ön ve son koşul girişlerine cihaz adını ve parmak izini dahil edecek şekilde güncellenmesini gerektirir.

Android 8.0, A/B olmayan cihazlar için dosya tabanlı OTA paketlerini kullanımdan kaldırdı, bunun yerine blok tabanlı OTA paketlerini kullanması gerekir. Blok tabanlı OTA paketleri veya Android 7.x veya daha eski sürümleri çalıştıran cihazlar oluşturmak için --block seçeneğini ota_from_target_files parametresine iletin.

Tam güncellemeler oluşturma

Tam güncelleme, cihazın tüm son durumunu (sistem, önyükleme ve kurtarma bölümleri) içeren bir OTA paketidir. Aygıt, paketi alıp uygulayabildiği sürece, paket, aygıtın mevcut durumundan bağımsız olarak yapıyı yükleyebilir. Örneğin, aşağıdaki komutlar, tardis aygıtı için target-files.zip arşivini oluşturmak için 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 oluşturur ( $OUT içinde). Ortaya çıkan .zip dosyası, tardis aygıtı için OTA paketleri oluşturmak için gereken her şeyi içerir. Ayrıca ota_from_target_files bir python ikili dosyası olarak oluşturabilir ve onu 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 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 İmzalama derlemelerinde 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, halihazırda cihazda bulunan verilere ikili yamalar içeren bir OTA paketidir. Artımlı güncellemelere sahip paketler, değiştirilmemiş dosyaları içermeleri gerekmediğinden genellikle daha küçüktür. Ek olarak, değiştirilen dosyalar genellikle önceki sürümlerine çok benzer olduğundan, paketin yalnızca iki dosya arasındaki farkların bir kodlamasını içermesi gerekir.

Artımlı güncelleme paketini yalnızca paketin oluşturulmasında kaynak derlemenin kullanıldığı cihazlara kurabilirsiniz. Artımlı bir güncelleme oluşturmak için, önceki target_files.zip (güncellemek istediğiniz sürümden ) target_files.zip dosyasına ve yeni derlemeden target_files.zip dosyasına ihtiyacınız vardır. Örneğin, aşağıdaki komutlar, tardis aygıtı için artımlı bir güncelleme oluşturmak için 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 benzer ve artımlı güncelleme paketi ( incremental_ota_update.zip ) karşılık gelen 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 derlemenin tam olarak aynısını çalıştıran cihazlara dağıtın. PRODUCT_OUT PREVIOUS-tardis-target_files.zip PREVIOUS-tardis-img.zip make dist ile fastboot update make fastboot flashall ile yanıp sönecektir). Artımlı paketi başka bir yapıya sahip bir aygıta yüklemeye çalışmak, yükleme hatasıyla sonuçlanır. Kurulum başarısız olduğunda, cihaz aynı çalışma durumunda kalır (eski sistemi çalıştırır); paket, güncelleme yaptığı tüm dosyaların önceki durumunu onlara dokunmadan önce doğrular, böylece cihaz yarı yükseltilmiş bir durumda mahsur 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ü yakalamasına ve artımlı güncellemelerin uzun bir yükleme dizisinden kaçınmasına yardımcı olur.

Birden çok SKU için OTA paketleri oluşturma

Android 11 veya üzeri, farklı SKU'lara sahip birden fazla cihaz için tek bir OTA paketinin kullanılmasını destekler. Bunu yapmak, hedef cihazları dinamik parmak izlerini kullanacak şekilde yapılandırmayı ve OTA meta verilerini (OTA araçlarını kullanarak) cihaz adını ve parmak izini ön ve son durum girişlerine dahil edecek şekilde güncellemeyi gerektirir.

SKU'lar hakkında

Bir SKU'nun biçimi, birleştirilmiş yapı parametresi değerlerinin bir varyasyonudur ve genellikle geçerli build_fingerprint parametrelerinin bildirilmemiş bir alt kümesidir. OEM'ler, bu SKU'lar için tek bir görüntü kullanırken bir SKU için CDD onaylı yapı parametrelerinin herhangi bir kombinasyonunu kullanabilir. Örneğin, aşağıdaki SKU'nun birden çok varyasyonu vardır:

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

Çoğu OEM, birden çok 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 süreç, platform geliştirme sürecini basitleştirir, küçük özelleştirmelere sahip ancak farklı ürün adlarına sahip cihazların ortak görüntüleri ( tardis ve tardispro gibi) paylaşmasına olanak tanır.

Dinamik parmak izlerini kullanma

Parmak izi, ro.product.brand , ro.product.name ve ro.product.device gibi yapı parametrelerinin tanımlanmış bir birleşimidir. Bir aygıtın parmak izi, sistem bölümünün parmak izinden türetilir ve aygıtta çalışan görüntülerin (ve baytların) benzersiz bir tanımlayıcısı olarak kullanılır. Dinamik bir parmak izi oluşturmak için, cihaz önyükleme sırasında önyükleyici değişkenlerinin değerini almak üzere cihazın build.prop dosyasındaki dinamik mantığı kullanın, ardından bu verileri o cihaz için dinamik bir parmak izi oluşturmak için kullanın.

Örneğin, tardis ve tardispro cihazları için dinamik parmak izlerini 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, ro.boot.product.hardware.sku bootloader özelliğinin (salt okunur olan) değerine dayalı olarak aygıt adını, parmak izini ve ro.build.fingerprint değerlerini 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 kurulabilmesi için bir cihazın sahip olması gereken durumu tanımlar. post-build-incremental ve post-build değerler, OTA paketi yüklendikten sonra bir cihazın sahip olması beklenen durumu tanımlar. pre- ve post- alanların değerleri, aşağıdaki karşılık gelen yapı özelliklerinden türetilir.

  • pre-device değeri, ro.product.device build özelliğinden türetilir.
  • İnşa pre-build-incremental ve post-build-incremental değerler ro.build.version.incremental build özelliğinden türetilir.
  • Yapı pre-build post-build değerler ro.build.fingerprint yapı özelliğinden 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 bayrağını kullanabilirsiniz. Veriler daha sonra OTA meta verilerini pre- ve post- koşullarda cihaz adını ve parmak izini içerecek şekilde güncellemek için kullanılır (sınırlayıcı olarak | çizgi karakteri kullanılarak). --boot_variable_file bayrağı aşağıdaki sözdizimine 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. Bazı ro.product.* özellikleri import ifadesi tarafından geçersiz kılındığında olası çalışma zamanı parmak izlerini hesaplamak için kullanılır. Dosya, her satırın aşağıdaki biçime sahip olduğu her satırda bir özellik bekler: prop_name=value1,value2 .

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

Bu işlevi Android 10 çalıştıran cihazlarda desteklemek için başvuru uygulamasına bakın. Bu değişiklik listesi, özellik geçersiz kılmalarının tanınmasını ve son OTA meta verilerinde yansıtılmasını sağlayan build.prop dosyasındaki import ifadelerini koşullu olarak ayrıştırır.