Saat dilimi kuralları

Android 10'da APK tabanlı saat dilimi verileri kullanımdan kaldırılıyor güncelleme mekanizması (Android 8.1 ve Android 9'da kullanılabilir) ve APEX tabanlı modül güncelleme mekanizması kullanabilirsiniz. AOSP 8.1 ile 13 arasındaki sürümlerde, OEM'lerin APK tabanlı güncellemeler sayesinde Android 10'a geçen cihazlar APK aracılığıyla iş ortakları tarafından sağlanan saat dilimi veri güncellemelerini almaya devam edebilir. Ancak, APK güncelleme mekanizması bir üretim cihazında kullanılmamalıdır APK tabanlı bir güncelleme olarak da alan bir APK'nın, APEX tabanlı güncelleme (APK güncellemesi alan bir cihaz, APEX tabanlı güncellemeler için kullanılı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 saati (YS) ve saat dilimlerinin daha hızlı güncellenmesi Dini, siyasi ve politik unsurlar açısından sık sık değişebilen verileri standartlaştırmak jeopolitik nedenler.

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

  1. IANA saat dilimi veritabanı için bir güncelleme yayınladığında, bir veya daha fazla hükümetin ülkelerindeki saat dilimi kuralını değiştirmesi.
  2. Google veya Android iş ortağı bir Saat Dilimi Veri modülü güncellemesi hazırlar (APEX dosyası) açın.
  3. Son kullanıcı cihazı güncellemeyi indirir, yeniden başlatır, ardından sonra cihazın saat dilimi verileri yeni saat dilimini içerir bazı verilerdir.

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

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ıldı ve şurada bulunamıyor: kaynak koda ekleyin. İş ortakları, Google Cloud'un Saat Dilimi Ana hat modülü.

Android 8.1 ve Android 9'da OEM'ler, Android 8.1 ve Android 9'da saat dilimi kuralı verilerini sistem güncellemesi gerekmeden cihazlara güncelledi. Bu mekanizma, kullanıcıların güncellemeleri zamanında almasına olanak sağlar (böylece, kullanım ömrü boyunca kullanılabilir) ve Android iş ortaklarının saat dilimi, sistem görüntüsü güncellemelerinden bağımsız olarak güncellenir.

Android temel kitaplıklar ekibi, Stok bir Android cihazda saat dilimi kuralları güncelleniyor. OEM'ler bunları veri dosyalarını kullanarak kendi cihazları için saat dilimi güncellemeleri oluşturabilir veya kendi cihazlarını kendi veri dosyalarınıza sahip olmanız gerekir. Her durumda, kalite kontrolü OEM'lerin elindedir saat dilimi kuralı güncellemelerinin güvence/test, zamanlama ve kullanıma sunulması, cihazlar.

Android saat dilimi kaynak kodu ve verileri

Bu özelliği kullanmayanlar da dahil olmak üzere tüm stok Android cihazlarda saat dilimi belirtilmelidir saat dilimi kuralları verilerinin bulunduğu varsayılan bir saat dilimi /system bölümü. Bu veriler daha sonra aşağıdaki kitaplıkları inceleyin:

  • libcore/ tarafından yönetilen kod (örneğin, java.util.TimeZone), tzdata ve tzlookup.xml dosya.
  • bionic/ içindeki yerel kitaplık kodu (örneğin, mktime, yerel saat sistem çağrıları) tzdata dosyasını kullanır.
  • external/icu/ bölgesindeki ICU4J/ICU4C kitaplık kodu icu'yu kullanır .dat dosya

Bu kitaplıklar, /data/misc/zoneinfo/current dizini. Yer paylaşımlı dosyalar bekleniyor İyileştirilmiş saat dilimi kuralları verileri içerir, böylece cihazların güncellenmesini sağlar /system değiştirmeden.

Saat dilimi kural verileri gerektiren Android sistem bileşenleri şunları kontrol eder: önce konum:

  • libcore/ ve bionic/ kodu, /data tzdata ve tzlookup.xml kopyası dosyası olarak da kaydedebilir.
  • ICU4J/ICU4C kodu, /data içindeki dosyaları kullanır ve Mevcut olmayan veriler için /system dosya (biçimler için yerelleştirilmiş) dizeler vb.) belirtin.

Distro dosyaları

