Android 10, APK tabanlı saat dilimi verileri güncelleme mekanizmasının (Android 8.1 ve Android 9'da kullanılabilir) desteğini sonlandırır ve bunun yerine APEX tabanlı bir modül güncelleme mekanizması kullanır. AOSP 8.1-13 sürümlerinde, OEM'lerin APK tabanlı güncellemeleri etkinleştirmesi için gereken platform kodu hâlâ yer almaktadır. Bu nedenle, Android 10'a yükseltme yapan cihazlar, iş ortakları tarafından sağlanan saat dilimi verisi güncellemelerini APK aracılığıyla almaya devam edebilir. Ancak, APK güncelleme mekanizması, modül güncellemelerini de alan bir üretim cihazında kullanılmamalıdır. Çünkü APK tabanlı bir güncelleme, APEX tabanlı bir güncellemenin yerini alır (yani, APK güncellemesi alan bir cihaz, APEX tabanlı güncellemeleri yoksayar).
Saat dilimi güncellemeleri (Android 10 ve sonraki sürümler)
Android 10 ve sonraki sürümlerde desteklenen Saat Dilimi Verileri modülü, Android cihazlarda yaz saati uygulamasını ve saat dilimlerini günceller. Böylece, dini, siyasi ve jeopolitik nedenlerle sık sık değişebilen veriler standart hale getirilir.
Güncellemeler aşağıdaki süreçle yapılır:
- IANA bir veya daha fazla hükümetin ülkelerindeki saat dilimi kuralını değiştirmesi üzerine Saat Dilimi Veritabanı'nda güncelleme yayınlar.
- Google veya Android iş ortağı, güncellenmiş saat dilimlerini içeren bir Saat Dilimi Verileri modülü güncellemesi (APEX dosyası) hazırlar.
- Son kullanıcı cihazı güncellemeyi indirir, yeniden başlatılır ve değişiklikleri uygular. Ardından cihazın saat dilimi verileri, güncellemedeki yeni saat dilimi verilerini içerir.
Modüller hakkında ayrıntılı bilgi için Modüler Sistem Bileşenleri başlıklı makaleyi inceleyin.
Saat dilimi güncellemeleri (Android 8.1-9)
Not: APK tabanlı saat dilimi verisi güncelleme mekanizması özelliği, Android 14'ten itibaren tamamen kaldırıldı ve kaynak kodunda bulunmuyor. İş ortakları, Time Zone Mainline modülüne tamamen geçiş yapmalıdır.
Android 8.1 ve Android 9'da OEM'ler, sistem güncellemesi gerektirmeden güncellenmiş saat dilimi kuralları verilerini cihazlara göndermek için APK tabanlı bir mekanizma kullanabilir. Bu mekanizma, kullanıcıların zamanında güncelleme almasını (böylece Android cihazın kullanım ömrünü uzatır) ve Android iş ortaklarının saat dilimi güncellemelerini sistem görüntüsü güncellemelerinden bağımsız olarak test etmesini sağlar.
Android temel kitaplıklar ekibi, stok Android cihazlarda saat dilimi kurallarını güncellemek için gerekli veri dosyalarını sağlar. OEM'ler, cihazları için saat dilimi güncellemeleri oluştururken bu veri dosyalarını kullanmayı veya tercih ederlerse kendi veri dosyalarını oluşturmayı seçebilir. Her durumda, OEM'ler desteklenen cihazları için saat dilimi kuralı güncellemelerinin kalite güvencesi/testi, zamanlaması ve kullanıma sunulması üzerinde kontrolü elinde tutar.
Android saat dilimi kaynak kodu ve verileri
Bu özelliği kullanmayanlar da dahil olmak üzere tüm stok Android cihazlarda saat dilimi kuralları verilerinin olması ve /system
bölümünde varsayılan bir saat dilimi kuralları veri kümesiyle gönderilmesi gerekir. Bu veriler daha sonra Android kaynak ağacındaki aşağıdaki kitaplıklardan gelen kod tarafından kullanılır:
libcore/
'dan (ör.java.util.TimeZone
) yönetilen kod,tzdata
vetzlookup.xml
dosyalarını kullanır.bionic/
içindeki yerel kitaplık kodu (örneğin,mktime
için localtime sistem çağrıları)tzdata
dosyasını kullanır.external/icu/
içindeki ICU4J/ICU4C kitaplık kodu, icu.dat
dosyasını kullanır.
Bu kitaplıklar, /data/misc/zoneinfo/current
dizininde bulunabilecek yer paylaşımı dosyalarını takip eder. Yer paylaşımı dosyalarının, geliştirilmiş saat dilimi kuralları verilerini içermesi beklenir. Böylece cihazlar, /system
değiştirilmeden güncellenebilir.
Saat dilimi kuralı verilerine ihtiyaç duyan Android sistem bileşenleri önce aşağıdaki konumları kontrol eder:
libcore/
vebionic/
kodları,tzdata
vetzlookup.xml
dosyalarının/data
kopyasını kullanır.- ICU4J/ICU4C kodu,
/data
içindeki dosyaları kullanır ve mevcut olmayan veriler (biçimler, yerelleştirilmiş dizeler vb.) için/system
dosyalarına geri döner.
Distro dosyaları
Distro .zip
dosyaları, /data/misc/zoneinfo/current
dizinini doldurmak için gereken veri dosyalarını içerir. Dağıtım dosyaları, cihazların sürüm oluşturma sorunlarını algılamasına olanak tanıyan meta veriler de içerir.
Dağıtım dosyası biçimi, içerikler ICU sürümü, Android platformu gereksinimleri ve diğer sürüm değişiklikleriyle değiştiği için Android sürümüne bağlıdır. Android, desteklenen Android sürümleri için her IANA güncellemesinde dağıtım dosyaları sağlar (platform sistem dosyalarını güncellemenin yanı sıra). OEM'ler, cihazlarını güncel tutmak için bu dağıtım dosyalarını kullanabilir veya Android kaynak ağacını (dağıtım dosyaları oluşturmak için gereken komut dosyalarını ve diğer dosyaları içerir) kullanarak kendi dosyalarını oluşturabilir.
Saat dilimi güncelleme bileşenleri
Saat dilimi kuralları güncellemesi, dağıtım dosyalarının cihaza aktarılmasını ve içerdiği dosyaların güvenli bir şekilde yüklenmesini içerir. Aktarma ve yükleme için aşağıdakiler gerekir:
- Platform hizmeti işlevi
(
timezone.RulesManagerService
), varsayılan olarak devre dışıdır. OEM'ler, işlevselliği yapılandırma üzerinden etkinleştirmelidir.RulesManagerService
, sistem sunucusu sürecinde çalışır ve/data/misc/zoneinfo/staged
'a yazarak saat dilimi güncelleme işlemlerini aşamalandırır.RulesManagerService
, halihazırda hazırlanmış işlemleri de değiştirebilir veya silebilir. -
TimeZoneUpdater
, güncellenemeyen bir sistem uygulaması (diğer adıyla Güncelleyici uygulaması). OEM'ler, bu özelliği kullanan cihazların sistem görüntüsüne bu uygulamayı dahil etmelidir. - OEM
TimeZoneData
, dağıtım dosyalarını cihaza taşıyan ve bunları Güncelleyici uygulamasına sunan, güncellenebilir bir sistem uygulamasıdır (diğer adıyla Veri uygulaması). OEM'ler, bu uygulamayı özelliği kullanan cihazların sistem görüntüsüne dahil etmelidir. -
tzdatacheck
, saat dilimi güncellemelerinin doğru ve güvenli şekilde çalışması için gereken başlatma zamanı ikilisi.
Android kaynak ağacı, yukarıdaki bileşenler için genel kaynak kodu içerir. OEM, bu kodu değişiklik yapmadan kullanmayı tercih edebilir. Test kodu, OEM'lerin özelliği doğru şekilde etkinleştirip etkinleştirmediğini otomatik olarak kontrol etmesini sağlamak için sağlanır.
Dağıtım kurulumu
Dağıtım yükleme süreci aşağıdaki adımları içerir:
- Veri uygulaması, uygulama mağazasından indirilerek veya yan yükleme yoluyla güncellenir. Sistem sunucusu işlemi (
timezone.RulesManagerServer/timezone.PackageTracker
sınıfları aracılığıyla), yapılandırılmış, OEM'e özgü Veri uygulaması paket adında yapılan değişiklikleri izler.
1. şekil. Veri uygulaması güncellemeleri.
- Sistem sunucusu işlemi, güncelleme uygulamasında benzersiz ve tek kullanımlık bir jetonla hedeflenmiş bir amaç yayınlayarak güncelleme kontrolünü tetikler. Sistem sunucusu, oluşturduğu en son jetonu takip ederek tetiklediği en son kontrolün ne zaman tamamlandığını belirleyebilir. Diğer tüm jetonlar yoksayılır.
Şekil 2. Güncelleme kontrolünü tetikleyin.
- Güncelleme kontrolü sırasında, Güncelleyici uygulaması aşağıdaki görevleri gerçekleştirir:
- RulesManagerService'i çağırarak mevcut cihaz durumunu sorgular.
3.Şekil Data uygulaması güncellemeleri, RulesManagerService'i çağırıyor.
- Dağıtım hakkında bilgi almak için iyi tanımlanmış bir ContentProvider URL'si ve sütun özellikleri sorgulayarak Veri uygulamasını sorgular.
Şekil 4. Uygulama güncellemeleriyle ilgili veriler, dağıtım hakkında bilgi edinme.
- RulesManagerService'i çağırarak mevcut cihaz durumunu sorgular.
- Güncelleyici uygulaması, sahip olduğu bilgilere göre uygun işlemi yapar. Kullanılabilir işlemler şunlardır:
- Yükleme isteğinde bulunun. Dağıtım verileri, Veri uygulamasından okunur ve sistem sunucusundaki RulesManagerService'e iletilir. RulesManagerService, dağıtım biçimi sürümünün ve içeriğinin cihaza uygun olduğunu yeniden onaylar ve yüklemeyi hazırlar.
- Kaldırma isteğinde bulunma (bu nadiren gerçekleşir). Örneğin,
/data
içindeki güncellenmiş APK devre dışı bırakılıyorsa veya kaldırılıyorsa ve cihaz/system
'deki sürüme geri dönüyorsa. - Hiçbir işlem yapmamayı tercih edebilirsiniz. Veri uygulaması dağıtımının geçersiz olduğu tespit edildiğinde oluşur.
5.şekil Kontrol tamamlandı.
- Yeniden başlatma ve tzdatacheck. Cihaz bir sonraki başlatılışında,
tzdatacheck ikilisi, hazırlanan tüm işlemleri yürütür. tzdatacheck ikili programı aşağıdaki görevleri gerçekleştirebilir:
- Diğer sistem bileşenleri dosyaları açıp kullanmaya başlamadan önce
/data/misc/zoneinfo/current
dosyalarının oluşturulması, değiştirilmesi ve/veya silinmesi işlemlerini yaparak kademeli işlemi yürütün. /data
içindeki dosyaların mevcut platform sürümü için doğru olup olmadığını kontrol edin. Cihaz yeni bir sistem güncellemesi aldıysa ve dağıtım biçimi sürümü değiştiyse bu durum geçerli olmayabilir.- IANA kuralları sürümünün,
/system
sürümüyle aynı veya daha yeni olduğundan emin olun. Bu, sistem güncellemesinin cihazı/system
görüntüsünde bulunanlardan daha eski saat dilimi kuralları verileriyle bırakmasına karşı koruma sağlar.
- Diğer sistem bileşenleri dosyaları açıp kullanmaya başlamadan önce
Güvenilirlik
Uçtan uca yükleme işlemi eşzamansızdır ve üç işletim sistemi işlemine bölünmüştür. Yükleme sırasında herhangi bir noktada cihazın gücü kesilebilir, disk alanı tükenebilir veya başka sorunlar yaşanabilir. Bu durum, yükleme kontrolünün tamamlanmamasına neden olur. En iyi başarısız durumda, Updater uygulaması sistem sunucusuna başarısız olduğunu bildirir. En kötü başarısız durumda ise RulesManagerService hiç çağrı almaz.
Bunu işlemek için sistem sunucusu kodu, tetiklenen bir güncelleme kontrolünün tamamlanıp tamamlanmadığını ve Veri Uygulaması'nın son kontrol edilen sürüm kodunun ne olduğunu takip eder. Cihaz boşta ve şarj olurken sistem sunucusu kodu mevcut durumu kontrol edebilir. Eksik bir güncelleme kontrolü veya beklenmedik bir veri uygulaması sürümü algılarsa kendiliğinden güncelleme kontrolü başlatır.
Güvenlik
Etkinleştirildiğinde, sistem sunucusundaki RulesManagerService kodu, sistemin kullanımının güvenli olduğundan emin olmak için çeşitli kontroller gerçekleştirir.
- Kötü yapılandırılmış bir sistem görüntüsüne işaret eden sorunlar, cihazın başlatılmasını engeller. Örneğin, Updater veya Data uygulamasının kötü yapılandırılması ya da Updater veya Data uygulamasının
/system/priv-app
'da olmaması bu tür sorunlara örnek verilebilir. - Kötü bir Veri uygulamasının yüklendiğini gösteren sorunlar, cihazın başlatılmasını engellemez ancak güncelleme kontrolünün tetiklenmesini engeller. Gerekli sistem izinlerinin olmaması veya Veri uygulamasının beklenen URI'de bir ContentProvider'ı kullanıma sunmaması bu durumlara örnek olarak verilebilir.
/data/misc/zoneinfo
dizinlerinin dosya izinleri SELinux kuralları kullanılarak zorunlu kılınır. Tüm APK'larda olduğu gibi, Veri uygulaması da /system/priv-app
sürümünü imzalamak için kullanılan aynı anahtarla imzalanmalıdır. Veri uygulamasının, OEM'ye özel bir paket adı ve anahtarı olması beklenir.
Saat dilimi güncellemelerini entegre etme
Saat dilimi güncelleme özelliğini etkinleştirmek için OEM'ler genellikle:
- Kendi Veri uygulamalarını oluşturabilirler.
- Güncelleyici ve Veri uygulamalarını sistem görüntüsü derlemesine dahil edin.
- RulesManagerService'i etkinleştirmek için sistem sunucusunu yapılandırın.
Hazırlık
Üreticiler başlamadan önce aşağıdaki politika, kalite güvencesi ve güvenlik konularını incelemelidir:
- Veri uygulamaları için özel bir uygulamaya özgü imzalama anahtarı oluşturun.
- Hangi cihazların güncelleneceğini ve güncellemelerin yalnızca ihtiyaç duyan cihazlara yüklendiğinden nasıl emin olunacağını anlamak için saat dilimi güncellemeleriyle ilgili bir yayın ve sürüm oluşturma stratejisi oluşturun. Örneğin, OEM'ler tüm cihazları için tek bir Veri uygulaması kullanmak isteyebilir veya farklı cihazlar için farklı Veri uygulamaları kullanmayı tercih edebilir. Bu karar, paket adı seçimini, kullanılan sürüm kodlarını ve kalite kontrol stratejisini etkiler.
- Kullanıcıların AOSP'den alınan stok Android saat dilimi verilerini mi kullanmak istediğini yoksa kendi verilerini mi oluşturmak istediğini öğrenin.
Veri uygulaması oluşturma
AOSP, packages/apps/TimeZoneData
içinde bir Veri uygulaması oluşturmak için gereken tüm kaynak kodunu ve derleme kurallarını içerir. Ayrıca AndroidManifest.xml
ve packages/apps/TimeZoneData/oem_template
içinde bulunan diğer dosyalar için talimatlar ve örnek şablonlar da bulunur. Örnek şablonlar, hem gerçek Veri uygulaması APK'sı için bir derleme hedefi hem de Veri uygulamasının test sürümlerini oluşturmaya yönelik ek hedefler içerir.
OEM'ler, Veri uygulamasını kendi simgeleri, adları, çevirileri ve diğer ayrıntılarıyla özelleştirebilir. Ancak Veri uygulaması başlatılamadığından simge yalnızca Ayarlar > Uygulamalar ekranında görünür.
Veri uygulaması, sistem görüntüsüne (ilk sürüm için) eklenmeye uygun APK'ler üreten ve bir uygulama mağazası aracılığıyla imzalanıp dağıtılan (sonraki güncellemeler için) bir tapas derlemesiyle oluşturulmak üzere tasarlanmıştır. Tapas kullanma hakkında ayrıntılı bilgi için Building the Data app using tapas başlıklı makaleyi inceleyin.
OEM'ler, /system/priv-app
içindeki bir cihazın sistem görüntüsünde önceden oluşturulmuş Veri uygulamasını yüklemelidir. OEM'ler, önceden oluşturulmuş APK'ları (tapas derleme işlemiyle oluşturulur) sistem görüntüsüne dahil etmek için packages/apps/TimeZoneData/oem_template/data_app_prebuilt
içindeki örnek dosyaları kopyalayabilir. Örnek şablonlar, test paketlerine veri uygulamasının test sürümlerini dahil etmek için derleme hedeflerini de içerir.
Güncelleyici ve Veri uygulamalarını sistem görüntüsüne dahil etme
OEM'ler, Updater ve Data uygulaması APK'larını sistem görüntüsünün /system/priv-app
dizinine yerleştirmelidir. Bunun için sistem görüntüsü derlemesi, Updater uygulaması ve Data uygulaması önceden oluşturulmuş hedeflerini açıkça içermelidir.
Güncelleyici uygulaması, platform anahtarıyla imzalanmalı ve diğer sistem uygulamaları gibi dahil edilmelidir. Hedef, packages/apps/TimeZoneUpdater
içinde TimeZoneUpdater
olarak tanımlanır. Veri uygulaması dahil etme, OEM'ye özeldir ve önceden oluşturma için seçilen hedef adına bağlıdır.
Sistem sunucusunu yapılandırma
OEM'ler, saat dilimi güncellemelerini etkinleştirmek için frameworks/base/core/res/res/values/config.xml
içinde tanımlanan yapılandırma özelliklerini geçersiz kılarak sistem sunucusunu yapılandırabilir.
Özellik | Açıklama | Geçersiz kılma gerekli mi? |
---|---|---|
config_enableUpdateableTimeZoneRules |
RulesManagerService'in etkinleştirilmesi için true olarak ayarlanmalıdır. |
Evet |
config_timeZoneRulesUpdateTrackingEnabled |
Sistemin Veri uygulamasıyla ilgili değişiklikleri dinlemesi için true olarak ayarlanmalıdır. |
Evet |
config_timeZoneRulesDataPackage |
OEM'e özgü Veri uygulamasının paket adı. | Evet |
config_timeZoneRulesUpdaterPackage |
Varsayılan Updater uygulaması için yapılandırılmıştır. Yalnızca farklı bir Updater uygulaması uygulaması sağlarken değiştirin. | Hayır |
config_timeZoneRulesCheckTimeMillisAllowed |
RulesManagerService tarafından tetiklenen bir güncelleme kontrolü ile yükleme, kaldırma veya hiçbir şey yapmama yanıtı arasında izin verilen süre. Bu noktadan sonra kendiliğinden güvenilirlik tetikleyicisi oluşturulabilir. | Hayır |
config_timeZoneRulesCheckRetryCount |
RulesManagerService'in daha fazla kural oluşturmayı durdurmadan önce izin verilen sıralı başarısız güncelleme kontrolü sayısı. | Hayır |
Yanlış yapılandırılmış bir cihaz önyükleme yapmayı reddedebileceğinden yapılandırma geçersiz kılmaları sistem görüntüsünde (satıcı veya diğer değil) olmalıdır. Yapılandırma geçersiz kılmaları satıcı görüntüsündeyse veri uygulaması içermeyen (veya farklı veri uygulaması/güncelleyici uygulaması paket adlarına sahip) bir sistem görüntüsüne güncelleme yapmak yanlış yapılandırma olarak kabul edilir.
xTS testi
xTS, Tradefed (ör. CTS ve VTS) kullanılarak yapılan standart Android test paketlerine benzer, OEM'e özgü tüm test paketlerini ifade eder. Bu tür test paketlerine sahip OEM'ler, aşağıdaki konumlarda sağlanan Android saat dilimi güncelleme testlerini ekleyebilir:
packages/apps/TimeZoneData/testing/xts
temel otomatik işlevsel test için gereken kodu içerir.packages/apps/TimeZoneData/oem_template/xts
, Tradefed benzeri bir xTS paketine testleri dahil etmek için örnek bir dizin yapısı içerir. Diğer şablon dizinlerinde olduğu gibi, OEM'lerin de şablonları kopyalayıp kendi ihtiyaçlarına göre özelleştirmesi beklenir.packages/apps/TimeZoneData/oem_template/data_app_prebuilt
, test için gereken önceden oluşturulmuş test APK'larını dahil etmek üzere derleme zamanı yapılandırması içerir.
Saat dilimi güncellemeleri oluşturma
IANA yeni bir saat dilimi kuralları grubu yayınladığında Android çekirdek kitaplıkları ekibi, AOSP'deki sürümleri güncellemek için yamalar oluşturur. Stok Android sistemini ve dağıtım dosyalarını kullanan OEM'ler bu commit'leri alabilir, bunları kullanarak Veri uygulamalarının yeni bir sürümünü oluşturabilir ve ardından yeni sürümü yayınlayarak üretimdeki cihazlarını güncelleyebilir.
Veri uygulamaları, Android sürümleriyle yakından ilişkili dağıtım dosyaları içerdiğinden, OEM'ler, güncellemek istedikleri her desteklenen Android sürümü için Veri uygulamasının yeni bir sürümünü oluşturmalıdır. Örneğin, bir OEM, Android 8.1, 9 ve 10 cihazları için güncelleme sağlamak istiyorsa işlemi üç kez tamamlaması gerekir.
1. adım: Sistem/saat dilimi ve harici/icu veri dosyalarını güncelleyin
Bu adımda OEM'ler, AOSP'deki release-dev dallarından system/timezone
ve external/icu
için stok Android taahhütlerini alır ve bu taahhütleri Android kaynak kodunun kopyalarına uygular.
Sistem/saat dilimi AOSP yaması, system/timezone/input_data
ve system/timezone/output_data
konumlarındaki güncellenmiş dosyaları içerir. Ek yerel düzeltmeler yapması gereken OEM'ler, giriş dosyalarını değiştirebilir, ardından system/timezone/input_data
ve external/icu
içindeki dosyaları kullanarak output_data
biçiminde dosyalar oluşturabilir.
En önemli dosya, system/timezone/output_data/distro/distro.zip
'dır. Bu dosya, Veri uygulaması APK'sı oluşturulduğunda otomatik olarak eklenir.
2. adım: Veri uygulamasının sürüm kodunu güncelleyin
Bu adımda OEM'ler, Veri uygulamasının sürüm kodunu günceller. Derleme, distro.zip
sürümünü otomatik olarak alır ancak Veri uygulamasının yeni sürümünün yeni bir sürüm kodu olmalıdır. Böylece yeni olarak tanınır ve önceden yüklenmiş bir Veri uygulamasının veya önceki bir güncelleme ile cihaza yüklenmiş bir Veri uygulamasının yerine kullanılır.
package/apps/TimeZoneData/oem_template/data_app
konumundan kopyalanan dosyaları kullanarak Veri uygulamasını oluştururken APK'ya uygulanan sürüm kodunu/sürüm adını Android.mk
konumunda bulabilirsiniz:
TIME_ZONE_DATA_APP_VERSION_CODE := TIME_ZONE_DATA_APP_VERSION_NAME :=
Benzer girişler testing/Android.mk
içinde bulunabilir (ancak test sürümü kodları, sistem görüntüsü sürümünden yüksek olmalıdır). Ayrıntılar için örnek sürüm kodu stratejisi
şemasına bakın. Örnek şema veya benzer bir şema kullanılıyorsa test
sürümü kodlarının gerçek sürüm kodlarından daha yüksek olacağı garanti edildiğinden
güncellenmesi gerekmez.
3. adım: Yeniden oluşturun, imzalayın, test edin ve yayınlayın
Bu adımda OEM'ler, APK'yı tapas kullanarak yeniden oluşturur, oluşturulan APK'yı imzalar, ardından APK'yı test edip yayınlar:
- Henüz piyasaya sürülmemiş cihazlar için (veya piyasaya sürülmüş bir cihazda sistem güncellemesi hazırlanırken) sistem görüntüsünde ve xTS testlerinde en yeni APK'ların bulunması için yeni APK'ları Data uygulamasının önceden oluşturulmuş dizinine gönderin. OEM'ler, yeni dosyanın doğru şekilde çalıştığını (yani CTS'yi ve OEM'e özel tüm otomatik ve manuel testleri geçtiğini) test etmelidir.
- Artık sistem güncellemesi almayan yayınlanmış cihazlar için imzalı APK yalnızca bir uygulama mağazası aracılığıyla yayınlanabilir.
OEM'ler, güncellenen Veri uygulamasının yayınlanmadan önce cihazlarında kalite güvencesi ve testinden sorumludur.
Veri uygulaması sürüm kodu stratejisi
Cihazların doğru APK'ları almasını sağlamak için Veri uygulamasının uygun bir sürüm oluşturma stratejisine sahip olması gerekir. Örneğin, uygulama mağazasından indirilen APK'dan daha eski bir APK içeren bir sistem güncellemesi alınırsa uygulama mağazası sürümü korunmalıdır.
APK sürüm kodu aşağıdaki bilgileri içermelidir:
- Dağıtım biçimi sürümü (ana + alt)
- Artan (opak) sürüm numarası
Şu anda, her API düzeyi genellikle ICU'nun yeni bir sürümüyle ilişkilendirildiğinden (bu da dağıtım dosyalarını uyumsuz hale getirir) platform API düzeyi, dağıtım biçimi sürümüyle güçlü bir şekilde ilişkilidir. Gelecekte Android, bir dağıtım dosyasının birden fazla Android platform sürümünde çalışabilmesi için bu durumu değiştirebilir (ve veri uygulaması sürüm kodu şemasında API düzeyi kullanılmaz).
Örnek sürüm kodu stratejisi
Bu örnek sürüm oluşturma numarası şeması, daha yüksek dağıtım biçimi sürümlerinin daha düşük dağıtım biçimi sürümlerinin yerini almasını sağlar.
AndroidManifest.xml
, eski cihazların işleyebileceklerinden daha yüksek bir dağıtım biçimi sürümüne sahip sürümler almasını önlemek için android:minSdkVersion
kullanır.

