FCM Yaşam Döngüsü

Bir Android çerçeve sürümü, çerçevenin neleri kullanabileceğini ve Hedef FCM sürümü gereksinimlerini tanımlayan her yükseltilebilir Hedef FCM Sürümü için bir tane olmak üzere birden çok Çerçeve Uyumluluk Matrisine (FCM) sahiptir. FCM yaşam döngüsünün bir parçası olarak Android, HIDL HAL'leri kullanımdan kaldırır ve kaldırır, ardından FCM dosyalarını HAL Sürümünün durumunu yansıtacak şekilde değiştirir.

Kendi ekosistemlerinde yalnızca çerçeve OTA'ları etkinleştirmek için, satıcı arayüzlerini genişleten iş ortakları da aynı yöntemleri kullanarak HIDL HAL'leri kullanımdan kaldırmalı ve kaldırmalıdır.

Terminoloji

Çerçeve Uyumluluk Matrisi (FCM) Uygun satıcı uygulamalarıyla ilgili çerçeve gereksinimlerini belirten bir XML dosyası. Uyumluluk matrisi sürümlendirilir ve her çerçeve sürümü için yeni bir sürüm dondurulur. Her çerçeve sürümü birden çok FCM içerir.
Platform FCM Sürümleri (S F ) Bir çerçeve sürümündeki tüm FCM sürümleri kümesi. Çerçeve, bu FCM'lerden birini karşılayan herhangi bir satıcı uygulamasıyla çalışabilir.
FCM Sürümü (F) Bir çerçeve sürümündeki tüm FCM'ler arasında en yüksek sürüm.
Hedef FCM Sürümü (V) Cihaz manifestinde açıkça ilan edilen hedeflenen FCM sürümü (S F'den ), bir satıcı uygulamasının tatmin ettiğini belirtti. Aygıt Manifest'inde daha yeni HAL sürümleri bildirebilse de, yayınlanan bir FCM'ye karşı bir satıcı uygulaması oluşturulmalıdır.
HAL Sürümü Bir HAL Sürümü, foo@xy biçimindedir, burada foo , HAL adıdır ve xy , özel sürümdür; ör. nfc@1.0 , keymaster@3.0 (kök öneki, ör. android.hardware , bu belge boyunca atlanmıştır.)
Cihaz Bildirimi Satıcı resminin hangi HAL sürümlerini sağladığını belirten bir XML dosyası. Bir aygıt bildiriminin içeriği aygıtın Hedef FCM sürümü tarafından sınırlandırılmıştır, ancak V'ye karşılık gelen FCM'ye göre kesinlikle daha yeni olan HAL'leri listeleyebilir.

Yeni bir FCM Sürümünde Geliştirme

Android, her çerçeve sürümü için (Android 8, 8.1, vb.) FCM Sürümünü artırır. Geliştirme sırasında, yeni compatibility_matrix.current.xml dosyası yaratılır ( F ) ve mevcut compatibility_matrix.f.xml (burada f < F ) artık değiştirilmez.

Yeni bir FCM Sürüm F geliştirmeye başlamak için:

  1. Son Kopya compatibility_matrix.<F-1>.xml için compatibility_matrix.current.xml .
  2. Dosyadaki level özniteliğini F .
  3. Bu uyumluluk matrisini aygıta yüklemek için ilgili yapı kurallarını ekleyin.

Yeni bir HAL ile tanışın

Geçerli FCM Versiyon Android'in yeni HAL (Wi-Fi, NFC, vs.) tanıtırken gelişme sırasında, F , için HAL eklemek compatibility_matrix.current.xml aşağıdaki optional ayarlarla:

  • V = F ile gönderilen cihazların bu HAL ile başlatılması gerekiyorsa optional="false" ,

    VEYA
  • V = F ile gönderilen cihazlar bu HAL olmadan başlatılabilirse optional="true" .

Örneğin, Android 8.1 isteğe bağlı bir HAL olarak cas@1.0 kullanıma cas@1.0 . Aşağıdaki giriş eklendi böylece Android 8.1 ile piyasaya cihazlar, bu HAL uygulamak için gerekli değildir compatibility_matrix.current.xml (yeniden adlandırıldı compatibility_matrix.2.xml yayımlanan Android 8.1 sonrası):

<hal format="hidl" optional="true">
    <name>android.hardware.cas</name>
    <version>1.0</version>
    <interface>
        <name>IMediaCasService</name>
        <instance>default</instance>
    </interface>
</hal>

HAL'ı yükseltme (küçük)

Geliştirme sırasında, bir xz mevcut FCM Sürüm F xz x.(z+1) 'e küçük bir sürüm yükseltmesi varsa, bu sürüm:

  • İle başlatılması cihazlarda gerekli V = F , compatibility_matrix.current.xml şart durum x.(z+1) ve optional="false" .
  • İle başlatılması cihazlarda gerekli değildir V = F , compatibility_matrix.current.xml kopyalamalıyız xy-z den ve opsiyonel olma compatibility_matrix.<F-1>.xml ve sürümünü değiştirmek xw-(z+1) (burada w >= y ).

Örneğin, Android 8.1, broadcastradio@1.1 1.0 HAL'ın küçük sürüm yükseltmesi olarak tanıttı. Daha eski sürüm olan broadcastradio@1.0 , Android 8.0 ile başlatılan cihazlar için isteğe bağlıyken, daha yeni sürüm olan broadcastradio@1.1 , Android 8.1 ile başlatılan cihazlar için isteğe bağlıdır. compatibility_matrix.1.xml :

<hal format="hidl" optional="true">
    <name>android.hardware.broadcastradio</name>
    <version>1.0</version>
    <interface>
        <name>IBroadcastRadioFactory</name>
        <instance>default</instance>
    </interface>
</hal>

Bu giriş kopyalanan compatibility_matrix.current.xml (yeniden adlandırıldı compatibility_matrix.2.xml şöyle Android 8.1 yayınlandı sonra) ve modifiye:

<hal format="hidl" optional="true">
    <name>android.hardware.broadcastradio</name>
    <version>1.0-1</version>
    <interface>
        <name>IBroadcastRadioFactory</name>
        <instance>default</instance>
    </interface>
</hal>

HAL'ı yükseltme (ana)

HAL akım FCM Versiyon en büyük sürüm yükseltme sahip olduğunda gelişme sırasında, F , yeni ana sürüm x.0 eklenir compatibility_matrix.current.xml aşağıdaki optional ayarlarla:

  • optional="false" tek sürümü ile x.0 ile Gemi o cihazlarda ise, V = F ile başlatmak gerekir x.0 .
  • optional="false" ancak aynı <hal> etiketindeki eski ana sürümlerle birlikte, V = F ile gönderilen aygıtların bu HAL ile başlatılması gerekiyorsa, ancak daha eski bir ana sürümle başlatılabiliyorsa.
  • V = F ile gönderilen aygıtların HAL'ı başlatması gerekmiyorsa optional="true" .

Örneğin, Android 9, health@2.0 1.0 health@2.0 ana sürüm yükseltmesi olarak sunar ve 1.0 HAL'ı kullanımdan health@2.0 . Eski sürüm olan health@1.0 , Android 8.0 ve Android 8.1 ile başlatılan cihazlar için isteğe bağlıdır. Android 9 ile başlatılan cihazlar, kullanımdan kaldırılan 1.0 HAL'yi sağlamamalı ve bunun yerine yeni 2.0 sürümünü sağlamalıdır. compatibility_matrix.legacy.xml , compatibility_matrix.1.xml ve compatibility_matrix.2.xml :

<hal format="hidl" optional="true">
    <name>android.hardware.health</name>
    <version>1.0</version>
    <interface>
        <name>IHealth</name>
        <instance>default</instance>
    </interface>
</hal>

Bu giriş kopyalanır compatibility_matrix.current.xml (yeniden adlandırıldı compatibility_matrix.3.xml aşağıdaki gibi Android 9 sürümü ile) ve modifiye:

<hal format="hidl" optional="false">
    <name>android.hardware.health</name>
    <version>2.0</version>
    <interface>
        <name>IHealth</name>
        <instance>default</instance>
    </interface>
</hal>

Kısıtlamalar:

  • 2.0 HAL olduğu için compatibility_matrix.3.xml ile optional="false" , cihazlar Android 9 ile fırlatma 2.0 HAL gemi gerektiğini söyledi.
  • 1,0 HAL olmadığından compatibility_matrix.3.xml , cihazları Android 9 ile fırlatma (bu HAL kabul edilir olarak kaldırıldı) 1.0 HAL sağlamaz gerektiğini söyledi.
  • 1.0 HAL, isteğe bağlı bir HAL olarak eski / 1 / 2.xml'de (Android 9'un birlikte çalışabileceği eski FCM Sürümleri) mevcut olduğundan, Android 9 çerçevesi yine de 1.0 HAL ile çalışabilir (bu, kaldırılmış bir HAL Sürümü olarak kabul edilmez) ).