Distro .zip dosyaları, /data/misc/zoneinfo/current dizini. Distro dosyaları ayrıca Cihazların sürüm oluşturma sorunlarını tespit etmesine olanak tanıyan meta veriler içerir.

Distro dosya biçimi Android sürümüne bağlıdır çünkü içeriği ICU sürümü, Android platform gereksinimleri ve diğer sürümlerdeki değişiklikler anlamına gelir. Android, desteklenen Android sürümlerinin her biri için dağıtım dosyaları sağlar: IANA güncellemesi (platformun sistem dosyalarını güncellemeye ek olarak). Kullanıcıların güncel cihazlarda, OEM'ler bu dağıtım dosyalarını kullanabilir veya komut dosyalarını ve diğer dosyaları içeren Android kaynak ağacı, dağıtım dosyaları oluşturacaktır).

Saat dilimi güncelleme bileşenleri

Saat dilimi kuralları güncellemesi, dağıtım dosyalarının bir ve içindeki dosyaların güvenli bir şekilde yüklenmesini sağlayabilir. Aktar ve yükleme işlemi için aşağıdakiler gereklidir:

  • Platform hizmeti işlevi (timezone.RulesManagerService), Bu ayar varsayılan olarak devre dışıdır. OEM'ler, bu işlevi yapılandırma aracılığıyla etkinleştirmelidir. RulesManagerService, sistem sunucusu işleminde ve aşamalarında çalışır adresine yazarak saat dilimi güncelleme işlemleri /data/misc/zoneinfo/staged. RulesManagerService şunları yapabilir: önceden hazırlanmış işlemleri de değiştirin veya silin.
  • TimeZoneUpdater güncellenemez sistem uygulaması (Güncelleyici uygulaması olarak da bilinir). OEM'ler bu uygulamayı sistem görüntüsüne eklemelidir ne kadarının olduğunu öğreneceksiniz.
  • OEM TimeZoneData güncellenebilir bir sistem uygulaması (diğer adıyla Veri uygulaması) içerir. Google Play Games Beta ile erişebilirsiniz. OEM'ler bu uygulamayı cihazın sistem görüntüsüne eklemelidir: cihazlar arasında eşlemiyoruz.
  • tzdatacheck saat dilimi güncellemelerinin doğru ve güvenli bir şekilde çalışması için gereken başlatma zamanı ikili programı.

Android kaynak ağacı, yukarıdakiyle ilgili genel kaynak kodunu içerir bileşenlerden bazılarını ele alacağız. Kodu test et kontrol edebilmesi için sağlanır. doğru bir şekilde etkinleştirdiklerinden emin olun.

