Saat Dilimi Kuralları

Robot 10 (Android 8.1 ve Android'de 9 mevcuttur) APK tabanlı zaman dilimi veri güncelleme mekanizması karşı çıkan bir ile değiştirir APEX tabanlı modülü güncelleme mekanizması . AOSP, OEM'lerin APK tabanlı güncellemeleri etkinleştirmesi için gereken platform kodunu eklemeye devam ediyor, böylece Android 10'a yükseltme yapan cihazlar, APK aracılığıyla iş ortağı tarafından sağlanan saat dilimi veri güncellemelerini almaya devam edebilir. Ancak, APK tabanlı bir güncelleme APEX tabanlı bir güncellemenin yerini aldığından (yani APK güncellemesi alan bir cihaz APEX tabanlı güncellemeleri yok sayacağından) modül güncellemelerini de alan bir üretim cihazında APK güncelleme mekanizması kullanılmamalıdır. ).

Saat dilimi güncellemeleri (Android 10+)

Android 10 ve sonraki sürümlerde desteklenen Saat Dilimi Verileri modülü, Android cihazlarda yaz saatini (DST) 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 Saat Dilimleri Veritabanı için bir güncelleme kendi ülkelerinde bir zaman dilimi kuralı değiştirmeyi bir veya daha fazla hükümetler yanıt olarak bir güncelleştirme bültenleri.
  2. Google veya Android iş ortağı, güncellenmiş saat dilimlerini içeren bir Saat Dilimi Veri modülü güncellemesi (APEX dosyası) hazırlar.
  3. Son kullanıcı cihazı güncellemeyi indirir, yeniden başlatır, ardından değişiklikleri uygular, ardından cihazın saat dilimi verileri güncellemeden yeni saat dilimi verilerini içerir.

Modüllerin ilgili ayrıntılar için bkz Modüler Sistem Bileşenleri .

Saat dilimi güncellemeleri (Android 8.1–9)

Android 8.1 ve Android 9'da OEM'ler, güncellenmiş saat dilimi kuralları verilerini bir sistem güncellemesi gerektirmeden cihazlara göndermek için APK tabanlı bir mekanizma kullanabilir. Bu mekanizma, kullanıcıların güncellemeleri zamanında almalarını sağlar (böylece bir Android cihazının kullanım ömrünü uzatır) ve Android ortaklarının sistem görüntüsü güncellemelerinden bağımsız olarak saat dilimi güncellemelerini test etmelerini sağlar.

Android çekirdek kitaplıkları ekibi, stok Android cihazında 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 edilirse kendi veri dosyalarını oluşturabilir. Her durumda, OEM'ler, desteklenen cihazları için kalite güvencesi/testi, zamanlaması ve saat dilimi kuralı güncellemelerinin başlatılması üzerindeki kontrolü elinde tutar.

Android saat dilimi kaynak kodu ve verileri

Tüm stok Android cihazlar, hatta bu özelliği, ihtiyaç saat dilimi kuralları verileri kullanılarak ve saat dilimi kuralları verilerinin kümesi varsayılan gemi gerekir değil /system bölümü. Bu veriler daha sonra Android kaynak ağacındaki aşağıdaki kitaplıklardan gelen kod tarafından kullanılır:

  • Dan Yönetilen kod libcore/ (örneğin, java.util.TimeZone ) kullanan tzdata ve tzlookup.xml dosyaları.
  • Native kütüphane kodu bionic/ (örneğin, için mktime , localtime sistem çağrıları) kullanan tzdata dosyasını.
  • İçinde ICU4J / icu4c kütüphane kodu external/icu/ icu kullanır .dat dosyası.

Bu kütüphaneler bulunabilir bindirme dosyaları izlemek /data/misc/zoneinfo/current dizinde. Bindirme dosyaları böylece değiştirmeden güncelleştirilmesi, bu sayede cihazlar geliştirilmiş saat dilimi kuralları veri içeren beklenir /system .

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

  • libcore/ ve bionic/ kod kullanmak /data kopyasını tzdata ve tzlookup.xml dosyaları.
  • ICU4J / icu4c kodu kullanacağım dosyaları /data ve geri düşmek /system mevcut olmadığı veriler için dosyaları (formatlar, lokalize dizeleri, vs.).

Dağıtım dosyaları

Dağıtıma .zip dosyalarını doldurmak için gereken veri dosyalarını içerirler /data/misc/zoneinfo/current dizini. Dağıtım dosyaları ayrıca, cihazların sürüm oluşturma sorunlarını algılamasına olanak tanıyan meta veriler içerir.

ICU sürümü, Android platform gereksinimleri ve diğer sürüm değişiklikleri ile içerik değiştiğinden, dağıtım dosyası biçimi Android sürümüne bağlıdır. Android, her IANA güncellemesi için desteklenen Android sürümleri için dağıtım dosyaları sağlar (platform sistem dosyalarını güncellemeye ek olarak). 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çeren) kullanarak kendi dağıtım dosyalarını oluşturabilir.

