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, yükseltilebilir her 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.

Yalnızca çerçeve OTA'larını kendi ekosistemlerinde etkinleştirmek için satıcı arabirimlerini genişleten iş ortakları, aynı yöntemleri kullanarak HIDL HAL'leri de kullanımdan kaldırmalı ve kaldırmalıdır.

terminoloji

Çerçeve Uyumluluk Matrisi (FCM) Uygun satıcı uygulamalarına ilişkin çerçeve gereksinimlerini belirten bir XML dosyası. Uyumluluk matrisi sürümlenir 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 Versiyonu (F) Bir çerçeve sürümündeki tüm FCM'ler arasındaki 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 ). Cihaz Bildiriminde daha yeni HAL sürümleri bildirebilse de, yayınlanan bir FCM'ye göre 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 , belirli sürümdür; ör. nfc@1.0 , keymaster@3.0 (kök öneki, ör. android.hardware , bu belgede kullanılmamıştır.)
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 FCM'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) Uygun çerçeve uygulamalarına ilişkin satıcı gereksinimlerini belirten bir XML dosyası. Her cihaz bir DCM içerir.
Çerçeve Bildirimi Sistem, system_ext ve ürün görüntüleri dahil satıcı arabiriminin çerçeve tarafının hangi HAL sürümlerini sağladığını belirten bir XML dosyası. Çerçeve bildirimindeki HAL'ler, cihazın Hedef FCM sürümüne göre dinamik olarak devre dışı bırakılır.
Çerçeve HAL'leri Çerçeve manifestosunda sağlandığı şekilde listelenen HAL'ler ve cihaz uyumluluk matrisinde (DCM) gerekli veya isteğe bağlı olarak listelenir.

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.F.xml oluşturulur 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. En son compatibility_matrix.<F-1>.xml compatibility_matrix.F.xml konumuna kopyalayın.
  2. Dosyadaki level özniteliğini F olarak güncelleyin.
  3. Bu uyumluluk matrisini cihaza yüklemek için ilgili yapı kurallarını ekleyin.

Yeni bir HAL ile 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:

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

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

Örneğin, Android 8.1 cas@1.0 isteğe bağlı bir HAL olarak tanıttı. Android 8.1 ile başlayan cihazların bu HAL'yi uygulaması gerekli değildir, bu nedenle şu giriş (bu sürümün geliştirilmesi sırasında geçici olarak compatibility_matrix.current.xml olarak adlandırılırdı) compatibility_matrix.F.xml dosyasına eklenmiştir:

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

HAL (minör) yükseltme

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

  • V = F ile başlayan cihazlarda gerekli olan compatibility_matrix.F.xml , x.(z+1) ve optional="false" belirtmelidir.
  • V = F ile başlatılan cihazlarda gerekli değildir, compatibility_matrix.F.xml , compatibility_matrix.<F-1>.xml xy-z ve isteğe bağlılığı kopyalamalı ve sürümü xw-(z+1) olarak değiştirmelidir (burada w >= y )

Örneğin, Android 8.1, 1.0 HAL'ın alt 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 , Android 8.1 ile başlayan 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 (majör) yükseltme

Geliştirme sırasında, bir HAL geçerli FCM Sürüm F bir ana sürüm yükseltmesine sahip olduğunda, yeni ana sürüm x.0 aşağıdaki optional ayarlarla compatibility_matrix.F.xml dosyasına eklenir:

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

Örneğin, Android 9 health@2.0 1.0 HAL'ın ana sürüm yükseltmesi olarak sunar ve 1.0 HAL'ı kullanımdan kaldırır. Daha 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 içinde:

<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 kopyalanır ve aşağıdaki şekilde değiştirilir:

<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, optional="false" ile compatibility_matrix.3.xml olduğundan, Android 9 ile başlatılan cihazların 2.0 HAL ile gönderilmesi gerekir.
  • 1.0 HAL compatibility_matrix.3.xml içinde olmadığından, Android 9 ile başlatılan cihazlar 1.0 HAL'yi sağlamamalıdır (bu HAL kullanımdan kaldırılmıştır).
  • 1.0 HAL, eski/1/2.xml'de (Android 9'un birlikte çalışabileceği eski FCM Sürümleri) isteğe bağlı bir HAL olarak bulunduğundan, Android 9 çerçevesi, 1.0 HAL (kaldırılmış bir HAL Sürümü olarak kabul edilmez) ile çalışmaya devam edebilir ).