Distro montajı

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

  1. Veri uygulaması, bir uygulama mağazasından indirilebilir veya başka cihazdan yüklenir. Sistem sunucusu işlemi ( timezone.RulesManagerServer/timezone.PackageTracker sınıf) yapılandırılmış, OEM'ye özgü Veri uygulaması paketinde yapılan değişiklikleri izler dokunun.

    Veri uygulaması güncellemeleri

    Şekil 1. Veri uygulaması güncellemeleri.

  2. Sistem sunucusu işlemi bir güncelleme kontrolünü tetikler. Güncelleyiciye benzersiz, tek kullanımlık bir jetonla hedeflenen bir amaç yayınlama Başv. Sistem sunucusu, oluşturduğu en son jetonu takip eder, böylece tetiklediği en son kontrolün ne zaman tamamlandığını belirleyebilir. diğer jetonlar yok sayılır.

    Tetikleyici güncellemesi

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

  3. Güncelleme kontrolü sırasında Güncelleyici uygulaması şunları gerçekleştirir: şu görevlerden yararlanabilirsiniz:
    • Kural Yöneticisi Hizmeti'ni çağırarak geçerli cihaz durumunu sorgular.

      Kural Yöneticisi Hizmeti Çağrısı

      Şekil 3. Veri uygulaması güncellemeleri, Kural Yöneticisi Hizmeti'ni çağırıyor.

    • İyi tanımlanmış bir ContentProvider URL'sini sorgulayarak Veri uygulamasını sorgular ve sütun özelliklerine bakın.

      Dağıtım bilgilerini alma

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

  4. Güncelleyici uygulaması, daha yakından inceleyeceğiz. Kullanılabilir işlemler şunlardır:
    • Yükleme isteğinde bulunun. Distro verileri, Data uygulamasından okunur ve sistem sunucusundaki RulesManagerService'e iletilir. İlgili içeriği oluşturmak için kullanılan Kural Yöneticisi Hizmeti, dağıtım biçimi sürümünün ve içeriğinin ve kurulumu aşamalandırmalıdır.
    • Kaldırma isteğinde bulunun (Bu nadiren görülür). Örneğin, /data ürünündeki APK devre dışı bırakılıyor veya kaldırılıyor ve cihaz şu anda /system sürümünde bulunan sürüme dönülüyor.
    • Hiçbir işlem yapmamayı tercih edebilirsiniz. Veri uygulaması dağıtımının geçersiz olduğu tespit edildiğinde gerçekleşir.
    ziyaret edin. Her durumda Güncelleyici uygulaması, 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şlatın ve tzdatacheck. Cihaz bir sonraki başlatıldığında, tzdatacheck ikilisi, herhangi bir aşamalı işlemi yürütür. tzdatacheck ikilisi, şu görevleri gerçekleştirebilirsiniz:
    • Oluşturma, değiştirme, oluşturma ve değiştirme işlemlerini yaparak aşamalı ve/veya silme işleminden önce /data/misc/zoneinfo/current dosyanın silinmesi diğer sistem bileşenleri açılıp dosyaları kullanmaya başladı.
    • /data klasöründeki dosyaların şu anki dosya için doğru olduğundan emin olun platform sürümü (cihaz yeni bir sistem güncellemesi ve dağıtım biçimi sürümü değişti.
    • IANA kuralları sürümünün, aşağıdaki sürümdeki sürümle aynı veya daha yeni olduğundan emin olun: /system Bu, cihazdan çıkan sistem güncellemelerine karşı koruma sağlar /system saat diliminde olduğundan daha eski saat dilimi kuralları verileri içerir görüntüsüdür.

Güvenilirlik

Uçtan uca yükleme süreci eşzamansız olup üç işletim sistemine bölünmüştür. daha fazla bilgi edineceksiniz. Yükleme sırasında herhangi bir noktada cihaz güç kaybına neden olabilir, kalmayabilir veya başka sorunlarla karşılaşabilirsiniz. Bu da, yükleme denetiminin eksik olmamalıdır. En iyi başarısız durumlarda Güncelleyici uygulaması sistemi bilgilendirir. sunucu tarafından gerçekleştirilen hatalar; en kötü durumda da Kural Yöneticisi Hizmeti hiç çağrı almıyor.

Sistem sunucusu kodu, bunu yapmak için bir etkinliğin tetiklenip tetiklenmediğini güncelleme kontrolünün tamamlandığını ve Veri Uygulama. Cihaz boşta ve şarj olurken, sistem sunucu kodu durumu değiştirir. Güncelleme kontrolünde eksiklik veya beklenmedik veri olduğunu tespit ederse uygulama sürümündeyken kendiliğinden bir güncelleme kontrolünü tetikler.

Güvenlik

Etkinleştirildiğinde, sistem sunucusundaki RulesManagerService kodu birçok kontrol gerçekleştirerek sistemin güvenli olduğundan emin olmaktır.

  • Kötü yapılandırılmış bir sistem görüntüsünün olduğunu gösteren sorunlar cihazın çalışmasını engelliyor başlatılıyor; kötü bir Güncelleyici veya Veri uygulaması yapılandırması ya da Güncelleyici veya veri uygulaması /system/priv-app içinde yok.
  • Kötü bir veri uygulamasının yüklendiğini gösteren sorunlar şunu engellemez: cihaz önyükleniyor, ancak bir güncelleme kontrolünün tetiklenmesini önleyin; örnekler veya Veri uygulaması herhangi bir güvenlik açığı oluşturmuyor. Beklenen URI'deki ContentProvider.

/data/misc/zoneinfo dizinleri için dosya izinleri: zorunlu kılınır. Tüm APK'larda olduğu gibi, Veri uygulaması /system/priv-app sürümünü imzalamak için kullanılan anahtarın aynısı. Veri uygulaması OEM'e özgü ö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 uygulamasını oluşturmalıdır.
  • Sistem görüntüsü derlemesine Güncelleyici ve Veri uygulamalarını 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üvencesini, ve güvenlikle ilgili konular:

  • Veri uygulaması için uygulamaya özel özel bir imzalama anahtarı oluşturmalıdır.
  • Saat dilimi güncellemeleri için sürüm ve sürüm stratejisi oluşturma bu güncellemenin hangi cihazlarda yapılacağını ve bu güncellemenin yalnızca bu güncellemelere ihtiyaç duyan cihazlara yüklenir. Örneğin, OEM’ler tüm cihazlarında tek bir veri uygulamasına sahip olmalarını sağlayabilir veya farklı cihazlarda Farklı cihazlara yönelik veri uygulamaları. Karar, paket seçimini etkiler muhtemelen kullanılan sürüm kodları ve KG stratejisi.
  • Stok Android saat dilimi verilerini kullanmak isteyip istemediklerini anlama AOSP'den edinebilir veya kendi sitelerini oluşturabilirler.

Veri uygulaması oluştur

AOSP, şurada veri uygulaması oluşturmak için gereken tüm kaynak kodunu ve derleme kurallarını içerir: Talimatlar ve örnek şablonlarla packages/apps/TimeZoneData AndroidManifest.xml ve şu konumda bulunan diğer dosyalar için: packages/apps/TimeZoneData/oem_template. Örnek şablonlar şunlardır: hem gerçek veri uygulaması APK'sı için bir derleme hedefi hem de Data uygulamasının test sürümlerini oluşturma.

OEM'ler Veri uygulamasını kendi simgeleri, adları, çevirileri ve bazı ipuçları vereceğim. Ancak Veri uygulaması başlatılamadığı için simge yalnızca Ayarlar > Uygulamalar ekranını açın.

Veri uygulaması, bir tapas derlemesiyle derlenecek şekilde tasarlanmıştır. sistem görüntüsüne eklenmeye uygun APK'lar üreten APK'lar (ilk sürüm için ve bir uygulama mağazası üzerinden imzalanıp dağıtılması (sonraki uygulama güncelleme) gerekir. Tapas kullanmayla ilgili ayrıntılar için bkz. Tapas kullanan veri uygulaması.

OEM'ler, cihazın sistem görüntüsünde önceden oluşturulmuş veri uygulamasını /system/priv-app Tapas tarafından oluşturulan önceden oluşturulmuş APK'ları dahil etmek için sistem görüntüsünde yoksa OEM'ler örnek dosyaları sistem görüntüsüne packages/apps/TimeZoneData/oem_template/data_app_prebuilt İlgili içeriği oluşturmak için kullanılan örnek şablonlar, Test paketlerinde veri uygulaması.

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

OEM'ler, Güncelleyici ve Veri uygulaması APK'larını Sistem görüntüsünün /system/priv-app dizini. Bunu yapmak için sistem görüntüsü derlemesi, Güncelleyici uygulamasını ve önceden oluşturulmuş Veri uygulamasını açıkça içermelidir. belirler.

Güncelleyici uygulaması, platform anahtarıyla imzalanmalı ve başka sistem uygulaması. Hedef şu şekilde tanımlanır: TimeZoneUpdater olarak packages/apps/TimeZoneUpdater. İlgili içeriği oluşturmak için kullanılan Veri uygulamalarına dahil etme işlemi OEM'ye özgüdür ve web sitesi için seçilen hedef ada bağlıdır. yardımcı olur.

Sistem sunucusunu yapılandırma

OEM'ler, saat dilimi güncellemelerini etkinleştirmek için sistem sunucusunu şunda tanımlanan yapılandırma özelliklerini geçersiz kılmayı deneyin: frameworks/base/core/res/res/values/config.xml

Özellik Açıklama Geçersiz Kılma Zorunlu mu?
config_enableUpdateableTimeZoneRules
Kural Yöneticisi Hizmeti'ni etkinleştirmek için true olarak ayarlanmalıdır. Evet
config_timeZoneRulesUpdateTrackingEnabled
Sistemin yapılan değişiklikleri dinlemesi için true olarak ayarlanmalıdır Veri uygulaması. Evet
config_timeZoneRulesDataPackage
OEM'ye özgü veri uygulamasının paket adı. Evet
config_timeZoneRulesUpdaterPackage
Varsayılan Güncelleyici uygulaması için yapılandırılır. Yalnızca bir farklı bir Güncelleyici uygulaması uygulaması. Hayır
config_timeZoneRulesCheckTimeMillisAllowed
Bir güncelleme kontrolünün RulesManagerService ve yükleme, kaldırma veya hiçbir işlem yapma yanıtı. Şu tarihten sonra: bu noktada spontane bir güvenilirlik tetikleyicisi oluşturulabilir. Hayır
config_timeZoneRulesCheckRetryCount
tarihinden önce izin verilen sıralı başarısız güncelleme kontrollerinin sayısı Kural Yöneticisi Hizmeti daha fazla öğe oluşturmayı durduruyor. Hayır

Yapılandırma geçersiz kılmaları, sistem görüntüsünde olmalıdır (tedarikçi firma veya diğer kaynaklarda değil) cihaz başlatılmayı reddedebilir. Yapılandırma, tedarikçi imajında olduğundan, Veri uygulaması olmadan bir sistem görüntüsüne güncelleniyordu (veya veri uygulaması/güncelleyici uygulama paketi adlarına sahip olan tüm uygulamalar) bir hata neden olur.

xTS testi

xTS, standart Android'e benzeyen, OEM'e özel tüm test paketlerini ifade eder Tradefed (CTS ve VTS gibi) kullanan test paketleri. Bu tür testlere sahip OEM'ler paketleri, aşağıdaki konumlarda sağlanan Android saat dilimi güncelleme testlerini ekleyebilir yerler:

  • Kod packages/apps/TimeZoneData/testing/xts içeriyor temel otomatik işlevsel test için gereklidir.
  • packages/apps/TimeZoneData/oem_template/xts bir örnek içeriyor Tradefed benzeri bir xTS paketine test eklemek için kullanılan dizin yapısı. Olduğu gibi diğer şablon dizinlerini izlerseniz, OEM'lerin kendi gerekiyor.
  • packages/apps/TimeZoneData/oem_template/data_app_prebuilt . gerekli önceden oluşturulmuş test APK'larını dahil etmek için derleme zamanı yapılandırması içerir yardımcı olur.
ziyaret edin.

Saat dilimi güncellemeleri oluşturma

IANA yeni bir saat dilimi kuralı kümesi yayınladığında Android temel kitaplıkları ekibi AOSP'de sürümleri güncellemek için yama oluşturur. Stok Android kullanan OEM'ler sistem ve distro dosyaları bu kayıtları alabilir. Bunları yeni bir verilerini güncellemez, sonra cihazlarını güncellemek için yeni sürümü yayınlar emin olabilirsiniz.

Veri uygulamaları, Android sürümleriyle yakından ilişkili dağıtım dosyaları içerdiğinden, OEM'ler, desteklenen her cihaz için veri uygulamasının yeni bir sürümünü oluşturmalıdır Bir OEM'in güncellemek istediği Android sürümü. Örneğin, bir OEM Android 8.1, 9 ve 10 için güncelleme sağlama bu işlemi üç kez tamamlamaları gerekir.

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

Bu adımda, OEM'ler Google tarafından sağlanan Şuradan system/timezone ve external/icu: AOSP'de release-dev dallarını kullanabilir ve bu taahhütleri Android kaynak kodu.

Sistem/saat dilimi AOSP yaması, güncellenen dosyaları şurada içerir: system/timezone/input_data ve system/timezone/output_data. Daha fazla yerel ürün geliştirmesi gereken OEM'ler giriş dosyalarını değiştirebilir ve ardından, bu dosyaların system/timezone/input_data ve external/icu- output_data içinde dosya oluştur.

En önemli dosya, system/timezone/output_data/distro/distro.zip, yani Veri uygulaması APK'sı oluşturulduğunda otomatik olarak dahil edilir.

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

OEM'ler bu adımda veri uygulamasının sürüm kodunu günceller. Derleme distro.zip otomatik olarak alınır, ancak Veri uygulamasının yeni olarak tanınması ve şu işlemlerde kullanılması için yeni bir sürüm kodu olmalıdır: Önceden yüklenmiş bir Veri uygulamasını veya cihazda yüklü bir Veri uygulamasını önceki bir güncelleyin.

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

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ürümünden yüksek olmalıdır). Ayrıntılı bilgi için örnek sürüm kodu stratejisini inceleyin şema; örnek şema veya benzer bir şema kullanılırsa test sürüm kodlarının güncellenmesine gerek yoktur, çünkü bu kodların daha yüksek daha iyi hale getirebilirsiniz.

3. adım: Yeniden oluşturun, imzalayın, test edin ve yayınlayın

Bu adımda OEM'ler tapas kullanarak APK'yı yeniden oluşturur, oluşturulan APK'yı test edin, ardından APK'yı test edin ve yayınlayın:

  • Piyasaya sunulmamış cihazlar için (veya yayınlanan bir cihazda), yeni APK'ları Veri uygulaması önceden oluşturulmuş dizinine gönderin inceleyerek sistem görüntüsü ve xTS testlerinin en son APK'lara sahip olduğundan emin olun. OEM’ler düzgün çalışıp çalışmadığını test eder (yani CTS'yi OEM'e özel otomatik ve manuel testler) kullanabilirsiniz.
  • Yayınlanmış ve artık sistem güncellemelerini almayan cihazlar için imzalı APK yalnızca bir uygulama mağazasında yayınlanabilir.

Kalite güvencesi ve güncellenmiş ürünlerin test edilmesinden OEM’ler Veri uygulaması yayınlanmadan önce,

Veri uygulaması sürüm kod stratejisi

Veri uygulamasında bir uygun sürüm oluşturma stratejisini kontrol edin. Örneğin, Örneğin, daha eski bir APK içeren sistem güncellemesi alınırsa uygulama mağazasından indirdiyseniz uygulama mağazasındaki sürüm saklanmalıdır.

APK sürüm kodu aşağıdaki bilgileri içermelidir:

  • Distro biçim sürümü (ana + alt)
  • Artan (opak) sürüm numarası

Şu anda platform API düzeyi ile dağıtım biçimindeki sürüm arasında yakın bir ilişki vardır çünkü her API düzeyi genellikle ICU'nun yeni bir sürümüyle dağıtım dosyalarını uyumsuz hale getirir). Gelecekte Android, bu durumu değiştirerek birden çok Android platformu sürümünde (ve API) düzeyi, veri uygulaması sürüm kod şemasında kullanılmaz).

Örnek sürüm kodu stratejisi

Bu örnek sürüm oluşturma sayı şeması, yüksek dağıtım biçiminin sürümleri, daha düşük dağıtım biçimli sürümlerin yerini alır. AndroidManifest.xml, şu işlemler için android:minSdkVersion kullanıyor: eski cihazların daha yüksek dağıtım biçimine sahip sürümleri almadığından emin olun çok daha zor olacaktır.

Sürüm kontrolü

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

Örnek Değer Amaç
E Rezervasyon yapıldı Gelecekteki alternatif şemalara/test APK'larına izin verir. Bu, başlangıçta (dolaylı olarak) 0 Temel tür, imzalı 32 bit int türü olduğundan bu şema, iki taneye kadar numaralandırma şeması düzeltmesi.
01 Ana biçim sürümü 3 ondalık basamaklı ana biçim sürümünü izler. Distro biçimi, Burada 3 ondalık basamak ancak yalnızca 2 basamak kullanılır. 100'e ulaşmak pek olası değil. her API seviyesi için beklenen büyük artışa göre hesaplanır. Ana sürüm 1 eşdeğerdir API düzeyi 27'ye.
1 Alt biçim sürümü 3 ondalık basamak içeren alt biçimli sürümü izler. Distro biçimi, 3 ondalık basamak, ancak burada yalnızca 1 basamak kullanılır. 10 rakama ulaşması pek olası değildir.
X Rezervasyon yapıldı Üretim sürümleri için 0'dır (ve test APK'larından farklı olabilir).
ZZZZZ Opak sürüm numarası İstek üzerine ayrılan ondalık sayı. Geçiş reklamlarına izin veren boşluklar içeriyor veya gerekiyorsa yapılacak güncellemeler.