Saat dilimi güncelleme bileşenleri

Zaman dilimi kuralları güncellemesi, dağıtım dosyalarının bir cihaza iletilmesini ve içerdiği dosyaların güvenli kurulumunu içerir. Aktarım ve kurulum aşağıdakileri gerektirir:

  • Platform hizmeti işlevselliği ( timezone.RulesManagerService varsayılan olarak devre dışıdır). OEM'ler, yapılandırma yoluyla işlevselliği etkinleştirmelidir. RulesManagerService yazarak sistem sunucu işlemi ve aşamaları saat dilimi güncelleştirmesi operasyonlarında çalışır /data/misc/zoneinfo/staged . RulesManagerService da değiştirmek ya da zaten silme işlemlerine sahnelenen edebilirsiniz.
  • TimeZoneUpdater , bir nonupdateable sistem uygulaması (aka Updater uygulaması). OEM'ler, bu uygulamayı, özelliği kullanan cihazların sistem görüntüsüne dahil etmelidir.
  • OEM TimeZoneData cihazına dağıtıma dosyaları taşır ve Güncelleyicisi uygulamasına kullanılabilir hale getirir, (Veri app aka), güncelleştirilebilir sistem uygulaması. OEM'ler, bu uygulamayı, özelliği kullanan cihazların sistem görüntüsüne dahil etmelidir.
  • tzdatacheck , saat dilimi güncellemeleri doğru ve güvenli çalışması için gerekli bir boot-time ikili.

Android kaynak ağacı, OEM'in değişiklik yapmadan kullanmayı seçebileceği yukarıdaki bileşenler için genel kaynak kodunu içerir. Deney kodu otomatik olarak doğru özelliğini etkinleştirdikten kontrol etmek OEM'lerin etkinleştirmek için sağlanmıştır.

