Saat dilimi kuralları

Android 10, APK tabanlı saat dilimi veri güncelleme mekanizmasını (Android 8.1 ve Android 9'da kullanılabilir) kullanımdan kaldırır ve APEX tabanlı bir modül güncelleme mekanizmasıyla değiştirir. AOSP 8.1 ile 13 arasında, OEM'lerin APK tabanlı güncellemeleri etkinleştirmesi için gereken platform kodu hâlâ mevcuttur. Bu nedenle, Android 10'a yükseltilen cihazlar, iş ortağı tarafından sağlanan saat dilimi veri güncellemelerini APK üzerinden almaya devam edebilir. Ancak APK tabanlı güncelleme, APEX tabanlı güncellemenin yerini aldığından APK güncelleme mekanizması, modül güncellemeleri de alan üretim cihazlarında kullanılmamalıdı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 saatini ve saat dilimlerini güncelleyerek dini, siyasi ve jeopolitik nedenlerle sık sık değişebilen verileri standart hale getirir.

Güncellemeler aşağıdaki süreci kullanır:

  1. IANA, bir veya daha fazla hükümetin ülkelerindeki saat dilimi kuralını değiştirmesine yanıt olarak Saat Dilimi Veritabanı'nda güncelleme yayınlar.
  2. Google veya Android iş ortağı, güncellenmiş saat dilimlerini içeren bir Saat Dilimi Verileri modülü güncellemesi (APEX dosyası) hazırlar.
  3. Son kullanıcı cihazı güncellemeyi indirir, yeniden başlatı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 veri güncelleme mekanizması özelliği, Android 14'ten itibaren tamamen kaldırılmıştır ve kaynak kodunda bulunamaz. İş ortakları, Saat Dilimi Ana modülüne tamamen taşınmalıdır.

Android 8.1 ve Android 9'da OEM'ler, sistem güncellemesi gerekmeden 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 süresini uzatmasını) ve Android iş ortaklarının saat dilimi güncellemelerini sistem resmi 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ı seçebilir veya tercih ederlerse kendi veri dosyalarını oluşturabilirler. Her durumda, OEM'ler desteklenen cihazlarının kalite güvencesi/testi, zamanlaması ve saat dilimi kural güncellemelerinin lansmanı üzerinde kontrol sahibidir.

Android saat dilimi kaynak kodu ve verileri

Bu özelliği kullanmayan cihazlar da dahil olmak üzere tüm stok Android cihazlarda saat dilimi kuralları verilerinin bulunması gerekir ve /system bölümünde varsayılan bir saat dilimi kuralları veri grubuyla birlikte gönderilmelidir. Bu veriler daha sonra Android kaynak ağacındaki aşağıdaki kitaplıklardaki kod tarafından kullanılır:

  • libcore/'ten gelen yönetilen kod (ör. java.util.TimeZone), tzdata ve tzlookup.xml dosyalarını kullanır.
  • bionic/ içindeki yerel kitaplık kodu (ör. mktime, localtime sistem çağrıları için), 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ı izler. Yer paylaşımı dosyalarının, iyileştirilmiş saat dilimi kuralları verileri içermesi ve böylece cihazların /system değiştirilmeden güncellenmesini sağlaması beklenir.

Saat dilimi kuralı verilerine ihtiyaç duyan Android sistem bileşenleri öncelikle aşağıdaki konumları kontrol eder:

  • libcore/ ve bionic/ kodu, tzdata ve tzlookup.xml dosyalarının /data kopyasını kullanır.
  • ICU4J/ICU4C kodu, /data içindeki dosyaları kullanır ve mevcut olmayan veriler için (biçimler, yerelleştirilmiş dizeler vb.) /system dosyalarına geçer.

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 sorunlarını algılamasına olanak tanıyan meta veriler de içerir.

İçerikleri ICU sürümü, Android platformu gereksinimleri ve diğer sürüm değişikliklerine bağlı olarak değiştiği için dağıtım dosyası biçimi Android sürümüne bağlıdır. Android, her IANA güncellemesi için (platform sistem dosyalarını güncellemenin yanı sıra) desteklenen Android sürümleri için dağıtım dosyaları sağlar. 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ını oluşturmak için gereken komut dosyalarını ve diğer dosyaları içerir) kullanarak kendi dağıtım dosyalarını oluşturabilir.