Ondalık yerine ikili kullanılsaydı şema daha iyi paketlenebilirdi, ancak bu şemanın, kullanıcılar tarafından okunabilmesi avantajı vardır. Tam sayı aralığı tükendiyse, Veri uygulaması paketinin adı değişebilir.

Sürüm adı, sürüm adının kullanıcılar tarafından okunabilecek şekilde örnek: major=001,minor=001,iana=2017a, revision=1,respin=2. Örnekler aşağıdaki tabloda gösterilmiştir.

# Sürüm kodu minSdkSürümü {Ana biçim sürümü},{Küçük biçim sürümü},{IANA kuralları version},{Düzeltme}
1 11000010 O-MR1 ana=001,minor=001,iana=2017a,düzeltme=1
2 21000010 P ana=002,minor=001,iana=2017a,düzeltme=1
3 11000020 O-MR1 ana=001,minor=001,iana=2017a,düzeltme=2
4 11000030 O-MR1 ana=001,minor=001,iana=2017b,düzeltme=1
5 21000020 P ana=002,minor=001,iana=2017b,düzeltme=1
6 11000040 O-MR1 ana=001,minor=001,iana=2018a,düzeltme=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üne ait iki APK sürümü gösterilmektedir farklı ana format sürümleri kullanabilirsiniz. 2, sayısal olarak 1'den yüksektir. yeni cihazların daha yüksek biçimli sürümleri almasını sağlamak için gereklidir. İlgili içeriği oluşturmak için kullanılan minSdkVersion, O cihazlara P sürümünün sağlanmamasını sağlar.
  • 3. Örnek, 1 için bir düzeltme/düzeltme olup sayısal olarak 1'den yüksektir.
  • 4 ve 5. örnekler, O-MR1 ve P'nin 2017b sürümlerini göstermektedir. Sayısal olmak ilgili IANA sürümlerinin/Android revizyonlarının yerini alırlar. öncülleri.
  • 6 ve 7. örneklerde, O-MR1 ve P'nin 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. Örnek, yeniden sabitlemek için 3 ile 4 arasında kalan boşluğun kullanımını göstermektedir değil.