Dağıtım kurulumu

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

  1. Veri uygulaması bir uygulama mağazası indirmek veya Sideload aracılığıyla güncellenir. (Yoluyla sistem sunucu işlemi timezone.RulesManagerServer/timezone.PackageTracker sınıfları) yapılandırılmış oem-spesifik, veri uygulama paket adı değişiklikleri izler.

    Veri uygulaması güncellemeleri
    Şekil 1. Veri uygulama güncellemeleri
  2. Sistem sunucu işlemi tetikleyiciler bir yayın tarafından bir güncelleme kontrolü Updater App belirteci benzersiz, tek kullanımla niyet hedef aldı. Sistem sunucusu, tetiklediği en son kontrolün ne zaman tamamlandığını belirleyebilmesi için oluşturduğu en son belirteci takip eder; diğer belirteçler yoksayılır.

    Tetikleme güncellemesi
    Şekil 2. Tetik güncelleme kontrolü
  3. Güncelleme kontrolleri sırasında, Güncelleyici uygulaması aşağıdaki görevleri yerine getirir:
    • RulesManagerService'i çağırarak geçerli aygıt durumunu sorgular.

      Çağrı KurallarıManagerService
      Şekil 3. Veri uygulama güncellemeleri, çağıran RulesManagerService
    • Dağıtım hakkında bilgi almak için iyi tanımlanmış bir ContentProvider URL'sini ve sütun özelliklerini sorgulayarak Veri uygulamasını sorgular.

      Dağıtım bilgilerini al
      Şekil 4. Veri uygulama güncellemeleri, dağıtımlar konusunda bilgi almak
  4. Güncelleyici uygulaması sahip olduğu bilgilere dayanarak gerekli önlemleri alır. Kullanılabilir eylemler şunları içerir:
    • Kurulum talep edin. 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 aygıt için uygun olduğunu yeniden onaylar ve yüklemeyi gerçekleştirir.
    • (Nadir görülür) bir kaldırma isteğinde. Örneğin, güncel APK eğer /data veya devredışı olmak ve cihazın sürüm mevcut dönüyor /system .
    • Hiçbir şey yapma. Veri uygulaması dağıtımının geçersiz olduğu tespit edildiğinde gerçekleşir.
    Her durumda, Updater uygulaması, kontrol belirteciyle RulesManagerService'i çağırır, böylece sistem sunucusu, kontrolün tamamlandığını ve başarılı olduğunu bilir.

    Kontrol tamamlandı
    Şekil 5. kontrol komple
  5. Yeniden başlat ve tzdatacheck. Aygıt yeniden başlatıldığında, tzdatacheck ikili herhangi bir aşamalı işlemi yürütür. tzdatacheck ikili dosyası aşağıdaki görevleri gerçekleştirebilir:
    • Oluşturma, değiştirme ele alarak operasyon düzenledi Yürütme ve / veya silinmesi /data/misc/zoneinfo/current diğer sistem bileşenlerinin açılmış ve dosyaları kullanmaya başlamışlardır önce dosyaları.
    • Dosyalar kontrol edin /data cihazı sadece sistem güncellemesini aldı ve dağıtıma biçimi sürümü değiştiyse durum olmayabilir güncel platformu sürümü için doğrudur.
    • IANA sürümünü kuralları emin olun aynı veya içinde sürümden daha yeni /system . Bu mevcut olduğundan daha yaşlı saat dilimi kuralları verilerle bir cihaz bırakarak bir sistem güncellemesini karşı korur /system görüntüsü.

Güvenilirlik

Uçtan uca yükleme işlemi eşzamansızdır ve üç işletim sistemi işlemine bölünür. Kurulum sırasında herhangi bir noktada, cihaz güç kaybedebilir, disk alanı tükenebilir veya kurulum kontrolünün tamamlanmamasına neden olacak başka sorunlarla karşılaşabilir. En iyi başarısız durumda, Güncelleyici uygulaması sistem sunucusuna başarısız olduğunu bildirir; En kötü başarısız durumda, RulesManagerService hiçbir çağrı almaz.

Bunu halletmek için sistem sunucusu kodu, tetiklenen bir güncelleme kontrolünün tamamlanıp tamamlanmadığını ve Data App'in en son kontrol edilen sürüm kodunun ne olduğunu takip eder. Cihaz boştayken ve şarj olurken, sistem sunucu kodu mevcut durumu kontrol edebilir. Eksik bir güncelleme denetimi veya beklenmeyen bir Veri Uygulaması sürümü tespit ederse, kendiliğinden bir güncelleme denetimini tetikler.

Güvenlik

Etkinleştirildiğinde, sistem sunucusundaki RulesManagerService kodu, sistemin kullanımının güvenli olduğundan emin olmak için birkaç kontrol gerçekleştirir.

  • Kötü yapılandırılmış bir sistem görüntüsünü gösteren sorunlar, aygıtın önyüklemesini engeller; örnekler kötü Güncelleyici veya veri uygulama yapılandırma veya olmama Güncelleyici veya veri uygulamasını içerir /system/priv-app .
  • Kötü bir Veri uygulamasının yüklendiğini gösteren sorunlar, bir aygıtın önyüklenmesini engellemez, ancak bir güncelleme denetiminin tetiklenmesini engeller; örnekler, gerekli sistem izinlerinin olmamasını veya Data uygulamasının, beklenen URI'de bir ContentProvider göstermemesini içerir.

Dosya izinleri /data/misc/zoneinfo dizinleri SELinux'un kurallarını kullanarak uygulanır. Herhangi APK olduğu gibi, Veri uygulaması imzalamak için kullanılan aynı anahtar tarafından imzalanmış olmalıdır /system/priv-app versiyonunu. Veri uygulamasının özel, OEM'e özgü bir paket adına ve anahtarına sahip olması bekleniyor.

Saat dilimi güncellemelerini entegre etme

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

  • Kendi Veri uygulamasını oluşturun.
  • 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ırlanıyor