Saat dilimi güncelleme bileşenleri

Saat dilimi kuralları güncellemesi, dağıtım dosyalarının bir cihaza aktarılmasını ve içindeki dosyaların güvenli bir şekilde yüklenmesini içerir. Aktarım ve kurulum için aşağıdakiler gereklidir:

  • Varsayılan olarak devre dışı olan platform hizmeti işlevi (timezone.RulesManagerService). OEM'ler bu işlevi yapılandırma üzerinden etkinleştirmelidir. RulesManagerService, sistem sunucusu işleminde çalışır ve /data/misc/zoneinfo/staged'e yazarak saat dilimi güncelleme işlemlerini aşamalı olarak gerçekleştirir. RulesManagerService, önceden aşamalandırılmış işlemleri de değiştirebilir veya silebilir.
  • Güncellenemeyecek bir sistem uygulaması olan TimeZoneUpdater (diğer adıyla Güncelleme uygulaması). OEM'ler bu uygulamayı, özelliği kullanan cihazların sistem resmine eklemelidir.
  • OEMTimeZoneData, dağıtım dosyalarını cihaza taşıyan ve Yükleyici 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 resmine eklemelidir.
  • tzdatacheck, saat dilimi güncellemelerinin doğru ve güvenli çalışması için gereken önyükleme zamanı ikili dosyası.

Android kaynak ağacı, yukarıdaki bileşenler için OEM'nin değişiklik yapmadan kullanabileceği genel kaynak kod içerir. Test kodu, OEM'lerin özelliği doğru şekilde etkinleştirip etkinleştirmediklerini otomatik olarak kontrol etmelerini sağlamak için sağlanır.

Distro kurulumu

Dağıtım yükleme işlemi aşağıdaki adımları içerir:

  1. Veri uygulaması, uygulama mağazasından indirme veya harici 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.

    Veri uygulaması güncellemeleri

    Şekil 1. Veri uygulaması güncellemeleri.

  2. Sistem sunucusu işlemi, tek kullanımlık benzersiz bir jeton içeren hedeflenmiş bir intent'i Güncelleme Uygulaması'na yayınlayarak güncelleme kontrolünü tetikler. Sistem sunucusu, tetiklediği en son kontrolün ne zaman tamamlandığını belirleyebilmek için oluşturduğu en son jetonu izler. Diğer jetonlar yoksayılır.

    Güncellemeyi tetikleme

    Şekil 2. Güncelleme kontrolünü tetikleyin.

  3. Güncelleme kontrolü sırasında Güncelleme Uygulaması aşağıdaki görevleri gerçekleştirir:
    • RulesManagerService'i çağırarak mevcut cihaz durumunu sorgulayan bir işlevdir.

      RulesManagerService'i çağırın

      Şekil 3. RulesManagerService'i çağıran veri uygulaması güncellemeleri.

    • Dağıtım hakkında bilgi almak için iyi tanımlanmış bir ContentProvider URL'sini ve sütun özelliklerini sorgulayarak Veriler uygulamasını sorgulayın.

      Dağıtım bilgilerini alma

      Şekil 4. Veri uygulaması güncellemeleri, dağıtım hakkında bilgi edinme.

  4. Güncelleme Aracı uygulaması, sahip olduğu bilgilere göre uygun işlemi yapar. Kullanılabilen işlemler şunlardır:
    • Yükleme isteğinde bulunun. Distro 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 cihaz için uygun olduğunu yeniden onaylar ve yüklemeyi aşamalara ayırır.
    • Kaldırma isteğinde bulunun (bu durum nadiren görülür). Örneğin, /data'teki güncellenmiş APK devre dışı bırakılıyor veya kaldırılıyorsa ve cihaz /system'teki 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 gerçekleşir.
    Güncelleme uygulaması, her durumda RulesManagerService'i kontrol jetonuyla çağırır. Böylece sistem sunucusu, kontrolün tamamlandığını ve başarılı olduğunu bilir.

    Kontrol tamamlandı

    Şekil 5. Kontrol tamamlandı.

  5. Yeniden başlatma ve tzdatacheck. Cihaz bir sonrakinde açıldığında tzdatacheck ikili dosyası, aşamalı olarak yürütülen tüm işlemleri gerçekleştirir. tzdatacheck ikili programı aşağıdaki görevleri gerçekleştirebilir:
    • Diğer sistem bileşenleri dosyaları açmadan ve kullanmaya başlamadan önce /data/misc/zoneinfo/current dosyalarının oluşturulmasını, değiştirilmesini ve/veya silinmesini yöneterek aşamalı 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 kısa süre önce 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ündeki sürümle aynı veya daha yeni olduğundan emin olun. Bu, bir sistem güncellemesi sonucunda cihazda /system görüntüsünde bulunandan daha eski saat dilimi kuralları verilerinin kalmasına karşı koruma sağlar.