Yeni FCM Sürümleri

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

  1. compatibility_matrix.F.xml dosyasının level="F" özniteliğ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 (Gönderim 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'de yayınlayın.

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

Ayrıca ürün ve system_ext FCM'leri, her bir platform FCM sürümü için gereklilikleri de listeleyebilir. FCM sürümlerinin ürün ve system_ext bölümleri üzerinde 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ı hizada 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ü kullanımdan kaldırılıyor

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 olabilir.

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

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

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

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

Örneğin, Android 9'da health@2.0 , 1.0 HAL'ın ana sürüm yükseltmesi olarak sunulmuştur. 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 mevcuttur. Bu nedenle, health@1.0 kullanımdan kaldırılmış olarak kabul edilir.

HAL çerçevesini kullanımdan kaldırma

Belirli bir HAL foo@xy çerçevesi FCM Sürüm F kullanımdan kaldırıldığında, bu, Hedef FCM Sürümü V = F veya üstü 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ü, aygıtların yükseltilmesi için çerçeve tarafından sağlanmaya devam etmektedir.

FCM sürüm F yayınlandığında, çerçeve bildirimi foo@xy için max-level=" F - 1 " belirtiyorsa, bir HAL Sürümü foo@xy kullanımdan kaldırıldığı 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 manifestosuna 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 ayarlanan S F'sinden kaldırılır. Bu, aşağıdaki adımların her ikisi tarafından yapılır:

  • compatibility_matrix.V.xml dosyasını derleme kurallarından kaldırma (böylece sistem görüntüsüne yüklenmemesi için) ve kaldırılan işlevselliğe uygulanan veya ona bağlı olan tüm kodları silme.
  • V'den max-level veya V eşit olan çerçeve HAL'lerini çerçeve bildiriminden kaldırma ve kaldırılan çerçeve HAL'lerini uygulayan tüm kodları silme.

Belirli bir çerçeve sürümü için SF dışında bir hedef FCM Sürümüne sahip cihazlar, bu sürüme yükseltme yapamaz.

HAL Sürüm durumu

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

yayınlanmamış

Cihaz HAL'leri için, bir HAL Sürümü genel ve donmuş uyumluluk matrislerinin hiçbirinde yer almıyorsa, yayınlanmamış ve muhtemelen geliştirme aşamasında olarak kabul edilir. Bu, yalnızca compatibility_matrix.F.xml dosyasında bulunan 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 compatibiility_matrix.3.xml mevcuttu.
  • teleportation@1.0 HAL, yayınlanmış herhangi bir uyumluluk matrisinde yer almaz ve ayrıca yayınlanmamış bir HAL olarak kabul edilir.

Çerçeve HAL'leri 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ınlanmış ve Güncel

Cihaz HAL'leri için, bir HAL Sürümü herhangi bir genel ve donmuş uyumluluk matrisindeyse, yayınlanır. Örneğin, FCM Sürüm 3 dondurulup AOSP'ye yayınlandıktan sonra, health@2.0 HAL, yayınlanmış ve geçerli 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 matrisindeyse, HAL sürümü günceldir (yani kullanımdan kaldırılmamıştır). Örneğin, compatibility_matrix.legacy.xml tanıtılan mevcut HAL Sürümleri (örneğin, uyumluluk_matrix.legacy.xml'de tanıtılan nfc@1.0 gibi) compatibility_matrix.3.xml var olmaya devam eden HAL Sürümleri de yayınlanmış ve geçerli HAL Sürümleri olarak kabul edilir.

Çerçeve HAL'leri için, bir HAL sürümü max-level max-level özniteliği olmadan en son yayınlanan şubenin çerçeve bildiriminde yer alıyorsa veya (alışılmadık şekilde) bu dalda yayınlanan FCM versiyonuna eşit veya daha yüksek bir maks. ve geçerli HAL sürümü. Örneğin, displayservice HAL, tarafından belirtildiği şekilde Android 12'de yayınlanmıştır ve günceldir. Android 12framework manifest .

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

Cihaz HAL'leri için bir HAL Sürümü, yalnızca ve yalnızca aşağıdakilerin tümü karşılanırsa kullanımdan kaldırılır:

  • Serbest bırakıldı.
  • En yüksek FCM Versiyonuna sahip olan, genel ve donmuş uyumluluk matrisinde değildir.
  • Çerçevenin hala desteklediği, halka açık ve donmuş bir uyumluluk matrisindedir.

Örnekler:

Bu nedenle, power@1.0 Android 9'da günceldir, ancak kullanımdan kaldırılmış DEĞİLDİR .

Çerçeve HAL'leri için, bir HAL sürümü, bu dalda yayınlanan FCM sürümünden daha düşük bir max-level özniteliğine sahip en son yayınlanan dalın çerçeve bildiriminde yer alıyorsa, yayınlanmış ancak kullanımdan kaldırılmış bir HAL sürümü olarak kabul edilir. Örneğin, schedulerservice HAL, tarafından belirtildiği gibi Android 12'de yayınlanmıştır ancak kullanımdan kaldırılmıştır. Android 12framework manifest .

Kaldırıldı

Cihaz HAL'leri için, bir HAL Sürümü ancak ve ancak aşağıdakiler doğruysa kaldırılır:

  • Daha önce yayınlandı.
  • Çerçevenin desteklediği herhangi bir genel ve donmuş uyumluluk matrisinde değildir.

Halka açık, donmuş ancak çerçeve tarafından desteklenmeyen uyumluluk matrisleri, kaldırılan HAL Sürümleri setini 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'leri için, bir HAL sürümü ancak ve ancak aşağıdakiler karşılanırsa kaldırılır:

  • Daha önce yayınlandı.
  • En son yayınlanan dalın herhangi bir çerçeve bildiriminde değildir.

Eski FCM'ler

Hedef FCM Sürüm mirası, tüm Tiz olmayan 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, cihaz bildiriminin bu dosyayla uyumlu olması koşuluyla, Tiz olmayan herhangi bir cihaz F yükseltilebilir. Kaldırılması, diğer Hedef FCM Sürümleri için FCM'lerle aynı prosedürü izler (etkin 8.0 öncesi cihazların sayısı belirli bir eşiğin altına düştüğünde 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 .