A/B sistem güncellemeleri veya A/B olmayan sistem güncellemeleri kullanan cihazlar için tam ve artımlı OSA 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 oluşturulan target-files.zip
dosyasını giriş 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. Bu işlemi yapmak için hedef cihazların dinamik parmak izleri kullanacak şekilde yapılandırılması ve ön ve koşul öncesi girişlerine cihaz adı ile parmak izini eklemek için OTA meta verilerinin güncellenmesi gerekir.
Android 8.0, A/B dışı cihazlar için dosya tabanlı OTA paketlerini kullanımdan kaldırmıştır. Bu paketler, blok tabanlı OTA paketlerinin kullanılmasını gerektirir. Blok tabanlı OTA paketleri veya Android 7.x ya da önceki sürümleri çalıştıran cihazlar oluşturmak için --block
seçeneğini ota_from_target_files
parametresine iletin.
Eksiksiz güncellemeler oluşturun
Tam güncelleme, cihazın son durumunun tamamını (sistem, başlatma ve kurtarma bölümleri) içeren bir OTA paketidir. Cihaz, paketi alabildiği ve uygulayabildiği sürece 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ş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 ($OUT
içinde) oluşturur. Elde edilen .zip
dosyası, tardis
cihazı için OTA paketleri oluşturmak amacıyla gereken her şeyi içerir.
Ayrıca ota_from_target_files
öğesini python ikili programı olarak 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
içinde ayarlanır ve elde edilen python ikilisi out/
dizininde bulunur.
ota_update.zip
artık test cihazlarına gönderilmeye hazır (her şey test anahtarıyla imzalanır). Kullanıcı cihazları için kendi özel anahtarlarınızı yayınlanacak derlemeleri imzalama bölümünde açıklandığı şekilde oluşturup kullanın.
Artımlı güncellemeler oluşturun
Ek güncelleme, cihazda halihazırda bulunan verilere ikili yamalar içeren bir OTA paketidir. Artımlı güncellemelere sahip paketler değiştirilmemiş dosyaları içermedikleri 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 yeterlidir.
Artımlı güncelleme paketini yalnızca paketi oluştururken kullanılan kaynak derlemeye sahip 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ı bir güncelleme oluşturmak amacıyla yayınlama 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 derlemenin aynısını çalıştıran cihazlara dağıtın. PRODUCT_OUT
dizinindeki (fastboot flashall
ile birlikte yüklenen make
ile oluşturulanlar) yerine, PREVIOUS-tardis-target_files.zip
veya PREVIOUS-tardis-img.zip
içindeki resimleri (her ikisi de fastboot update
ile yüklenecek şekilde) PREVIOUS-tardis-target_files.zip
veya PREVIOUS-tardis-img.zip
biçiminde yüklemelisiniz. Artımlı paketi başka derlemelerin bulunduğu bir cihaza yüklemeye çalışmak, yükleme hatasına neden olur.make dist
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üncelleme için tam bir güncelleme sunun. Bu, kullanıcıların en son sürümü alabilmelerine ve uzun süren artımlı güncellemelerden kaçınmalarına yardımcı olur.
Birden fazla SKU için OTA paketi oluşturma
Android 11 veya sonraki sürümler, farklı SKU'lara sahip birden fazla cihaz için tek bir OTA paketi kullanılmasını destekler. Bu işlemi yapmak için hedef cihazların dinamik parmak izleri kullanacak şekilde yapılandırılması ve OTA meta verilerini, durum öncesi ve sonrası girişlere cihaz adı ve parmak izini içerecek şekilde güncellemek (OTA araçlarını kullanarak) gerekir.
SKU'lar hakkında
SKU'nun biçimi, birleşik derleme parametresi 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 kullanırken bu SKU'lar için tek bir resim kullanabilir. Örneğin, aşağıdaki SKU'nun birden fazla varyasyonu vardır:
SKU = <product><device><modifierA><modifierB><modifierC>
modifierA
, cihaz düzeyidir (ör. Pro, Premium veya Plus)modifierB
, donanım varyasyonu (radyo gibi)modifierC
, genel (ör. Kuzey Amerika, EMEA veya CHN) ya da ülkeye veya dile özgü (ör. JPN, ENG veya CHN) olabilir.
Birçok OEM, birden fazla 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 işlem, platform geliştirme sürecini basitleştirerek küçük özelleştirmeler gerektiren ancak farklı ürün adları olan cihazların ortak resimlerin (tardis
ve tardispro
gibi) paylaşılmasını sağlar.
Dinamik parmak izleri kullanma
Parmak izi; ro.product.brand
, ro.product.name
ve ro.product.device
gibi derleme parametrelerinin tanımlı bir birleşimidir. Bir cihazın parmak izi, sistem bölümü parmak izinden elde edilir ve cihazda çalıştırılan görüntülerin (ve baytların) benzersiz bir tanımlayıcısı 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
cihazlarda dinamik parmak izleri 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, cihaz adı, parmak izi ve ro.build.fingerprint
değerlerini ro.boot.product.hardware.sku
bootloader ö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 sonrası durumu 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 bir cihazın sahip olması beklenen durumu tanımlar. pre-
ve post-
alanlarının değerleri, aşağıdaki karşılık gelen derleme mülklerinden türetilir.
pre-device
değeri,ro.product.device
derleme özelliğinden türetilir.pre-build-incremental
vepost-build-incremental
değerleri,ro.build.version.incremental
derleme özelliğinden türetilir.pre-build
vepost-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. Bu veriler daha sonra OTA meta verilerini, cihaz adını ve parmak izini pre-
ve post-
koşullarında içerecek şekilde güncellemek için kullanılır (sınırlayıcı olarak dikey çizgi karakteri | kullanılır). --boot_variable_file
işareti aşağıdaki söz dizimine 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. İç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. Dosya, her satırın şu biçimde olduğu her satır için bir özellik bekler:prop_name=value1,value2
.
Örneğin, mülk ro.boot.product.hardware.sku=std,pro
olduğunda tardis
ve tardispro
cihazları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
Bu işlevi Android 10 çalıştıran cihazlarda desteklemek için referans uygulamasına göz atın.
Bu değişiklik listesi, build.prop
dosyasındaki import
ifadelerini koşullu olarak ayrıştırır. Böylece, özellik geçersiz kılmaları tanınır ve nihai OTA meta verilerine yansıtılır.