Güvenilirlik

Baştan sona yükleme işlemi, üç işletim sistemi işlemine bölünmüş ve eşzamansızdır. Yükleme sırasında cihazın gücü kesilebilir, disk alanı tükenebilir veya başka sorunlarla karşılaşılabilir. Bu da yükleme kontrolünün tamamlanamamasına neden olabilir. En iyi durumda, Updater uygulaması sistem sunucusunu başarısız olduğunu bildirir. En kötü durumda ise RulesManagerService hiç çağrı almaz.

Sistem sunucu kodu, bu sorunu gidermek için tetiklenen bir güncelleme kontrolünün tamamlanıp tamamlanmadığını ve Veri Uygulaması'nın en son kontrol edilen sürüm kodunu izler. Cihaz boştayken ve şarj olurken sistem sunucu kodu mevcut durumu kontrol edebilir. Eksik bir güncelleme kontrolü veya beklenmedik bir Veri Uygulaması sürümü tespit ederse kendiliğinden bir güncelleme kontrolünü tetikler.

Güvenlik

Etkinleştirildiğinde, sistem sunucusunda RulesManagerService kodu, sistemin güvenli bir şekilde kullanılmasını sağlamak için çeşitli kontroller gerçekleştirir.

  • Kötü yapılandırılan bir sistem görüntüsünü gösteren sorunlar, cihazın başlatılmasını engeller. Örneğin, güncelleyici veya Veri uygulamasının kötü bir şekilde yapılandırılması ya da güncelleyici veya Veri uygulamasının /system/priv-app'te bulunmaması bu sorunlara örnek olarak verilebilir.
  • Hatalı bir Veri uygulamasının yüklendiğini belirten sorunlar, cihazın başlatılmasını engellemez ancak güncelleme kontrolünün tetiklenmesini engeller. Örneğin, gerekli sistem izinlerinin olmaması veya Veri uygulamasının beklenen URI'de bir ContentProvider göstermemesi bu sorunlara örnek olarak verilebilir.

/data/misc/zoneinfo dizinlerinin dosya izinleri SELinux kuralları kullanılarak uygulanır. Tüm APK'larda olduğu gibi, Veri uygulaması da /system/priv-app sürümünü imzalamak için kullanılan anahtarla imzalanmalıdır. Veri uygulamasının, OEM'ye özel bir paket adı ve anahtarı olması gerekir.

Saat dilimi güncellemelerini entegre etme

OEM'ler, saat dilimi güncelleme özelliğini etkinleştirmek için genellikle:

  • Kendi veri uygulamalarını oluşturabilirler.
  • Güncelleme ve Veri uygulamalarını sistem resmi derlemesine ekleyin.
  • RulesManagerService'i etkinleştirecek şekilde sistem sunucusunu yapılandırın.

Hazırlık

OEM'ler başlamadan önce aşağıdaki politikayı, kalite güvencesi ve güvenlikle ilgili hususları incelemelidir:

  • Veri uygulaması için uygulamaya özel bir imzalama anahtarı oluşturun.
  • Hangi cihazların güncelleneceğini ve güncellemelerin yalnızca ihtiyaç duyulan cihazlara yüklenmesini nasıl sağlayabileceklerini anlamak için saat dilimi güncellemeleri için bir sürüm 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, muhtemelen kullanılan sürüm kodlarını ve QA stratejisini etkiler.
  • AOSP'deki stok Android saat dilimi verilerini mi yoksa kendi verilerini mi kullanmak istediklerini öğrenin.

Veri uygulaması oluşturma

