OTA paketleri oluşturun

A/B sistem güncellemelerini veya A/B olmayan sistem güncellemelerini kullanan cihazlar için tam ve artımlı OTA 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 üretilen target-files.zip dosyasını girdi olarak alır.

Android 11 veya üstünü ç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, cihaz adını ve parmak izini ön ve son koşul girişlerine 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 paketleri kullanması gerekiyor. Blok tabanlı OTA paketleri veya Android 7.x veya daha düşük sürüm çalıştıran cihazlar oluşturmak için --block seçeneğini ota_from_target_files parametresine iletin.

Tam güncellemeler oluşturun

Tam güncelleme, cihazın tüm son durumunu (sistem, önyükleme ve kurtarma bölümleri) içeren bir OTA paketidir. Cihaz paketi alıp uygulayabildiği sürece paket, cihazın mevcut durumuna bakılmaksızın yapıyı 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 oluşturur ( $OUT içinde). Ortaya çıkan .zip dosyası, tardis cihazı için OTA paketleri oluşturmak için gereken her şeyi içerir. Ayrıca ota_from_target_files dosyasını 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 ortaya çıkan python ikili dosyası out/ dizininde bulunur.

ota_update.zip artık test cihazlarına gönderilmeye hazır (her şey test anahtarıyla imzalandı). Kullanıcı cihazları için, Sürüm için derlemelerin imzalanması bölümünde ayrıntılı olarak açıklandığı şekilde kendi özel anahtarlarınızı oluşturun ve kullanın.

Artımlı güncellemeler oluşturun

Artımlı güncelleme, halihazırda cihazda bulunan verilere ikili yamalar içeren bir OTA paketidir. Artımlı güncellemelere sahip paketler, değişmemiş dosyaları içermeleri gerekmediğinden 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 kaynak yapının kullanıldığı cihazlara yükleyebilirsiniz. Artımlı bir güncelleme oluşturmak için, önceki yapıdaki (güncelleme yapmak istediğiniz) target_files.zip dosyasına ve yeni yapıdaki 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 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 yapı, önceki yapıya çok benzemektedir 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 yapının tam olarak aynısını çalıştıran cihazlara dağıtın. PREVIOUS-tardis-target_files.zip veya PREVIOUS-tardis-img.zip dosyasındaki görüntüleri (her ikisi de make dist ile oluşturulmuş, fastboot update ile flashlanacak şekilde) PRODUCT_OUT dizini altındakiler ( make ile oluşturulmuş) yerine flaşlamalısınız. fastboot flashall ile flashlanacaktır). Artımlı paketi başka bir yapıya sahip bir cihaza 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ırarak); paket, güncellediği tüm dosyalara dokunmadan önce bunların önceki durumunu 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 tam güncelleme sunun. Bu, kullanıcıların en son sürümü yakalamasına ve uzun süreli artımlı güncelleme yükleme dizisinden kaçınmasına yardımcı olur.

Birden fazla SKU için OTA paketleri oluşturun

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ın dinamik parmak izlerini kullanacak şekilde yapılandırılmasını ve OTA meta verilerinin (OTA araçlarını kullanarak), ön ve son koşul girişlerine cihaz adını ve parmak izini içerecek şekilde güncellenmesini gerektirir.

SKU'lar hakkında

SKU'nun formatı, birleştirilmiş derleme parametresi değerlerinin bir varyasyonudur ve genellikle geçerli build_fingerprint parametrelerinin bildirilmemiş 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 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 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 alır. Bu süreç, 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ıyarak platform geliştirme sürecini basitleştirir.

Dinamik parmak izlerini kullanın

Parmak izi, ro.product.brand , ro.product.name ve ro.product.device gibi yapı parametrelerinin tanımlanmış bir birleşimidir. Bir cihazın parmak izi, sistem bölümü parmak izinden türetilir ve cihazda ç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, aygıtın önyükleme zamanında önyükleyici değişkenlerinin değerini almak üzere aygıtın build.prop dosyasındaki dinamik mantığı kullanın, ardından bu verileri söz konusu aygıt için dinamik bir parmak izi oluşturmak üzere kullanın.

Örneğin tardis ve tardispro cihazlarında dinamik parmak izi 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 önyükleyici özelliğinin (salt okunurdur) değerine göre aygıt adını, parmak izini ve ro.build.fingerprint değerlerini dinamik olarak ayarlar.

OTA paketi meta verilerini güncelleyin

Bir OTA paketi, OTA paketinin önkoşulu ve sonkoş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, bir cihazın OTA paketi kurulmadan önce 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ğer, ro.product.device yapı özelliğinden türetilir.
  • pre-build-incremental ve post-build-incremental değerler ro.build.version.incremental build özelliğinden türetilir.
  • pre-build ve post-build değerler ro.build.fingerprint derleme özelliğinden türetilir.

Android 11 veya üstünü çalıştıran cihazlarda, cihazın dinamik parmak izini oluştururken kullanılan çalışma zamanı değişkenlerinin değerlerini içeren bir dosyaya giden yolu belirtmek için OTA araçlarındaki --boot_variable_file işaretini kullanabilirsiniz. Veriler daha sonra OTA meta verilerini, pre- ve post- koşullara cihaz adını ve parmak izini dahil edecek şekilde güncellemek için kullanılır (sınırlayıcı olarak dikey ç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 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 şu formata sahip olduğu her satır için bir özellik bekler: prop_name=value1,value2 .

Örneğin, özellik 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

Bu işlevselliği Android 10 çalıştıran cihazlarda desteklemek 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, özellik geçersiz kılmalarının tanınmasına ve son OTA meta verilerine yansıtılmasına olanak tanır.