FCM yaşam döngüsü

Bir Android çerçeve sürümünde, ç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 fazla Çerçeve Uyumluluk Matrisi (FCM) bulunur. 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.

Satıcı arayüzlerini genişleten iş ortaklarının kendi ekosistemlerinde yalnızca çerçeve OTA'larını etkinleştirmek için aynı yöntemleri kullanarak HIDL HAL'leri de kullanımdan kaldırması ve kaldırması gerekir.

Terminoloji

Çerçeve Uyumluluk Matrisi (FCM)
Uygun satıcı uygulamalarına ilişkin ç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 fazla FCM içerir.
Platform FCM Versiyonları ( SF )
Bir çerçeve sürümündeki tüm FCM sürümlerini içeren set. Çerçeve, bu FCM'lerden birini karşılayan herhangi bir satıcı uygulamasıyla çalışabilir.
FCM Versiyonu (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)
Bir satıcı uygulamasının karşıladığı, cihaz bildiriminde açıkça beyan edilen hedeflenen FCM sürümü ( SF'den itibaren). Yayınlanan bir FCM'ye karşı bir satıcı uygulaması oluşturulmalıdır, ancak Cihaz Bildiriminde daha yeni HAL sürümlerini bildirebilir.
HAL Sürümü
Bir HAL Sürümü foo@xy biçimine sahiptir; burada foo HAL adıdır ve xy belirli bir sürümdür; örn. nfc@1.0 , keymaster@3.0 (kök öneki, örn. android.hardware , bu belge boyunca ihmal edilmiştir.)
Cihaz Bildirimi
Satıcı ve ODM görüntüleri de dahil olmak üzere satıcı arayüzünün cihaz tarafının hangi HAL sürümlerini sağladığını belirten XML dosyaları. Bir cihaz bildiriminin içeriği, cihazın Hedef FCM sürümü tarafından kısıtlanır ancak V'ye karşılık gelen FC'ye göre kesinlikle daha yeni olan HAL'leri listeleyebilir.
Cihaz HAL'leri
Cihaz bildiriminde listelenen (sağlanan) ve çerçeve uyumluluk matrisinde (FCM) listelenen (gerekli veya isteğe bağlı) HAL'ler.
Cihaz Uyumluluk Matrisi (DCM)
Uyumlu çerçeve uygulamalarına ilişkin satıcı gereksinimlerini belirten bir XML dosyası. Her cihaz bir DCM içerir.
Çerçeve Bildirimi
Sistem, sistem_ext ve ürün görüntüleri de dahil olmak üzere satıcı arayüzünün çerçeve tarafının hangi HAL sürümlerini sağladığını belirten bir XML dosyası. Çerçeve bildirimindeki HAL'ler, cihazın Target FCM sürümüne göre dinamik olarak devre dışı bırakılır.
Çerçeve HAL'leri
Çerçeve bildiriminde sağlandığı şekilde listelenen HAL'ler, cihaz uyumluluk matrisinde (DCM) gerekli veya isteğe bağlı olarak listelenir.

Kod Tabanındaki FCM Yaşam Döngüsü

Bu belge özette FCM yaşam döngüsünü açıklamaktadır. Şu anda desteklenen bildirimleri görmek için hardware/interfaces/compatibility_matrix.<FCM>.xml bakın; burada FCM system/libvintf/include/vintf/Level.h konumunda bulunabilir.

Android 14'ten itibaren desteklenen düzeyler şunlardır:

FCM Android Sürümü
4 Android 10/Q
5 Android 11/R
6 Android 12/S
7 Android 13/T
8 Android 14/U

Yeni bir FCM sürümünde geliştirme

Android, her çerçeve sürümü için (Android 8, 8.1 vb. gibi) FCM sürümünü artırır. Geliştirme sırasında, yeni compatibility_matrix.F.xml oluşturulur ve mevcut compatibility_matrix.f.xml (burada f < F ) artık değişmez.

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

  1. En son compatibility_matrix.<F-1>.xml compatibility_matrix.F.xml dosyasına kopyalayın.
  2. Dosyadaki level niteliğini F olarak güncelleyin.
  3. Bu uyumluluk matrisini cihaza yüklemek için ilgili derleme kurallarını ekleyin.

Yeni bir HAL'la tanışın

Geliştirme sırasında, mevcut FCM sürümü F Android'e yeni bir HAL (Wi-Fi, NFC vb.) eklerken, HAL'yi aşağıdaki optional ayarlarla compatibility_matrix.F.xml dosyasına ekleyin:

  • optional="false" , eğer V = F ile gönderilen cihazların bu HAL ile başlatılması gerekiyorsa,
  • optional="true" , eğer V = F ile birlikte gönderilen cihazlar bu HAL olmadan başlatılabilirse.

Örneğin, Android 8.1 isteğe bağlı HAL olarak cas@1.0 tanıttı. Android 8.1 ile başlatılan cihazların bu HAL'yi uygulaması gerekmediğinden, compatibility_matrix.F.xml dosyasına (bu sürümün geliştirilmesi sırasında geçici olarak compatibility_matrix.current.xml olarak adlandırılıyordu) aşağıdaki giriş eklendi:

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

HAL'yi (minor) yükseltme

Geliştirme sırasında, bir HAL'ın mevcut FCM Sürüm F xz x.(z+1) e küçük sürüm yükseltmesi olduğunda, eğer bu sürüm şu şekildeyse:

  • V = F ile başlatılan cihazlarda gerekli olan compatibility_matrix.F.xml dosyasında x.(z+1) ve optional="false" belirtilmelidir.
  • V = F ile başlatılan cihazlarda gerekli değildir; compatibility_matrix.F.xml xy-z ve optionity'yi compatibility_matrix.<F-1>.xml kopyalamalı ve sürümü xw-(z+1) olarak değiştirmelidir (burada w >= y ).

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

<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ş compatibility_matrix.F.xml dosyasına kopyalandı ve aşağıdaki şekilde değiştirildi:

<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'yi (majör) yükseltin

Geliştirme sırasında, bir HAL'in mevcut FCM Sürüm F ana sürüm yükseltmesi olduğunda, yeni ana sürüm x.0 aşağıdaki optional ayarlarla compatibility_matrix.F.xml dosyasına eklenir:

  • optional="false" yalnızca x.0 sürümüyle, eğer V = F ile gönderilen cihazların x.0 ile başlatılması gerekiyorsa.
  • optional="false" ancak daha eski ana sürümlerle birlikte aynı <hal> etiketinde, eğer V = F ile birlikte gelen cihazların bu HAL ile başlatılması gerekiyorsa, ancak daha eski bir ana sürümle başlatılabilirse.
  • optional="true" , eğer V = F ile birlikte gönderilen cihazların HAL'ı başlatması gerekmiyorsa.

Örneğin, Android 9, 1.0 HAL'in ana sürüm yükseltmesi olarak health@2.0 sunuyor ve 1.0 HAL'i kullanımdan kaldırıyor. 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ı, 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ş compatibility_matrix.F.xml dosyasına kopyalandı ve aşağıdaki şekilde değiştirildi:

<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, compatibility_matrix.3.xml dosyasında ve optional="false" dosyasında olduğundan, Android 9 ile başlatılan cihazların 2.0 HAL ile birlikte gönderilmesi gerekir.`
  • 1.0 HAL, compatibility_matrix.3.xml dosyasında olmadığından, Android 9 ile başlatılan cihazların 1.0 HAL'yi sağlamaması gerekir (çünkü bu HAL kullanımdan kaldırılmıştır).
  • 1.0 HAL, isteğe bağlı bir HAL olarak eski/1/2.xml'de (Android 9'un çalışabileceği daha 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 süreci, AOSP sürümünün bir parçası olarak yalnızca Google tarafından gerçekleştirilir ve aşağıdaki adımları içerir:

  1. compatibility_matrix.F.xml dosyasının level="F" özelliğine sahip olduğundan emin olun.
  2. Tüm cihazların oluşturulduğundan ve önyüklendiğinden emin olun.
  3. En son çerçeveyle (Nakliye API düzeyine göre) başlatılan cihazların Hedef FCM Sürüm V >= F sahip olduğundan emin olmak için VTS testlerini güncelleyin .
  4. Dosyayı AOSP'ye yayınlayın.

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

Ayrıca ürün ve system_ext FCM'ler, her platform FCM sürümüne ilişkin gereksinimleri de listeleyebilir. Ürün ve system_ext bölümlerinde 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 aygıttaki 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ı geliştiricinin 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 bu durum meydana gelebilir.

Bir cihazın HAL'sini kullanımdan kaldırma

Belirli bir HAL foo@xy cihazı FCM Sürüm F kullanımdan kaldırıldığında, bu, Target FCM Sürüm V = F veya üzeri ile başlatılan herhangi bir cihazın, xy sürümünde veya xy daha eski herhangi bir sürümde foo uygulamasını uygulamaması gerektiği anlamına gelir. Kullanımdan kaldırılmış bir HAL sürümü, cihazların yükseltilmesine yönelik çerçeve tarafından hâlâ desteklenmektedir.

FCM Sürüm F yayınlandığında, belirli HAL Sürümü, Hedef FCM Sürümü V = F için en son FCM'de açıkça belirtilmemişse foo@xy HAL Sürümü kullanımdan kaldırılmış olarak kabul edilir. V = F ile başlatılan cihazlar için aşağıdaki koşullardan biri doğrudur:

  • Çerçeve daha yüksek bir sürüm gerektirir (majör veya minör);
  • Çerçeve artık HAL'a ihtiyaç duymuyor.

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

HAL çerçevesini kullanımdan kaldırma

Belirli bir çerçeve HAL foo@xy , FCM Sürüm F kullanımdan kaldırıldığında, bu, Target FCM Sürüm V = F veya üzeri ile başlatılan herhangi bir cihazın, çerçevenin xy sürümünde veya xy daha eski herhangi bir sürümde foo sağlamasını beklememesi gerektiği anlamına gelir. Kullanımdan kaldırılmış bir HAL sürümü, cihazların yükseltilmesine yönelik çerçeve tarafından hâlâ sağlanmaktadır.

FCM F CM sürümü yayınlandığında, çerçeve bildirimi foo@xy için max-level=" F - 1 " belirtiyorsa, foo@xy HAL Sürümü kullanımdan kaldırılmış olarak kabul edilir. V = F ile başlatılan cihazlar için çerçeve HAL foo@xy sağlamaz. V = F ile başlatılan cihazlardaki cihaz uyumluluk matrisi max-level < V olan çerçeve HAL'lerini listelememelidir.

Örneğin, Android 12'de, schedulerservice@1.0 kullanımdan kaldırılmıştır. max-level özelliği, Android 11'de tanıtılan FCM sürümü olan 5 olarak ayarlanmıştır. Android 12 çerçeve bildirimine bakın.

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, aşağıdaki adımlardan her ikisi ile gerçekleştirilir:

  1. compatibility_matrix.V.xml derleme kurallarından kaldırılması (böylece sistem görüntüsüne yüklenmemesi) ve kaldırılan işlevselliğe uygulanan veya buna bağlı olan tüm kodların silinmesi.

  2. max-level V'den düşük veya V eşit olan çerçeve HAL'lerini çerçeve bildiriminden kaldırmak ve kaldırılan çerçeve HAL'lerini uygulayan tüm kodları silmek.

Belirli bir çerçeve sürümü için SF 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ümlerde bir HAL Sürümünün olası durumları (kronolojik sırayla) açıklanmaktadır.

yayınlanmamış

Cihaz HAL'leri için, bir HAL Sürümü genel ve dondurulmuş uyumluluk matrislerinin hiçbirinde değilse, yayınlanmamış ve muhtemelen geliştirilme aşamasında olduğu kabul edilir. Bu, yalnızca compatibility_matrix.F.xml dosyasındaki HAL Sürümlerini içerir. Örnekler:

  • Android 9'un geliştirilmesi sırasında health@2.0 HAL, yayınlanmamış bir HAL olarak kabul edildi ve yalnızca compatibility_matrix.3.xml dosyasında mevcuttu.
  • teleportation@1.0 HAL, yayınlanmış herhangi bir uyumluluk matrisinde yer almaz ve aynı zamanda yayınlanmamış bir HAL olarak kabul edilir.

Çerçeve HAL'ler için, bir HAL sürümü yalnızca ilgisiz bir geliştirme dalının çerçeve bildiriminde yer alıyorsa yayınlanmamış olarak kabul edilir.

Yayınlandı ve Güncel

Cihaz HAL'leri için, bir HAL Sürümü herhangi bir genel ve dondurulmuş uyumluluk matrisinde yer alıyorsa yayınlanır. Örneğin, FCM Sürüm 3 dondurulup AOSP'de yayınlandıktan sonra, health@2.0 HAL, yayınlanmış ve güncel bir HAL Sürümü olarak kabul edilir.

Bir HAL Sürümü, en yüksek FCM Sürümüne sahip genel ve donmuş bir uyumluluk matrisinde yer alıyorsa, HAL sürümü günceldir (yani kullanımdan kaldırılmamıştır). Örneğin, mevcut HAL Sürümleri ( compatibility_matrix.legacy.xml tanıtılan ve compatibility_matrix.3.xml varlığını sürdüren nfc@1.0 gibi) aynı zamanda yayınlanmış ve güncel HAL Sürümleri olarak kabul edilir.

Çerçeve HAL'leri için, bir HAL sürümü, en son yayımlanan dalın çerçeve bildiriminde max-level özelliği olmadan veya (alışılmadık şekilde) bu dalda yayımlanan FCM sürümüne eşit veya ondan daha yüksek bir max-level , yayınlanmış bir sürüm olarak kabul edilir. ve güncel HAL sürümü. Örneğin, displayservice HAL, Android 12 çerçeve bildiriminde belirtildiği gibi Android 12'de yayınlanmıştır ve günceldir.

Yayınlandı ancak kullanımdan kaldırıldı

Cihaz HAL'leri için HAL Sürümü, yalnızca aşağıdaki koşulların tamamının karşılanması durumunda kullanımdan kaldırılır:

  • Serbest bırakıldı.
  • En yüksek FCM Sürümüne sahip olan, genel ve dondurulmuş uyumluluk matrisinde yer almaz.
  • Çerçevenin hala desteklediği, genel ve donmuş bir uyumluluk matrisindedir.

Örnekler:

Bu nedenle power@1.0 , Android 9'da günceldir ancak kullanımdan kaldırılmamıştır .

Çerçeve HAL'leri için, en son yayımlanan dalın çerçeve bildiriminde bir HAL sürümü, bu daldaki FCM sürümü sürümünden daha düşük bir max-level özniteliğine sahipse, yayınlanmış ancak kullanımdan kaldırılmış bir HAL sürümü olarak kabul edilir. Örneğin, Android 12 çerçeve bildiriminde belirtildiği gibi, schedulerservice HAL yayınlandı ancak Android 12'de kullanımdan kaldırıldı.

Kaldırıldı

Cihaz HAL'leri için HAL Sürümü yalnızca aşağıdakilerin doğru olması durumunda kaldırılır:

  • Daha önce yayınlanmıştı.
  • Çerçevenin desteklediği herhangi bir genel ve donmuş uyumluluk matrisinde yer almaz.

Herkese açık, dondurulmuş ancak çerçeve tarafından desteklenmeyen uyumluluk matrisleri, kaldırılan HAL Sürümleri kümesini tanımlamak için kod tabanında tutulur; böylece kaldırılan HAL'lerin yeni cihazlarda olmadığından emin olmak için VTS testleri yazılabilir.

Çerçeve HAL'ler için HAL sürümü yalnızca aşağıdaki koşulların karşılanması durumunda kaldırılır:

  • Daha önce yayınlanmıştı.
  • En son yayımlanan şubenin herhangi bir çerçevesinde manifestosu bulunmamaktadır.

Eski FCM'ler

Hedef FCM Sürüm mirası, Treble olmayan tüm cihazlar için özel bir değerdir. Eski FCM, compatibility_matrix.legacy.xml , eski cihazlardaki (yani Android 8.0'dan önce başlatılan cihazlar) çerçevenin gereksinimlerini listeler.

Bu dosya F sürümüne sahip bir FCM için mevcutsa, Treble olmayan herhangi bir cihaz, cihaz 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 (aktif 8.0 öncesi 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 birlikte yayımlanan FCM sürümünü bulmak için bkz Level.h .