AOSP, packages/apps/TimeZoneData'te veri uygulaması oluşturmak için gereken tüm kaynak kodu ve derleme kurallarını içerir. Ayrıca, AndroidManifest.xml ve packages/apps/TimeZoneData/oem_template'deki diğer dosyalar için talimatlar ve örnek şablonlar da sağlar. Ö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şturmak için ek hedefler içerir.

OEM'ler Veriler uygulamasını kendi simgeleriyle, adlarıyla, çevirileriyle 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 eklenmeye (ilk sürüm için) uygun APK'lar üreten ve bir uygulama mağazasında imzalayı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 Tapas'ı kullanarak veri uygulamasını oluşturma başlıklı makaleyi inceleyin.

OEM'ler, Veriler uygulamasını /system/priv-app'te bir cihazın sistem resmine önceden yüklenmiş olarak yüklemelidir. OEM'ler, önceden oluşturulmuş APK'ları (tapas derleme işlemi tarafından oluşturulur) sistem görüntüsüne eklemek için packages/apps/TimeZoneData/oem_template/data_app_prebuilt içindeki örnek dosyaları kopyalayabilir. Örnek şablonlar, Veri uygulamasının test sürümlerini test paketlerine dahil etmek için derleme hedeflerini de içerir.

Güncelleme ve Veri uygulamalarını sistem görüntüsüne ekleme

OEM'ler, Güncelleme Aracı ve Veri uygulaması APK'larını sistem resminin /system/priv-app dizinine yerleştirmelidir. Bunun için sistem resmi derlemesi, Updater uygulaması ve Veri uygulaması önceden derlenmiş hedeflerini açıkça içermelidir.

Güncelleme uygulaması, platform anahtarıyla imzalanmalı ve diğer sistem uygulamaları gibi eklenmelidir. Hedef, packages/apps/TimeZoneUpdater içinde TimeZoneUpdater olarak tanımlanır. Veri uygulamasının dahil edilmesi OEM'ye özeldir ve ön derleme için seçilen hedef ada 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 işlemi gerekli mi?
config_enableUpdateableTimeZoneRules
RulesManagerService'i etkinleştirmek için true olarak ayarlanmalıdır. Evet
config_timeZoneRulesUpdateTrackingEnabled
Sistemin Veri uygulamasındaki 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 Güncelleme Uygulaması için yapılandırılmıştır. Yalnızca farklı bir Güncelleme 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 yapma yanıtı arasında izin verilen süre. Bu noktadan sonra, kendiliğinden bir güvenilirlik tetikleyicisi oluşturulabilir. Hayır
config_timeZoneRulesCheckRetryCount
RulesManagerService'in daha fazla oluşturmayı durdurmasından önce izin verilen art arda başarısız güncelleme kontrollerinin sayısı. Hayır

