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
vepost-build-incremental
değerlerro.build.version.incremental
build özelliğinden türetilir. - Yapı
pre-build
post-build
değerlerro.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.