ota_from_target_files
aracını kullanarak build/make/tools/releasetools
içinde A/B sistem güncellemelerini veya A/B olmayan sistem güncellemelerini kullanan cihazlar için tam ve artımlı OTA paketleri oluşturabilirsiniz. Araç, giriş olarak Android derleme sistemi tarafından oluşturulan target-files.zip
dosyasını alır.
Android 11 veya sonraki sürümlerin yüklü olduğu cihazlarda, farklı SKU'lara sahip birden fazla cihaz için tek bir OTA paketi oluşturabilirsiniz. Bunun için hedef cihazların dinamik parmak izlerini kullanacak şekilde yapılandırılması ve OTA meta verilerinin güncellenerek cihaz adının ve parmak izinin ön koşul ve son koşul girişlerine eklenmesi 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 önceki sürümlerin yüklü olduğu cihazlar için blok tabanlı OTA paketleri oluşturmak üzere --block
seçeneğini ota_from_target_files
parametresine iletin.
Tam güncellemeler oluşturma
Tam güncelleme, cihazın son durumunun tamamını (sistem, başlatma ve kurtarma bölümleri) içeren bir OTA paketidir. Cihaz, paketi alıp uygulayabildiği sürece paket, cihazın mevcut durumundan bağımsız olarak derlemeyi yükleyebilir. Örneğin, aşağıdaki komutlar target-files.zip
cihazı için tardis
arşivini oluşturmak üzere 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 ($OUT
içinde) oluşturur. Ortaya çıkan .zip
dosyası, tardis
cihazı için OTA paketleri oluşturmak üzere gereken her şeyi içerir.
ota_from_target_files
öğesini Python ikilisi olarak da oluşturabilir 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 sonuçtaki python ikili dosyası out/
dizininde bulunur.
ota_update.zip
artık test cihazlarına gönderilmeye hazır (her şey test anahtarıyla imzalanmıştır). Kullanıcı cihazları için Yayın için derlemeleri imzalama başlıklı makalede 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, cihazda bulunan verilere yönelik ikili yamalar içeren bir OTA paketidir. Değişmeyen dosyaları içermeleri gerekmediğinden, artımlı güncellemeler içeren paketler 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 paketi oluşturmak için kullanılan kaynak derlemenin yüklü olduğu cihazlara yükleyebilirsiniz. Artımlı güncelleme oluşturmak için önceki derlemeye ait target_files.zip
dosyası (güncellemek istediğiniz derleme kaynağı) ve yeni derlemeye ait target_files.zip
dosyası gerekir. Örneğin, aşağıdaki komutlar tardis
cihazı için artımlı bir güncelleme oluşturmak üzere 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 benzerdir ve artımlı güncelleme paketi (incremental_ota_update.zip
), ilgili 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 derlemeyle tam olarak aynı derlemeyi çalıştıran cihazlara dağıtın. PREVIOUS-tardis-target_files.zip
veya PREVIOUS-tardis-img.zip
klasörlerindeki (her ikisi de make dist
ile oluşturulmuş olup fastboot update
ile flashlanacaktır) görüntüleri, PRODUCT_OUT
dizinindeki (make
ile oluşturulmuş olup fastboot flashall
ile flashlanacaktır) görüntüler yerine flashlamanız gerekir. Artımlı paketi başka bir derlemenin bulunduğu cihaza yüklemeye çalışmak yükleme hatasıyla sonuçlanır. Yükleme 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ı yükseltilmiş bir 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ümü yükleyebilir ve uzun bir yükleme dizisiyle artımlı güncellemeler yapmaktan kurtulabilir.
Birden fazla SKU için OTA paketleri oluşturma
Android 11 veya sonraki sürümlerde, farklı SKU'lara sahip birden fazla cihaz için tek bir OTA paketi kullanılabilir. Bunun için hedef cihazları dinamik parmak izlerini kullanacak şekilde yapılandırmanız ve OTA meta verilerini (OTA araçlarını kullanarak) ön ve son koşul girişlerine cihaz adını ve parmak izini içerecek şekilde güncellemeniz gerekir.
SKU'lar hakkında
SKU biçimi, birleştirilmiş build
parameter 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 kullanabilir ve bu SKU'lar için tek bir görüntü kullanabilir. Örneğin, aşağıdaki SKU'da birden fazla varyasyon vardır:
SKU = <product><device><modifierA><modifierB><modifierC>
modifierA
cihaz düzeyini (ör. Pro, Premium veya Plus) gösterir.modifierB
, donanım varyasyonudur (ör. radyo).modifierC
, genel (ör. NA, EMEA veya CHN) ya da ülkeye veya dile özgü (ör. JPN, ENG veya CHN) olabilen bölgedir.
Birçok 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 türetir. Bu işlem, platform geliştirme sürecini basitleştirir. Böylece, küçük özelleştirmeler içeren ancak farklı ürün adlarına sahip cihazlar ortak resimleri (ör. tardis
ve tardispro
) paylaşabilir.
Dinamik parmak izlerini kullanma
Parmak izi, ro.product.brand
, ro.product.name
ve ro.product.device
gibi derleme parametrelerinin tanımlanmış bir birleşimidir. Cihazın parmak izi, sistem bölümü parmak izinden elde edilir ve cihazda çalışan görüntülerin (ve baytların) benzersiz tanımlayıcısı olarak kullanılır. Dinamik parmak izi oluşturmak için cihazın build.prop
dosyasında dinamik mantık kullanarak cihaz başlatma sırasında önyükleyici değişkenlerinin değerini alın, ardından bu verileri kullanarak cihaz için dinamik bir parmak izi oluşturun.
Örneğin, tardis
ve tardispro
cihazlarda dinamik parmak izlerini kullanmak için aşağıdaki dosyaları 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 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 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 özelliğinden türetilir.pre-build
vepost-build
değerleri,ro.build.fingerprint
derleme özelliğinden elde edilir.
Android 11 veya sonraki sürümlerin yüklü olduğu 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ında --boot_variable_file
işaretini kullanabilirsiniz. Ardından, OTA meta verilerini güncellemek için veriler kullanılır. Bu güncelleme, pre-
ve post-
koşullarına cihaz adını ve parmak izini ekler (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. Bazıro.product.*
özellikleri içe aktarma ifadesiyle geçersiz kılındığında olası çalışma zamanı parmak izlerini hesaplamak için kullanılır. Dosyada her satırda bir mülk olması beklenir. Her satırda şu biçim kullanılır:prop_name=value1,value2
.
Örneğin, özellik ro.boot.product.hardware.sku=std,pro
olduğunda tardis
ve tardispro
cihazlarını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
Android 10 çalıştıran cihazlarda bu işlevin desteklenmesi için referans
uygulamaya bakın.
Bu değişiklik listesi, build.prop
dosyasındaki import
ifadelerini koşullu olarak ayrıştırır. Bu sayede, özellik geçersiz kılmalarının tanınması ve nihai OTA meta verilerine yansıtılması sağlanır.