A/B sistem güncellemeleri veya A/B dışındaki sistem güncellemeleri kullanan cihazlar için tam ve artımlı OTA paketleri oluşturmak üzere build/make/tools/releasetools
'da sağlanan ota_from_target_files
aracını kullanabilirsiniz. Araç, Android derleme sistemi tarafından üretilen target-files.zip
dosyasını giriş olarak alır.
Android 11 veya sonraki sürümleri çalıştıran cihazlar için farklı SKU'lara sahip birden fazla cihaz için tek bir OTA paketi oluşturabilirsiniz. Bunu yapmak için hedef cihazları dinamik parmak izleri kullanacak şekilde yapılandırmanız ve OTA meta verilerini ön ve son koşul girişlerine cihaz adını ve parmak izini içerecek şekilde güncellemeniz 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 daha eski sürümleri çalıştıran cihazlar için blok tabanlı OTA paketleri oluşturmak istiyorsanız --block
seçeneğini ota_from_target_files
parametresine iletin.
Tam güncellemeler oluşturma
Tam güncelleme, cihazın nihai durumunun tamamını (sistem, önyükleme ve kurtarma bölümleri) içeren bir OTA paketidir. Cihaz paketi alıp uygulayabiliyorsa 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şivi oluşturmak üzere sürüm 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
biçiminde) oluşturur. Elde edilen .zip
dosyası, tardis
cihazı için OTA paketleri oluşturmak için gereken her şeyi içerir.
ota_from_target_files
'yi bir Python ikili dosyası olarak da 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
'da ayarlanır ve oluşturulan 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 derlemeleri imzalama bölümünde açıklandığı şekilde 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. Artımlı güncelleme içeren paketler, değişmeyen dosyaları içermek zorunda olmadıkları 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 gerekir.
Artımlı güncelleme paketini yalnızca paketin oluşturulmasında kullanılan kaynak derlemenin bulunduğu 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ı güncelleme oluşturmak üzere 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 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 derlemeyle tam olarak aynı derlemeyi çalıştıran cihazlara dağıtın. PRODUCT_OUT
dizinindeki (fastboot flashall
ile oluşturulacak make
ile oluşturulan) videolar yerine,
PREVIOUS-tardis-target_files.zip
veya PREVIOUS-tardis-img.zip
(her ikisi de make dist
ile oluşturulacak ve fastboot update
ile yansıtılacak) resimleri yüklemeniz gerekir. Artımlı paketi
başka bir derlemenin bulunduğu bir cihaza yüklemeye çalışmak, yükleme hatasına neden olur. 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üncellemede bir tam güncelleme sunun. Bu sayede kullanıcılar en son sürüme geçebilir ve artımlı güncellemelerin uzun yükleme sırasını atlayabilir.
Birden fazla SKU için OTA paketleri oluşturma
Android 11 veya sonraki sürümler, farklı SKU'lara sahip birden fazla cihaz için tek bir OTA paketinin kullanılmasını destekler. Bunu yapmak için hedef cihazları dinamik parmak izleri kullanacak şekilde yapılandırmanız ve OTA meta verilerini (OTA araçlarını kullanarak) koşul öncesi ve sonrası girişlerine cihaz adını ve parmak izini içerecek şekilde güncellemeniz gerekir.
SKU'lar hakkında
SKU'nun biçimi, birleştirilmiş derleme parametresi değerlerinin bir varyasyonudur ve genellikle mevcut build_fingerprint
parametrelerinin tanımlanmamış 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 varyantı vardır:
SKU = <product><device><modifierA><modifierB><modifierC>
modifierA
, cihaz düzeyidir (ör. Pro, Premium veya Plus)modifierB
, donanım varyantıdır (ör. radyo)modifierC
, genel (ör. NA, EMEA veya CHN) ya da ülkeye ya da dile özel (ör. JPN, ENG veya CHN) olabilen bölgedir.
Birçok OEM, birden fazla SKU için tek bir resim kullanır ve ardından cihaz açıldıktan sonra çalışma zamanında nihai ürün adını ve cihaz parmak izini oluşturur. Bu işlem, platform geliştirme sürecini basitleştirerek küçük özelleştirmelere sahip ancak farklı ürün adlarına sahip cihazların ortak resimleri (tardis
ve tardispro
gibi) paylaşmasına olanak tanır.
Dinamik parmak izleri kullanma
Parmak izi, ro.product.brand
, ro.product.name
ve ro.product.device
gibi derleme parametrelerinin tanımlanmış bir birleşimidir. Bir cihazın parmak izi, sistem bölümü parmak izinden türetilir ve cihazda çalışan resimlerin (ve baytların) benzersiz tanımlayıcı 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
cihazlar için dinamik parmak izleri kullanmak istiyorsanız 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ı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 bir cihazın sahip olması gereken durumu tanımlar. post-build-incremental
ve post-build
değerleri, OTA paketi yüklendikten sonra 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
vepost-build-incremental
değerleri,ro.build.version.incremental
derleme mülkünden 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. 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. İç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. Dosyada, her satırın aşağıdaki biçime sahip olduğu her satırda bir mülk beklenir:prop_name=value1,value2
.
Örneğin, mülk 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
Android 10 çalıştıran cihazlarda bu işlevi desteklemek için referans uygulamaya bakın.
Bu değişiklik listesi, build.prop
dosyasında import
ifadelerini koşullu olarak ayrıştırır. Bu sayede, tesis geçersiz kılmaları tanınabilir ve nihai OTA meta verilerine yansıtılabilir.