Her cihaz varsayılan, uygun şekilde sürümü oluşturulmuş bir APK ile gönderildiğinden P cihaza O-MR1 sürümünün yüklü olma riski yoktur. çünkü P sisteminin görüntü sürümünden daha düşük bir sürüm numarasına sahip. CEVAP /data içinde O-MR1 sürümü yüklü olan ve daha sonra alan P'ye yapılan bir sistem güncellemesinde, /system sürümü P sürümü her zaman daha yüksek olduğundan /data içindeki O-MR1 sürümü %38'e varan oranda artış gördük.

Tapas kullanarak Data uygulaması oluşturma

OEM'ler, saat dilimi veri uygulamasının çoğu bölümünün yönetiminden, yapılandırdığınızdan emin olun. Veri uygulaması geliştirilmek üzere tasarlandı Eklenebilecek APK'lar üreten bir tapas derlemesi ile sistem görüntüsü (ilk sürüm için) olmalı ve bir uygulama mağazası (sonraki güncellemeler için)

Tapas, Android yapısının azaltılmış bir sürümüdür. dağıtılabilir versiyonlarını üretmek için azaltılmış kaynak ağacı kullanan bir sistemdir. Normal Android derleme sistemine aşina olan OEM'ler, dosyaları oluşturmak için bu dosyayı kullanabilirsiniz.

