FCM Yaşam Döngüsü

Bir Android çerçeve sürümü, çerçevenin ne kullanabileceğini ve Hedef FCM sürüm gereksinimlerini tanımlayan, yükseltilebilir her bir 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ını etkinleştirmek için, satıcı arabirimlerini genişleten iş ortaklarının aynı yöntemleri kullanarak HIDL HAL'lerini 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 çok FCM içerir.
Platform FCM Sürümleri (S F ) Bir çerçeve sürümündeki tüm FCM sürümlerinin 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) Hedeflenen FCM sürümü (S F'den ), bir satıcı uygulamasının karşıladığı cihaz bildiriminde açıkça belirtilir. Cihaz Bildiriminde daha yeni HAL sürümleri bildirebilmesine rağmen, yayınlanmış bir FCM'ye karşı bir satıcı uygulaması oluşturulmalıdır.
HAL Sürümü Bir HAL Sürümü foo@xy biçimine sahiptir; burada foo , HAL adıdır ve xy , belirli sürümdür; örneğin nfc@1.0 , keymaster@3.0 (kök öneki, örneğin android.hardware , bu belgede atlanmıştır.)
Aygıt Bildirimi Satıcı ve ODM görüntüleri dahil olmak üzere satıcı arabiriminin aygıt tarafının hangi HAL sürümlerini sağladığını belirten XML dosyaları. Bir aygıt bildiriminin içeriği, aygıtın Hedef FCM sürümü tarafından sınırlandırılır, ancak V'ye karşılık gelen FCM'ye göre kesinlikle daha yeni olan HAL'leri listeleyebilir.
Cihaz HAL'leri Aygıt bildiriminde listelenen (sağlanan) ve çerçeve uyumluluk matrisinde (FCM) listelenen (gerekli veya isteğe bağlı) HAL'ler.
Cihaz Uyumluluk Matrisi (DCM) Çerçeve uygulamalarına uygun satıcı gereksinimlerini belirten bir XML dosyası. Her cihaz bir DCM içerir.
Çerçeve Manifestosu Sistem, system_ext ve ürün görüntüleri dahil olmak üzere 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, aygıtın Hedef FCM sürümüne göre dinamik olarak devre dışı bırakılır.
Çerçeve HAL'leri Çerçeve bildiriminde sağlanan ve cihaz uyumluluk matrisinde (DCM) gerekli veya isteğe bağlı olarak listelenen HAL'ler.

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.current.xml oluşturulur ( 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. En son compatibility_matrix.<F-1>.xml compatibility_matrix.current.xml .
  2. Dosyadaki level niteliğ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.) tanıtılırken, aşağıdaki optional ayarlarla HAL'ı compatibility_matrix.current.xml dosyasına ekleyin:

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

    VEYA
  • V = F ile gelen cihazlar bu HAL olmadan başlatılabilirse, optional="true" .

Örneğin, Android 8.1, isteğe bağlı bir HAL olarak cas@1.0 tanıttı. Bu HAL'ı uygulamak için Android 8.1 ile başlatılan aygıtlar gerekli değildir, bu nedenle aşağıdaki girdi compatibility_matrix.current.xml eklenmiştir (Android 8.1 yayınlandıktan sonra compatibility_matrix.2.xml olarak yeniden adlandırılmıştır):

<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 HAL, mevcut FCM Sürüm F xz x.(z+1) 'e bir alt sürüm yükseltmesine sahipse, bu sürüm:

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

Örneğin, Android 8.1, 1.0 HAL'ın küçük bir sürüm yükseltmesi olarak broadcastradio@1.1 radyosu@1.1'i tanıttı. 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 içinde:

<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.2.xml compatibility_matrix.current.xml yeniden adlandırıldı) ve aşağıdaki gibi 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>

Bir HAL'i Yükseltme (majör)

Geliştirme sırasında, bir HAL, mevcut 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.current.xml dosyasına eklenir:

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