Yanlış yapılandırılmış bir cihaz önyüklemeyi reddedebileceğinden yapılandırma geçersiz kılma işlemleri sistem resminde (tedarikçi veya başka bir yerde değil) olmalıdır. Yapılandırma geçersiz kılma işlemi tedarikçi firma görüntüsündeyse Veri uygulaması olmayan bir sistem görüntüsüne (veya farklı Veri uygulaması/Güncelleme 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'i kullanan standart Android test paketlerine (CTS ve VTS gibi) benzer OEM'ye özel 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 test eklemek için örnek bir dizin yapısı içerir. Diğer şablon dizinlerinde olduğu gibi, OEM'lerin bu şablonları kopyalayıp ihtiyaçlarına göre özelleştirmesi beklenir.
  • packages/apps/TimeZoneData/oem_template/data_app_prebuilt , testin gerektirdiği önceden derlenmiş test APK'larını dahil etmek için derleme zamanı yapılandırmasını içerir.

Saat dilimi güncellemeleri oluşturma

IANA yeni bir saat dilimi kuralı grubu yayınladığında Android temel 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 taahhütleri alabilir, Veri uygulamasının yeni bir sürümünü oluşturmak için kullanabilir ve ardından üretimdeki cihazlarını güncellemek için yeni sürümü yayınlayabilir.

bakın.

Veri uygulamaları, Android sürümlerine yakından bağlı dağıtım dosyaları içerdiğinden OEM'lerin, güncellemek istedikleri her desteklenen Android sürümü için Veri uygulamasının yeni bir sürümünü oluşturması gerekir. Örneğin, bir OEM Android 8.1, 9 ve 10 cihazlar için güncelleme sağlamak istiyorsa süreci üç kez tamamlamalıdır.

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 dosyalarında güncellenmiş dosyalar içerir. Ek yerel düzeltmeler yapması gereken OEM'ler, giriş dosyalarını değiştirebilir ve ardından output_data'de dosya oluşturmak için system/timezone/input_data ve external/icu'deki dosyaları kullanabilir.

Veri uygulaması APK'sı derlenirken otomatik olarak dahil edilen en önemli dosya system/timezone/output_data/distro/distro.zip dosyasıdır.

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 değerini otomatik olarak alır ancak Veri uygulamasının yeni sürümünde yeni bir sürüm kodu olmalıdır. Böylece yeni sürüm yeni olarak tanınır ve önceden yüklenmiş bir Veri uygulamasının veya bir önceki güncellemeyle cihaza yüklenen bir Veri uygulamasının yerini alır.

package/apps/TimeZoneData/oem_template/data_app'ten kopyalanan dosyaları kullanarak Veri uygulamasını oluştururken APK'ya uygulanan sürüm kodunu/sürüm adını Android.mk içinde bulabilirsiniz:

TIME_ZONE_DATA_APP_VERSION_CODE :=
TIME_ZONE_DATA_APP_VERSION_NAME :=

Benzer girişler testing/Android.mk içinde de bulunabilir (ancak test sürümü kodları, sistem görüntüsü sürümünden daha 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ırsa gerçek sürüm kodlarından daha yüksek oldukları garanti edildiğinden test sürüm kodlarının güncellenmesi gerekmez.

3. Adım: Yeniden derleyin, imzalayın, test edin ve yayınlayın

Bu adımda OEM'ler, tapas'ı kullanarak APK'yı yeniden oluşturur, oluşturulan APK'yı imzalar ve ardından APK'yı test edip yayınlar:

  • Henüz piyasaya sürülmemiş cihazlar için (veya piyasaya sürülmüş bir cihaz için sistem güncellemesi hazırlarken) sistem görüntüsünde ve xTS testlerinde en son APK'ların bulunduğundan emin olmak üzere yeni APK'ları Veri uygulaması önceden oluşturulmuş dizinine gönderin. OEM'ler, yeni dosyanın düzgün çalıştığını (yani CTS'yi ve OEM'ye özgü otomatik ve manuel testleri geçtiğini) test etmelidir.
  • Artık sistem güncellemesi almayan cihazlarda, imzalı APK yalnızca bir uygulama mağazası üzerinden yayınlanabilir.

OEM'ler, güncellenmiş Veri uygulamasının kalite güvencesinden ve cihazlarında yayınlanmadan önce test edilmesinden sorumludur.

Veri uygulaması sürüm kodu stratejisi

Cihazların doğru APK'ları alması için Veri uygulamasının uygun bir sürüm 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)
  • Artımlı (opak) sürüm numarası

Şu anda platform API düzeyi, her API düzeyi genellikle ICU'nun yeni bir sürümüyle ilişkilendirildiği için dağıtım biçimi sürümüyle yakından ilişkilidir (bu da dağıtım dosyalarını uyumsuz hale getirir). 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 API düzeyi, Veri uygulaması sürüm kodu şemasında kullanılmaz).

Örnek sürüm kodu stratejisi

Bu örnek sürüm numaralandırma ş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şleyemeyeceğinden daha yüksek bir dağıtım biçimi sürümüne sahip sürümler almamasını sağlamak için android:minSdkVersion kullanır.

Sürüm kontrolü

Şekil 6. Örnek sürüm kodu stratejisi.

Örnek Değer Amaç
Y Rezervasyon yapıldı Gelecekte alternatif şemalara/test APK'larına izin verir. Başlangıçta (dolaylı olarak) 0'dır. Temel tür, imzalı 32 bit int türü olduğu için bu şema, gelecekte iki tane numaralandırma şeması düzeltmesini destekler.
01 Ana format 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ı pek olası değildir. 1 ana sürümü, API düzeyi 27'ye eşdeğerdir.
1 Alt biçim sürümü 3 ondalık basamaklı alt sürüm biçimindeki sürümü 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 (test APK'ları için farklı olabilir).
ZZZZZ Saydam olmayan sürüm numarası Talebe göre ayrılan ondalık sayı. Gerekirse geçiş reklamı güncellemelerinin yapılmasına olanak tanıyan boşluklar içerir.

Onluk yerine ikili sayı kullanılsaydı şema daha iyi sıkıştırılabilirdi ancak bu şema, insanlar tarafından okunabilir olma avantajına sahiptir. Tam sayı aralığı tükenirse Veriler uygulamasının paket adı değişebilir.

Sürüm adı, ayrıntıların kullanıcılar tarafından okunabilir bir temsilidir (ör. major=001,minor=001,iana=2017a, revision=1,respin=2). Örnekler aşağıdaki tabloda gösterilmektedir.

# Sürüm kodu minSdkVersion {Başlıca biçim sürümü},{Alt biçim sürümü},{IANA kuralları sürümü},{Düzeltme}
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ü için farklı ana biçim sürümlerine sahip iki APK sürümü gösterilmektedir. 2, sayısal olarak 1'den 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 cihazlara sağlanmamasını sağlar.
  • 3. örnek, 1 için bir düzeltme/düzeltmedir ve sayısal olarak 1'den 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ından, önceki sürümlerin IANA sürümlerini/Android düzeltmelerini değiştirirler.
  • 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.
  • 9. örnekte, apk'yı yeniden döndürmek için 3 ile 4 arasında bırakılan boşluğun kullanımı gösterilmektedir.

Her cihaz, sistem görüntüsünde varsayılan olarak uygun sürüme sahip bir APK ile gönderilir. Bu nedenle, P sistem görüntüsüne kıyasla daha düşük sürüm numarası olduğundan P cihazına O-MR1 sürümünün yüklenmesi riski yoktur. /data'te O-MR1 sürümü yüklü olan ve daha sonra P sürümüne güncellenen bir cihaz, P sürümü her zaman O-MR1 için tasarlanmış uygulamalardan daha yüksek olduğundan /data'deki O-MR1 sürümüne kıyasla /system sürümünü kullanır.

Tapas'ı kullanarak Veri uygulamasını oluşturma

OEM'ler, saat dilimi veri uygulamasının çoğu yönünü yönetmekten ve sistem imajını doğru şekilde yapılandırmaktan sorumludur. Veri uygulaması, sistem resmine eklenmeye (ilk sürüm için) uygun APK'lar üreten ve bir uygulama mağazasında imzalayı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 derlemesinden derleme dosyalarını tanımalıdır.

Manifest dosyasını oluşturma

Azaltılmış kaynak ağacı genellikle yalnızca derleme sisteminin ve uygulamanın derlenmesi için ihtiyaç duyulan Git projelerini belirten özel bir manifest dosyasıyla elde edilir. Veri uygulaması oluşturma başlıklı makaledeki talimatları uyguladıktan sonra OEM'lerin, packages/apps/TimeZoneData/oem_template altındaki şablon dosyalarını kullanarak OEM'ye özel en az iki Git projesi oluşturması gerekir:

  • Bir Git projesi, uygulama APK dosyasını oluşturmak için gereken manifest ve derleme dosyaları gibi uygulama dosyalarını (örneğin, vendor/oem/apps/TimeZoneData) içerir. Bu proje, xTS testleri tarafından kullanılabilecek test APK'ları için derleme kuralları da içerir.
  • Bir Git projesi, sistem resmi derlemesi ve xTS testlerine dahil edilmek üzere uygulama derlemesi tarafından üretilen imzalı APK'ları içerir.

Uygulama derlemesi, platform derlemesiyle paylaşılan veya OEM'den bağımsız kod kitaplıkları içeren diğer çeşitli Git projelerinden yararlanır.

Aşağıdaki manifest snippet'i, saat dilimi veri uygulamasının O-MR1 derlemesini desteklemek için gereken minimum Git projesi grubunu içerir. OEM'ler, OEM'ye özel Git projelerini (genellikle imzalama sertifikasını içeren bir proje içerir) bu manifest'e eklemelidir ve farklı dalları buna göre yapılandırabilir.

   <!-- 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 derlenmiş dosyalar dizinine yerleştirilebilir ve/veya uyumlu cihazlar için bir uygulama mağazasından dağıtılabilir.