Manifest dosyasını oluşturma

Kaynak ağacı, genellikle indirgenmiş bir kaynak ağacına, genellikle derleme sistemi için gereken Git projelerini ifade eder. uygulamasını indirin. Şuradaki talimatları uyguladıktan sonra: Veri uygulaması oluşturmak isteyen OEM'lerin, OEM'e özel en az iki Git projesi kullanılarak oluşturulmuş packages/apps/TimeZoneData/oem_template:

  • Bir Git projesinde manifest ve oluşturmak için gereken derleme dosyalarını (örneğin, vendor/oem/apps/TimeZoneData) bilgileri gösterilir. Bu proje ayrıca xTS testleri tarafından kullanılabilecek test APK'ları için derleme kuralları içerir.
  • Bir Git projesi, ve xTS testlerine dahil edilmesi gerekir.

Uygulama derlemesi, platform derlemesi olmalıdır veya OEM'den bağımsız kod kitaplıkları içerir.

Aşağıdaki manifest snippet'i, en az sayıda Git projesi içerir saat dilimi Data uygulamasının O-MR1 derlemesini desteklemek için gereklidir. OEM'ler OEM'ye özgü Git projelerini eklemelidir (genellikle içerir) ekleyebilirsiniz ve farklı yapılandırmalar dallarını buna göre belirleyebilirsiniz.

   <!-- 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 yapısını çalıştırın

Kaynak ağacı oluşturulduktan sonra tapas derlemesini çağırın kullanarak şunları yapabilirsiniz:

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, out/dist dizininde teşvik etmek anlamına gelir. Bu dosyalar, dizine eklenmek üzere önceden oluşturulmuş dizine uyumlu olması için sistem görüntüsünün ve/veya bir uygulama mağazasından dağıtılmasını cihazlar.