6.şekil Örnek sürüm kodu stratejisi.
Örnek | Değer | Amaç |
---|---|---|
Y | Rezervasyon yapıldı | Gelecekte alternatif şemaların/test APK'larının kullanılmasına olanak tanır. Başlangıçta (örtülü olarak) 0'dır. Temel tür, imzalı 32 bitlik bir int türü olduğundan bu şema, gelecekteki iki numaralandırma şeması revizyonunu destekler. |
01 | Ana biçim sürümü | 3 ondalık basamaklı ana biçim sürümünü izler. Dağıtım biçimi 3 ondalık basamağı destekler ancak burada yalnızca 2 basamak kullanılır. API düzeyi başına beklenen büyük artış göz önüne alındığında 100'e ulaşılması olası değildir. Ana sürüm 1, API düzeyi 27'ye eşdeğerdir. |
1 | Alt biçim sürümü | 3 ondalık basamaklı alt biçim sürümünü izler. Dağıtım biçimi 3 ondalık basamağı destekler ancak burada yalnızca 1 basamak kullanılır. 10'a ulaşması pek olası değildir. |
X | Rezervasyon yapıldı | Üretim sürümleri için 0'dır (ve test APK'ları için farklı olabilir). |
ZZZZZ | Opak sürüm numarası | İsteğe bağlı olarak ayrılan ondalık sayı. Gerekirse araya giren güncellemelerin yapılmasına olanak tanıyan boşluklar içerir. |
Ondalık yerine ikili sistem kullanılsaydı şema daha iyi paketlenebilirdi ancak bu şema, insanlar tarafından okunabilme avantajına sahiptir. Tam sayı aralığı tükendiyse Veri uygulaması paket adı değişebilir.
Sürüm adı, ayrıntıların kullanıcılar tarafından okunabilir bir gösterimidir. Örneğin: major=001,minor=001,iana=2017a, revision=1,respin=2
.
Örnekler aşağıdaki tabloda gösterilmektedir.
# | Sürüm kodu | minSdkVersion | {Major format version},{Minor format version},{IANA rules version},{Revision} |
---|---|---|---|
1 | 11000010 | O-MR1 | major=001,minor=001,iana=2017a,revision=1 |
2 | 21000010 | P | major=002,minor=001,iana=2017a,revision=1 |
3 | 11000020 | O-MR1 | major=001,minor=001,iana=2017a,revision=2 |
4 | 11000030 | O-MR1 | major=001,minor=001,iana=2017b,revision=1 |
5 | 21000020 | P | major=002,minor=001,iana=2017b,revision=1 |
6 | 11000040 | O-MR1 | major=001,minor=001,iana=2018a,revision=1 |
7 | 21000030 | P | major=002,minor=001,iana=2018a,revision=1 |
8 | 1123456789 | - | - |
9 | 11000021 | O-MR1 | major=001,minor=001,iana=2017a,revision=2,respin=2 |
- 1. ve 2. örneklerde, aynı 2017a IANA sürümünün farklı ana biçim sürümlerine sahip iki APK sürümü gösterilmektedir. 2, 1'den sayısal olarak daha yüksektir. Bu, yeni cihazların daha yüksek biçim sürümlerini almasını sağlamak için gereklidir. minSdkVersion, P sürümünün O cihazlarına sağlanmamasını sağlar.
- 3. örnek, 1. örneğin düzeltilmiş/düzeltilmiş halidir ve sayısal olarak 1. örnekten daha yüksektir.
- 4. ve 5. örneklerde O-MR1 ve P için 2017b sürümleri gösterilmektedir. Sayısal olarak daha yüksek oldukları için, ilgili öncüllerinin önceki IANA sürümlerinin/Android revizyonlarının yerini alırlar.
- 6. ve 7. örneklerde O-MR1 ve P için 2018a sürümleri gösterilmektedir.
- 8. örnekte, Y=0 şemasının tamamen değiştirilmesi için Y'nin kullanımı gösterilmektedir.
- Örnek 9, APK'yı yeniden döndürmek için 3 ile 4 arasında bırakılan boşluğun kullanımını gösterir.
Her cihaz, sistem görüntüsünde varsayılan ve uygun şekilde sürümü belirlenmiş bir APK ile gönderildiğinden, P sistem görüntüsü sürümünden daha düşük bir sürüm numarasına sahip olduğu için P cihazına O-MR1 sürümünün yüklenme riski yoktur. /data
sürümü yüklü olan ve daha sonra P sürümüne sistem güncellemesi alan bir cihaz, /data
sürümündeki O-MR1 sürümüne kıyasla /system
sürümünü tercih eder. Bunun nedeni, P sürümünün her zaman O-MR1 için tasarlanmış uygulamalardan daha yüksek olmasıdır.
Tapas'ı kullanarak Veri uygulaması oluşturma
OEM'ler, saat dilimi verileri uygulamasının çoğu yönünü yönetmekten ve sistem görüntüsünü doğru şekilde yapılandırmaktan sorumludur. Veri uygulaması, sistem görüntüsüne (ilk sürüm için) eklenmeye uygun APK'lar üreten ve bir uygulama mağazası aracılığıyla imzalanıp dağıtılan (sonraki güncellemeler için) bir tapas derlemesiyle oluşturulmak üzere tasarlanmıştır.
Tapas, uygulamaların dağıtılabilir sürümlerini oluşturmak için azaltılmış bir kaynak ağacı kullanan, Android derleme sisteminin basitleştirilmiş bir sürümüdür. Normal Android derleme sistemine aşina olan OEM'ler, normal Android platform derlemesindeki derleme dosyalarını tanıyabilir.
Manifest dosyasını oluşturma
Küçültülmüş kaynak ağacı genellikle yalnızca derleme sistemi tarafından ihtiyaç duyulan ve uygulamanın oluşturulması için gerekli Git projelerine atıfta bulunan özel bir manifest dosyasıyla elde edilir. Veri uygulaması oluşturma bölümündeki talimatları uyguladıktan sonra OEM'ler, packages/apps/TimeZoneData/oem_template
altındaki şablon dosyalarını kullanarak en az iki OEM'e özel Git projesi oluşturmalıdır:
- Bir Git projesi, manifest ve uygulama APK dosyası oluşturmak için gereken derleme dosyaları (örneğin,
vendor/oem/apps/TimeZoneData
) gibi uygulama dosyalarını içerir. Bu proje, xTS testlerinde kullanılabilecek test APK'ları için derleme kurallarını da içerir. - Bir Git projesi, sistem görüntüsü derlemesine ve xTS testlerine dahil edilmek üzere uygulama derlemesi tarafından oluşturulan imzalı APK'ları içerir.
Uygulama derlemesi, platform derlemesiyle paylaşılan veya OEM'den bağımsız kod kitaplıkları içeren birkaç başka Git projesinden yararlanır.
Aşağıdaki manifest snippet'i, saat dilimi verileri uygulamasının O-MR1 sürümünü desteklemek için gereken minimum Git projeleri kümesini içerir. OEM'ler, OEM'e özel Git projelerini (genellikle imzalama sertifikasını içeren bir proje) bu manifeste eklemeli ve farklı dalları buna göre yapılandırmalıdır.
<!-- Tapas Build --> <project path="build" name="platform/build"> <copyfile src="core/root.mk" dest="Makefile" /> </project> <project path="prebuilts/build-tools" name="platform/prebuilts/build-tools" clone-depth="1" /> <project path="prebuilts/go/linux-x86" name="platform/prebuilts/go/linux-x86" clone-depth="1" /> <project path="build/blueprint" name="platform/build/blueprint" /> <project path="build/kati" name="platform/build/kati" /> <project path="build/soong" name="platform/build/soong"> <linkfile src="root.bp" dest="Android.bp" /> <linkfile src="bootstrap.bash" dest="bootstrap.bash" /> </project> <!-- SDK for system / public API stubs --> <project path="prebuilts/sdk" name="platform/prebuilts/sdk" clone-depth="1" /> <!-- App source --> <project path="system/timezone" name="platform/system/timezone" /> <project path="packages/apps/TimeZoneData" name="platform/packages/apps/TimeZoneData" /> <!-- Enable repohooks --> <project path="tools/repohooks" name="platform/tools/repohooks" revision="main" clone_depth="1" /> <repo-hooks in-project="platform/tools/repohooks" enabled-list="pre-upload" />
Tapas derlemesini çalıştırma
Kaynak ağacı oluşturulduktan sonra aşağıdaki komutları kullanarak tapas derlemesini çağırın:
source build/envsetup.sh
tapas
make -j30 showcommands dist TARGET_BUILD_APPS='TimeZoneData TimeZoneData_test1 TimeZoneData_test2' TARGET_BUILD_VARIANT=userdebug
Başarılı bir derleme, test için out/dist
dizininde dosyalar oluşturur. Bu dosyalar, sistem görüntüsüne dahil edilmek üzere önceden oluşturulmuş dizinine yerleştirilebilir ve/veya uyumlu cihazlar için bir uygulama mağazası üzerinden dağıtılabilir.