Yeni FCM Sürümleri

Sistem bölümünde bir FCM Sürümü yayınlama işlemi, yalnızca Google tarafından bir AOSP sürümünün parçası olarak yapılır ve aşağıdaki adımları içerir:

  1. Rename compatibility_matrix.current.xml için compatibility_matrix.F.xml .
  2. Dosyanın level="F" özniteliğine sahip olduğundan emin olun.
  3. Dosya adı değişikliğini yansıtmak için ilgili oluşturma kurallarını düzenleyin.
  4. Tüm cihazların oluşturulduğundan ve önyüklendiğinden emin olun.
  5. En son çerçeveyle (Gönderim API düzeyine göre) başlatılan cihazların Hedef FCM Sürüm V >= F sahip olmasını sağlamak için VTS testlerini güncelleyin .
  6. Dosyayı AOSP'de yayınlayın.

Adını ve yayınlanan kez Bu dosya değiştirilemez. Örneğin, Android 9 gelişimi sırasında aşağıdaki dosyalar vardır inşa için hardware/interfaces/compatibility_matrices/ :

  • compatibility_matrix.legacy.xml
  • compatibility_matrix.1.xml
  • compatibility_matrix.2.xml
  • compatibility_matrix.current.xml

Android 9 bırakıldığında, compatibility_matrix.current.xml yeniden adlandırılır compatibility_matrix.3.xml ve aşağıdaki dosyalar için inşa edilir hardware/interfaces/compatibility_matrices/ :

  • compatibility_matrix.legacy.xml
  • compatibility_matrix.1.xml
  • compatibility_matrix.2.xml
  • compatibility_matrix.3.xml