Başlamadan önce OEM'ler aşağıdaki politika, kalite güvencesi ve güvenlik hususlarını gözden geçirmelidir:

  • Veri uygulamaları için uygulamaya özel özel bir imzalama anahtarı oluşturun.
  • Hangi cihazların güncelleneceğini ve güncellemelerin yalnızca bunlara ihtiyaç duyan 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ına sahip olmak isteyebilir veya farklı cihazlar için farklı Veri uygulamalarına sahip olmayı seçebilir. Karar, paket adı seçimini, muhtemelen kullanılan sürüm kodlarını ve KG stratejisini etkiler.
  • AOSP'den stok Android saat dilimi verilerini kullanmak mı yoksa kendilerininkini oluşturmak mı istediklerini anlayın.

Veri uygulaması oluşturma

AOSP bir Veri uygulaması oluşturmak için gerekli tüm kaynak kodları ve inşa kuralları içerir packages/apps/TimeZoneData talimatlar ve örnek şablonlar için birlikte AndroidManifest.xml ve bulunan diğer dosyalar packages/apps/TimeZoneData/oem_template . Örnek şablonlar, hem gerçek Veri uygulaması APK'sı için bir yapı hedefi hem de Veri uygulamasının test sürümlerini oluşturmak için ek hedefler içerir.

OEM'ler, Veri uygulamasını kendi simgeleri, adları, çevirileri ve diğer ayrıntılarıyla özelleştirebilir. Veri uygulaması başlattı olamaz Ancak, simge yalnızca Ayarlar> Uygulamalar ekranında görüntülenir.

Veri uygulaması (ilk salım için) sistem görüntüye ilave edildi ve (bir sonraki güncellemeler için) bir uygulama deposu ile imzalanmış ve dağıtılmak üzere uygun APK'ları üreten bir tapas yapı ile inşa edilmesi amaçlanmıştır. Tapas kullanımı hakkında ayrıntılı bilgi için bkz Bina tapas kullanarak veri uygulaması .

OEM bir aygıt içinde sistem görüntüsünde Veri uygulaması önceden oluşturulmuş yüklemelisiniz /system/priv-app . Sistem görüntüde (tapas oluşturma işlemi tarafından oluşturulan) önceden oluşturulmuş APK'larınızı eklemek için, OEM örnek dosyaları kopyalayabilirsiniz packages/apps/TimeZoneData/oem_template/data_app_prebuilt . Örnek şablonlar ayrıca Data uygulamasının test sürümlerini test paketlerine dahil etmek için derleme hedefleri içerir.

Güncelleyici ve Veri uygulamalarını sistem görüntüsüne dahil etme

OEM içinde Güncelleyici ve Veri uygulaması APK'larını yerleştirmelidir /system/priv-app sistem görüntüsünün dizin. Bunu yapmak için sistem görüntüsü derlemesi, Updater uygulamasını ve Data uygulaması önceden oluşturulmuş hedeflerini açıkça içermelidir.

Güncelleyici uygulaması, platform anahtarıyla imzalanmalı ve diğer herhangi bir sistem uygulaması olarak dahil edilmelidir. Hedef tanımlanan packages/apps/TimeZoneUpdater olarak TimeZoneUpdater . Veri uygulamasının dahil edilmesi OEM'e özeldir ve ön derleme için seçilen hedef adına bağlıdır.

Sistem sunucusunu yapılandırma

Zaman dilimi güncelleştirmeleri etkinleştirmek için, OEM tanımlanan yapılandırma özelliklerini baskın sistem sunucu yapılandırılabilir frameworks/base/core/res/res/values/config.xml .

Mülk Açıklama Geçersiz Kılma Gerekli mi?
config_enableUpdateableTimeZoneRules
Olarak ayarlanmalıdır true RulesManagerService etkinleştirmek için. Evet
config_timeZoneRulesUpdateTrackingEnabled
Olarak ayarlanmalıdır true sistemine sahip Veri app değişiklikleri işler. Evet
config_timeZoneRulesDataPackage
OEM'e özel Veri uygulamasının paket adı. Evet
config_timeZoneRulesUpdaterPackage
Varsayılan Güncelleyici uygulaması için yapılandırıldı. Yalnızca farklı bir Updater uygulaması uygulaması sağlarken değiştirin. Numara
config_timeZoneRulesCheckTimeMillisAllowed
RulesManagerService tarafından tetiklenen bir güncelleme denetimi 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. Numara
config_timeZoneRulesCheckRetryCount
RulesManagerService daha fazlasını oluşturmayı durdurmadan önce izin verilen sıralı başarısız güncelleme denetimlerinin sayısı. Numara