Örneğin, Android 9, 1.0 health@2.0 ana sürüm yükseltmesi olarak Health@2.0'ı 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'ı 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 girdi, compatibility_matrix.3.xml compatibility_matrix.current.xml yeniden adlandırılır) ve aşağıdaki gibi 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 içinde olduğundan, Android 9 ile başlatılan cihazlar 2.0 HAL ile birlikte gönderilmelidir.
  • 1.0 HAL, compatibility_matrix.3.xml içinde olmadığı için, Android 9 ile başlatılan cihazlar 1.0 HAL'ı sağlamamalıdır (bu HAL kullanımdan kaldırıldığı için).
  • 1.0 HAL, eski/1/2.xml'de (Android 9'un çalışabileceği daha eski FCM Sürümleri) isteğe bağlı bir HAL olarak mevcut olduğundan, Android 9 çerçevesi 1.0 HAL ile çalışmaya devam edebilir (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. compatibility_matrix.F.xml compatibility_matrix.current.xml olarak yeniden adlandırın.
  2. Dosyanın level="F" özniteliğine sahip olduğundan emin olun.
  3. Dosya adı değişikliğini yansıtmak için ilgili derleme kurallarını düzenleyin.
  4. Tüm cihazların kurulduğundan ve önyüklendiğinden emin olun.
  5. 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 .
  6. Dosyayı AOSP'ye yayınlayın.

Bu dosya yeniden adlandırılıp yayınlandıktan sonra değiştirilemez. Örneğin, Android 9 geliştirmesi sırasında, hardware/interfaces/compatibility_matrices/ için aşağıdaki dosyalar oluşturulmuştur :

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

Android 9 piyasaya sürüldüğünde, compatibility_matrix.3.xml , compatibility_matrix.current.xml olarak yeniden adlandırılır ve hardware/interfaces/compatibility_matrices/ için aşağıdaki dosyalar oluşturulur:

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

Ayrıca, ürün ve system_ext FCM'leri ayrıca her bir platform FCM sürümü için gereksinimleri 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ı 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 aygıttaki gereksinimleri yansıtır.

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

Bir HAL Sürümünü kullanımdan kaldırmak bir geliştirici kararıdır (yani AOSP HAL'leri 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'sini kullanımdan kaldırma

Belirli bir aygıt HAL foo@xy FCM Sürüm F kullanımdan kaldırıldığında, bu, Hedef FCM Sürüm V = F veya daha yenisiyle başlatılan herhangi bir aygıtın foo sürüm xy veya xy daha eski herhangi bir sürümde uygulamaması gerektiği anlamına gelir. Kullanımdan kaldırılmış bir HAL sürümü, aygıtları yükseltmek için çerçeve tarafından hala 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, bir HAL Sürümü foo@xy kullanımdan kaldırılmış olarak kabul edilir. V = F 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 (majör veya minör);
  • Çerçeve artık HAL gerektirmiyor.

Örneğin, Android 9'da health@2.0 , 1.0 HAL'ın ana sürüm yükseltmesi olarak sunulur. health@1.0 , compatibility_matrix.2.xml compatibility_matrix.3.xml compatibility_matrix.legacy.xml compatibility_matrix.1.xml Bu nedenle, health@1.0 kullanımdan kaldırılmış olarak 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, Hedef FCM Sürüm V = F veya daha yenisiyle başlatılan herhangi bir aygıtı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. Cihazları yükseltmek için çerçeve tarafından hala kullanımdan kaldırılmış bir HAL sürümü sağlanmaktadır.

FCM sürüm F yayınlandığında, çerçeve bildirimi foo@ foo@xy için max-level=" F - 1 " belirtiyorsa, HAL Sürümü foo@xy kullanımdan kaldırıldığı kabul edilir. V = F ile başlatılan aygıtlar 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 ayarlanmıştır. Bkz. Android 12 çerçeve bildirimi .

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 ayarlı S F'sinden kaldırılır. Bu, aşağıdaki adımların her ikisi ile yapılır:

  • compatibility_matrix.V.xml derleme kurallarından kaldırılması (böylece sistem görüntüsüne yüklenmemesi için) ve uygulanan veya kaldırılan işlevselliğe bağlı olan tüm kodların silinmesi.
  • Çerçeve bildiriminden max-level V eşit veya daha düşük olan çerçeve HAL'lerini 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ü olan cihazlar, bu sürüme yükseltilemez.

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ış

Aygıt HAL'leri için, bir HAL Sürümü genel ve donmuş uyumluluk matrislerinden herhangi birinde değilse, yayınlanmamış ve muhtemelen geliştirme aşamasında olarak kabul edilir. Bu, yalnızca compatibility_matrix.current.xml içinde olan HAL Sürümlerini içerir. Örnekler:

  • Android 9'un geliştirilmesi sırasında ( compatibility_matrix.3.xml , compatibiility_matrix.current.xml olarak yeniden adlandırılmadan önce), health@2.0 HAL, yayınlanmamış bir HAL olarak kabul edildi.
  • teleportation@1.0 HAL, yayımlanmış herhangi bir uyumluluk matrisinde yer almaz ve aynı zamanda yayımlanmamış bir HAL olarak kabul edilir.

Çerçeve HAL'leri için, bir HAL sürümü yalnızca ilişkisiz bir geliştirme dalının çerçeve bildirimindeyse, yayınlanmamış olarak kabul edilir.

Yayınlanmış ve Güncel

Aygıt HAL'leri için, bir HAL Sürümü herhangi bir genel ve donmuş uyumluluk matrisindeyse, serbest bırakılır. Örneğin, FCM Sürüm 3 dondurulduktan sonra ( compatibiility_matrix.current.xml , compatibility_matrix.3.xml olarak yeniden adlandırıldığında) ve AOSP'de 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 ( compatibility_matrix.current.xml hariç) genel ve donmuş bir uyumluluk matrisindeyse, HAL sürümü günceldir (yani kullanımdan kaldırılmamıştır). Örneğin, compatibility_matrix.3.xml içinde var olmaya devam eden mevcut HAL Sürümleri ( compatibility_matrix.legacy.xml içinde tanıtılan nfc@1.0 gibi), aynı zamanda yayımlanmış ve mevcut HAL Sürümleri olarak kabul edilir.

Çerçeve HAL'leri için, bir HAL sürümü, max-level özniteliği olmadan veya (olağandışı olarak) bu dalda yayınlanan FCM sürümüne eşit veya ondan daha yüksek bir max-level düzey olmadan en son yayınlanan dalın çerçeve bildirimindeyse, yayımlanmış olarak kabul edilir. ve mevcut HAL sürümü. Örneğin, HAL displayservice hizmeti, Android 12'de yayınlanmıştır ve şu şekildedir: Android 12framework manifest .

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

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

  • Serbest bırakılır.
  • En yüksek FCM Sürümüne sahip olan genel ve donmuş uyumluluk matrisinde değildir.
  • Ç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ı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ğe sahip en son yayınlanan dalın çerçeve bildirimindeyse, yayınlanmış ancak kullanımdan kaldırılmış bir HAL sürümü olarak kabul edilir. Örneğin, HAL schedulerservice hizmeti yayınlandı ancak Android 12'de kullanımdan kaldırıldı. Android 12framework manifest .

Kaldırıldı

Aygıt HAL'leri için bir HAL Sürümü, yalnızca ve yalnızca aşağıdakiler doğruysa kaldırılır:

  • Daha önce serbest bırakıldı.
  • Çerçevenin desteklediği herhangi bir genel ve donmuş uyumluluk matrisinde değildir.

Genel, 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'leri için, bir HAL sürümü yalnızca ve ancak aşağıdakiler karşılanırsa kaldırılır:

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

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 , çerçevenin eski cihazlarda (yani, Android 8.0'dan önce başlatılan cihazlarda) 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 (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ımlanan 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 .