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, OEM'lerin APK tabanlı güncellemeleri etkinleştirmesi için gereken platform kodunu hâlâ içerir. 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 güncelleme mekanizması, aynı zamanda modül güncellemelerini APK tabanlı bir güncelleme olarak alan üretim cihazlarında, APEX tabanlı güncellemelerin yerini alan üretim cihazlarında (yani APK güncellemesi alan bir cihaz, APEX tabanlı güncellemeleri yoksayar) kullanılmamalıdır.

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 verilerini güncelleme mekanizması özelliği, Android 14 ve sonraki sürümlerden tamamen kaldırılmıştır ve kaynak kodunda bulunamıyor. İş 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 cihazda 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. OEM'ler, desteklenen cihazlarının saat dilimi kural güncellemelerinin kalite güvencesi/testi, zamanlaması ve lansmanı üzerinde her durumda 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ı verileri 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.

Distro dosya biçimi Android sürümüne bağlıdır çünkü içeriğin ICU sürümüne, Android platform şartlarına ve sürümdeki diğer değişikliklere göre değişmesidir. 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 saat dilimi güncelleme işlemlerini /data/misc/zoneinfo/staged adresine yazarak aşamalar. 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 bir şekilde ç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.

Dağıtım 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:
    • Kural Yöneticisi Hizmeti'ni çağırarak geçerli cihaz durumunu sorgular.

      RulesManagerService'i çağırın.

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

    • Dağıtımla ilgili 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ılabilir 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 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ı

    5. Şekil. Kontrol tamamlandı.

  5. Yeniden başlatma ve tzdatacheck. Cihaz bir sonraki başlatıldığında tzdatacheck ikili programı, tüm aşamalı işlemleri yürütür. tzdatacheck ikili dosyası 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'teki sürümle aynı veya daha yeni olduğundan emin olun. Bu, /system görüntüsündekinden daha eski saat dilimi kuralları verilerine sahip bir cihaz bırakan sistem güncellemesine karşı koruma sağlar.

Güvenilirlik

Uçtan uca yükleme süreci eşzamansız olup üç işletim sistemi işlemine bölünmüştü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 başarısız durumda Güncelleyici uygulaması, sistem sunucusuna işlemin başarısız olduğunu bildirir. En kötü durumda, 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 gösterilebilir.
  • Hatalı bir Veri uygulamasının yüklü olduğunu 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

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

  • Kendi veri uygulamalarını oluşturabilirler.
  • Güncelleme ve Veri uygulamalarını sistem resmi derlemesine ekleyin.
  • Sistem sunucusunu, RulesManagerService'i etkinleştirecek şekilde 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ştur

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 arasında 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 ekstra hedefler bulunur.

OEM'ler Veri uygulamasını kendi simgesi, adı, ç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 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 kullanmayla ilgili ayrıntılar için Tasma kullanarak veri uygulaması oluşturma bölümüne bakın.

OEM'ler, /system/priv-app'te bir cihazın sistem resmine önceden yerleşik olarak Veri uygulamasını 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üncelleyici ve Veri uygulaması APK'larını sistem görüntüsünün /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ğladığınızda 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 spontane 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 , test için gereken önceden derlenmiş test APK'larını dahil etmek üzere 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.

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 ürününde de bulunabilir (ancak test sürüm kodları, sistem görüntü 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ı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:

  • Yayınlanmamış cihazlarda (veya yayınlanmış bir cihaz için sistem güncellemesi hazırlarken), sistem görüntüsü ve xTS testlerinin en yeni APK'lara sahip olduğundan emin olmak için Veri uygulaması önceden oluşturulmuş dizinine yeni APK'ları 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, imzalanmış 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)
  • Artan (opak) sürüm numarası

Şu anda platform API düzeyi ile distro biçimli sürüm arasında güçlü bir ilişki vardır. Bunun nedeni, her API düzeyi genellikle yeni ICU sürümüyle ilişkilendirilmiş olmasıdır. 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 oluşturma numarası şeması, yüksek dağıtım biçimli sürümlerin düşük dağıtım biçimli sürümlerin 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 almasını önlemek 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ı Gelecekteki 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.

Ondalık sayı yerine ikili program kullanılsaydı şema daha iyi paketlenebilirdi ancak bu şema, kullanıcılar tarafından okunabilme 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 ana=001,minor=001,iana=2017a,düzeltme=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 ana=002,minor=001,iana=2018a,düzeltme=1
8 1123456789 - -
9 11000021 O-MR1 ana=001,minor=001,iana=2017a,düzeltme=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, O cihazlara P sürümünün 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. Örnek, Y=0 şemasının tamamen yerine geçmek için Y kullanımını göstermektedir.
  • 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üm numaralı 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 bölgesinde O-MR1 sürümü yüklü olup daha sonra P'ye sistem güncellemesi alan bir cihaz, P sürümü O-MR1 için tasarlanan tüm uygulamalardan her zaman daha yüksek olduğundan /data içindeki O-MR1 sürümü yerine /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ının, sistem görüntüsüne eklenmeye (ilk sürüm için) uygun APK'lar üreten ve bir uygulama mağazası üzerinden imzalanıp dağıtılan (sonraki güncellemeler için) bir tapas derlemesiyle geliştirilmesi amaçlanmış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

Küçültülmüş kaynak ağacı genellikle yalnızca derleme sisteminin ve uygulamanın derlemesi için gereken Git projelerini ifade eden özel bir manifest dosyasıyla elde edilir. Veri uygulaması oluşturma bölümündeki talimatları uyguladıktan sonra OEM'lerin, packages/apps/TimeZoneData/oem_template altındaki şablon dosyaları kullanılarak oluşturulmuş OEM'e özgü en az iki Git projesine sahip olması gerekir:

  • Bir Git projesi, manifest gibi uygulama dosyaları ve uygulama APK dosyasını oluşturmak için gereken derleme 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.