Yanlış yapılandırılmış bir aygıt önyüklemeyi reddedebileceğinden, yapılandırma geçersiz kılma işlemleri 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ı olmayan (veya farklı Veri uygulaması/Updater 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 (CTS ve VTS gibi) kullanan standart Android test takımlarına benzeyen OEM'e özel herhangi bir test takımı anlamına gelir. 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 fonksiyonel test için gerekli kodu içerir.
  • packages/apps/TimeZoneData/oem_template/xts bir XTS Tradefed benzeri paketi dahil olmak üzere testler örnek bir dizin yapısını içermektedir. Diğer şablon dizinlerinde olduğu gibi, OEM'lerin kendi ihtiyaçlarına göre kopyalaması ve özelleştirmesi beklenir.
  • packages/apps/TimeZoneData/oem_template/data_app_prebuilt testi gerektirdiği önceden oluşturulmuş deney APK'larını dahil olmak üzere inşa zamanlı yapılandırmasını içerir.

Saat dilimi güncellemeleri oluşturma

IANA yeni bir saat dilimi kuralı seti 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 taahhütleri alabilir, Veri uygulamaları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 yakından Android sürümleri bağlı dağıtıma dosyaları içerdiğinden, OEM OEM güncelleme istediği her desteklenen Android serbest bırakılması için veri uygulamasının yeni sürümünü oluşturmak gerekir. Örneğin, bir OEM Android 8.1, 9 ve 10 cihazlar için güncellemeler sağlamak isterse işlemi üç kez tamamlamalıdır.

1. Adım: Sistem/zaman dilimi ve harici/icu veri dosyalarının güncellenmesi

Bu adımda, OEM için hazır Android kaydedilmesini almak system/timezone ve external/icu AOSP içinde bir sürüm -dev dallardan ve Android kaynak kodu kendi kopyasına bu teslimleri geçerlidir.

Sistem / saat dilimi AOSP yama dosyaları güncelleştirilmiş bilgiler içerir system/timezone/input_data ve system/timezone/output_data . OEM sonra girdi dosyalarında değişiklik dosyaları kullanabilirsiniz ek yerel düzeltmeleri yapmak kim ihtiyaç system/timezone/input_data ve external/icu dosyaları oluşturmak için output_data .

En önemli dosyasıdır system/timezone/output_data/distro/distro.zip , Veri uygulaması APK inşa edildiğinde otomatik olarak dahil edildiği.

2. Adım: Veri uygulamasının sürüm kodunu güncelleme

Bu adımda OEM'ler, Veri uygulamasının sürüm kodunu günceller. İnşa otomatik alır distro.zip , ama yeni olarak kabul ediyor ve bir önceki güncellemesinden bir cihazda yüklü bir önceden yüklenmiş Veri uygulamasını veya bir veri uygulaması yerine kullanılır böylece Veri uygulamasının yeni sürümü yeni bir sürüm koduna sahip olmalıdır.

Kopyalanan dosyalar kullanılarak veri uygulamasını oluştururken package/apps/TimeZoneData/oem_template/data_app , sürüm kodu / sürüm adı APK uygulanan bulabilirsiniz Android.mk :

TIME_ZONE_DATA_APP_VERSION_CODE :=
TIME_ZONE_DATA_APP_VERSION_NAME :=

Benzer girişleri bulunabilir testing/Android.mk (ancak, test sürümü kodları sistem görüntü sürümünden daha yüksek olmalıdır). Ayrıntılar için bkz örnek versiyonu kod stratejisi şeması ; örnek şema veya benzer bir şema kullanılıyorsa, gerçek sürüm kodlarından daha yüksek olmaları garanti edildiğinden test sürüm kodlarının güncellenmesi gerekmez.

3. Adım: Yeniden oluşturma, imzalama, test etme ve yayınlama

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

  • Yayınlanmamış cihazlar için (veya piyasaya sürülen bir cihaz için sistem güncellemesi hazırlarken), sistem görüntüsünün ve xTS testlerinin en son APK'lara sahip olduğundan emin olmak için yeni APK'ları Veri uygulaması önceden oluşturulmuş dizinine gönderin. OEM'ler, yeni dosyanın doğru çalışıp çalışmadığını test etmelidir (yani, CTS'yi ve OEM'e özgü tüm otomatik ve manuel testleri geçer).
  • Artık sistem güncellemelerini almayan piyasaya sürülen cihazlar için imzalanan APK yalnızca bir uygulama mağazası aracılığıyla yayınlanabilir.

OEM'ler, kalite güvencesinden ve güncellenmiş Veri uygulamasını piyasaya çıkmadan önce cihazlarında test etmekten sorumludur.

Veri uygulaması sürüm kodu stratejisi

Veri uygulaması olması gerekir uygun sürüm stratejisini cihazları doğru APK'larınızı almasını sağlamak için. Örneğin, uygulama mağazasından indirilenden 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ü (majör + minör)
  • Artan (opak) bir sürüm numarası

Şu anda platform API düzeyi, dağıtım biçimi sürümüyle güçlü bir şekilde ilişkilidir, çünkü her API düzeyi genellikle yeni bir YBÜ sürümüyle ilişkilendirilir (bu, dağıtım dosyalarını uyumsuz hale getirir). Gelecekte, Android bunu bir dağıtım dosyasının birden çok Android platformu sürümünde çalışabilmesi için değiştirebilir (ve Veri uygulaması sürüm kod ş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 kullanımları android:minSdkVersion eski cihazlar onlar işleyebilir daha yüksek dağıtımın biçim sürümüyle sürümlerini almazlar sağlamak için.

Sürüm kontrolü
Şekil 6. Örnek sürümü kod stratejisi
Örnek Değer Amaç
Y Rezerve Gelecekteki alternatif şemalara/test APK'larına izin verir. Başlangıçta (dolaylı olarak) 0'dır. Temeldeki tür, imzalı bir 32-bit int türü olduğundan, bu şema iki adede kadar gelecekteki 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şması olası değildir. Ana sürüm 1, API düzeyi 27'ye eşdeğerdir.
1 Küçük biçimli sürüm 3 ondalık basamaklı ikincil 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şmak pek mümkün değil.
x Rezerve Üretim sürümleri için 0'dır (ve test APK'ları için farklı olabilir).
ZZZZZ Opak sürüm numarası Talep üzerine tahsis edilen ondalık sayı. Gerekirse geçiş reklamı güncellemelerinin yapılmasına izin vermek için boşluklar içerir.

Ondalık sayı yerine ikili sayı kullanılsaydı şema daha iyi paketlenebilirdi, ancak bu şema insan tarafından okunabilir olma avantajına sahiptir. Tam sayı aralığı tükenirse Veri uygulaması paketi adı değişebilir.

Sürümü adı, örneğin bilgi, bir insan tarafından okunabilir bir gösterimidir: major=001,minor=001,iana=2017a, revision=1,respin=2 . Örnekler aşağıdaki tabloda gösterilmiştir.

# Sürüm kodu minSdkVersion {Ana biçim sürümü},{Alt biçim sürümü},{IANA kuralları sürümü},{Revizyon}
1 11000010 O-MR1 büyük=001,küçük=001,iana=2017a,revizyon=1
2 21000010 P majör=002,minor=001,iana=2017a,revizyon=1
3 11000020 O-MR1 büyük=001,küçük=001,iana=2017a,revizyon=2
4 11000030 O-MR1 büyük=001,küçük=001,iana=2017b,revizyon=1
5 21000020 P majör=002,minor=001,iana=2017b,revizyon=1
6 11000040 O-MR1 büyük=001,küçük=001,iana=2018a,revizyon=1
7 21000030 P majör=002,minor=001,iana=2018a,revizyon=1
8 1123456789 - -
9 11000021 O-MR1 majör=001,minor=001,iana=2017a,revizyon=2,respin=2
  • Örnek 1 ve 2, aynı 2017a IANA sürümü için farklı ana biçim sürümlerine sahip iki APK sürümünü göstermektedir. 2, sayısal olarak 1'den yüksektir; bu, daha yeni cihazların daha yüksek formatlı sürümleri almasını sağlamak için gereklidir. minSdkVersion, P sürümünün O cihazlarına sağlanmamasını sağlar.
  • Örnek 3, 1 için bir revizyon/düzeltmedir ve sayısal olarak 1'den büyüktür.
  • Örnek 4 ve 5, O-MR1 ve P için 2017b sürümlerini göstermektedir. Sayısal olarak daha yüksek olduklarından, ilgili öncüllerinin önceki IANA sürümlerinin/Android revizyonlarının yerini alırlar.
  • Örnek 6 ve 7, O-MR1 ve P için 2018a sürümlerini göstermektedir.
  • Örnek 8, Y=0 şemasını tamamen değiştirmek için Y'nin kullanımını gösterir.
  • Örnek 9, apk'yi yeniden döndürmek için 3 ile 4 arasında kalan boşluğun kullanımını gösterir.

Her cihaz, sistem görüntüsünde varsayılan, uygun şekilde sürümlendirilmiş bir APK ile birlikte gönderildiğinden, bir P sistem görüntüsü sürümünden daha düşük bir sürüm numarasına sahip olduğundan, bir P cihazına O-MR1 sürümünün yüklenmesi riski yoktur. Yüklü bir O-MR1 versiyonu olan bir cihaz /data daha sonra P, bir sistem güncelleştirme alır kullanır /system O-MR1 sürümüne tercihen sürüm /data P versiyonu her zaman daha yüksek bir uygulama O- yönelik daha uzun olduğundan MR1.

Tapas kullanarak Veri uygulamasını oluşturma

OEM'ler, saat dilimi Data 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ı (ilk salım için) sistem görüntüye ilave edildi ve (bir sonraki güncellemeler için) bir uygulama deposu ile imzalanmış ve dağıtılmak üzere uygun APK'ları üreten bir tapas yapı ile inşa edilmesi amaçlanmıştır.

Tapas kırpılmış bir uygulamalar dağıtılabilir versiyonlarını üretmek için azaltılmış kaynak ağacını kullanır Android inşa sisteminin sürümü. Normal Android derleme sistemine aşina olan OEM'ler, normal Android platform derlemesindeki derleme dosyalarını tanımalıdır.

Manifest oluşturma

Azaltılmış bir kaynak ağacı, genellikle yalnızca derleme sistemi ve uygulamayı oluşturmak için ihtiyaç duyulan Git projelerine atıfta bulunan özel bir bildirim dosyasıyla elde edilir. Yönergeleri izledikten sonra bir veri uygulaması oluşturma , OEM altında şablon dosyalarını kullanılarak oluşturulan en az iki OEM özgü Git projeleri olmalıdır packages/apps/TimeZoneData/oem_template :

  • Bir Git projesi böyle tezahür olarak uygulama dosyalarını ve uygulama APK dosyası oluşturmak için gerekli yapı dosyalarını içeren (örneğin, vendor/ oem /apps/TimeZoneData ). Bu proje ayrıca, xTS testleri tarafından kullanılabilecek test APK'ları için derleme kuralları içerir.
  • Bir Git projesi, sistem görüntüsü derlemesine 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 birkaç Git projesinden yararlanır.

Aşağıdaki bildirim snippet'i, saat dilimi Data uygulamasının O-MR1 derlemesini desteklemek için gereken minimum Git projeleri grubunu içerir. OEM'ler, OEM'e özgü Git projelerini (genellikle imzalama sertifikasını içeren bir projeyi içerir) bu bildirime eklemelidir ve buna göre farklı dallar 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="master"
        clone_depth="1" />
    <repo-hooks
        in-project="platform/tools/repohooks"
        enabled-list="pre-upload" />

Tapas yapısını çalıştırma

Kaynak ağacı kurulduktan sonra aşağıdaki komutları kullanarak inşa etmek tapas çağırmak:

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 yapı içinde dosyaları oluşturur out/dist test için dizine. Bu dosyalar, sistem görüntüsüne dahil edilmek üzere önceden oluşturulmuş dizine yerleştirilebilir ve/veya uyumlu cihazlar için bir uygulama mağazası aracılığıyla dağıtılabilir.