VTS testleri , Android 9 ile başlatılan cihazların Hedef FCM Sürümü> = 3'e sahip olmasını sağlar.

Ek olarak, product ve system_ext FCM'ler her platform FCM sürümleri için gereksinimleri de listeleyebilir. Ürün ve system_ext bölümlerindeki FCM sürümlerinin yayınlanması, sırasıyla bu görüntülerin sahibi tarafından yapılır. Ürün ve system_ext bölümlerindeki FCM sürüm numaraları, sistem bölümündekilerle aynı olmalıdır. Sistem bölümündeki FCM sürümlerine benzer şekilde, ürün ve system_ext bölümlerindeki FCM sürüm F'deki uyumluluk matrisi, hedef FCM sürüm F'ye sahip bir cihazdaki gereksinimleri yansıtır.

HAL Sürümünün kullanımdan kaldırılması

Bir HAL Sürümünün kullanımdan kaldırılması bir geliştirici kararıdır (yani, AOSP HAL'ler için kararı Google verir). Daha yüksek bir HAL sürümü (küçük veya büyük) yayınlandığında meydana gelebilir. Belirli bir HAL zaman foo@xy FCM Versiyon de itiraz edildi F , o Hedef FCM Sürüm ile herhangi bir cihaz fırlatma demektir V = F ya da geç uygulamak gerekir foo sürümü de xy veya daha eski herhangi bir sürümü xy . Kullanımdan kaldırılmış bir HAL sürümü, cihazları yükseltmek için çerçeve tarafından hala desteklenmektedir.

FCM Sürüm F piyasaya sürüldüğünde, belirli HAL Sürümü Hedef FCM Sürümü V = F için en son FCM'de açıkça belirtilmemişse, HAL Sürümü foo@xy kullanımdan kaldırılmış kabul edilir. V ile başlatılan cihazlar için aşağıdaki koşullardan biri geçerlidir:

  • Çerçeve daha yüksek bir sürüm gerektirir (büyük veya küçük);
  • Çerçeve artık HAL gerektirmiyor.

Örneğin, Android 9'da, health@2.0 , 1.0 health@2.0 ana sürüm yükseltmesi olarak tanıtıldı. health@1.0 kaldırılır compatibility_matrix.3.xml ancak mevcut olan compatibility_matrix.legacy.xml , compatibility_matrix.1.xml ve compatibility_matrix.2.xml . Bu nedenle, health@1.0 kullanımdan kaldırılmış kabul edilir.

Hedef FCM Sürümleri için desteğin kaldırılması

Belirli bir Hedef FCM Sürüm V aktif cihazlar belirli bir eşiğin altına düştüğünde, Hedef FCM Sürümü bir sonraki çerçeve sürümünün S F setinden kaldırılır. Bu, yapı kurallarından compatibility_matrix.V.xml dosyasını kaldırarak (böylece sistem görüntüsüne artık yüklenmeyecek şekilde) ve kaldırılan işlevselliğe uygulanan veya bunlara bağlı olan herhangi bir kodu silerek yapılır. Belirli bir çerçeve sürümü için S F'nin dışında hedef FCM Sürümüne sahip cihazlar bu sürüme yükseltilemez.

HAL Sürüm durumu

Aşağıdaki bölümler bir HAL Sürümünün olası durumlarını (kronolojik sırayla) açıklamaktadır.

Yayınlanmadı

Bir HAL Sürümü, herkese açık ve donmuş uyumluluk matrislerinin hiçbirinde yer almıyorsa, yayınlanmamış ve muhtemelen geliştirme aşamasında olduğu kabul edilir. Bu yalnızca içindedir HAL Sürümleri içerir compatibility_matrix.current.xml . Örnekler:

  • Android 9 (önce geliştirilmesi sırasında compatibiility_matrix.current.xml olarak yeniden adlandırılır compatibility_matrix.3.xml ), health@2.0 HAL yayınlanmamış bir HAL kabul edildi.
  • teleportation@1.0 HAL, yayınlanmış herhangi bir uyumluluk matrisinde yer almaz ve ayrıca yayınlanmamış bir HAL olarak kabul edilir.

Yayınlandı ve Güncel

Bir HAL Sürümü herhangi bir genel ve donmuş uyumluluk matrisindeyse, yayınlanır. (Zaman FCM Versiyon 3 dondurulur sonra örneğin compatibiility_matrix.current.xml yeniden adlandırılır compatibility_matrix.3.xml ) ve AOSP yayınlanmış, health@2.0 HAL serbest ve mevcut HAL Version olarak kabul edilir.

Bir HAL Sürümü, en yüksek FCM Sürümüne sahip olan genel ve dondurulmuş bir uyumluluk matrisindeyse ( compatibility_matrix.current.xml hariç), HAL sürümü günceldir (yani kullanımdan kaldırılmamıştır). Örneğin, (örneğin mevcut HAL sürümleri nfc@1.0 tanıtılan compatibility_matrix.legacy.xml var olmaya devam) compatibility_matrix.3.xml da yayımlanan ve mevcut HAL Sürümleri olarak kabul edilmektedir.

Yayınlandı ancak Kullanımdan Kaldırıldı

Bir HAL Sürümü, ancak ve ancak aşağıdaki durumlarda kullanımdan kaldırılır:

  • Yayınlandı;
  • En yüksek FCM Sürümüne sahip olan genel ve donmuş uyumluluk matrisinde değildir;
  • Çerçevenin hala desteklediği, herkese açık ve donmuş bir uyumluluk matrisinde.

Örnekler:

Dolayısıyla power@1.0 akım olmakla DEĞİL Android 9'da, kullanımdan kaldırıldı.

Kaldırıldı

Bir HAL Sürümü, ancak ve ancak aşağıdaki durumlarda kaldırılır:

  • Daha önce yayınlandı;
  • Çerçevenin desteklediği herhangi bir genel ve donmuş uyumluluk matrisinde yer almıyor.

Genel, dondurulmuş ancak çerçeve tarafından desteklenmeyen uyumluluk matrisleri, kaldırılan HAL sürümlerinin yeni cihazlarda olmamasını sağlamak için VTS testlerinin yazılabilmesi için kaldırılan HAL Sürümleri kümesini tanımlamak için kod tabanında tutulur.

Eski FCM'ler

Hedef FCM Sürümü mirası, Tiz olmayan tüm cihazlar için özel bir değerdir. Eski FCM, compatibility_matrix.legacy.xml , listeler eski cihazlarda çerçevenin gereksinimleri (yani cihazlar öncesinde Android 8.0 başlatıldı).

Bu dosya sürüm F sahip bir FCM için mevcutsa, Treble olmayan herhangi bir aygıt, aygıt bildiriminin bu dosyayla uyumlu olması koşuluyla F yükseltilebilir. Kaldırılması, diğer Hedef FCM Sürümleri için FCM'lerle aynı prosedürü izler (8.0 öncesi etkin cihazların sayısı belirli bir eşiğin altına düştükten sonra kaldırılır).

Yayınlanan FCM sürümleri

Yayınlanan FCM sürümlerinin listesi, hardware/interfaces/compatibility_matrices altında bulunabilir.

Belirli bir Android sürümüyle yayınlanan FCM sürümünü bulmak için bkz. Level.h .