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 artık kullanılmayacağı ve kaldırır sonra FCM durumunu yansıtmak için dosyaları değiştirir, HAL'lerin HIDL HAL Version .

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 versiyonlar (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) (S F) hedeflenen FCM versiyonu, cihaz manifest'te açıkça ilan eden bir satıcı uygulama tatmin söyledi. 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 şekli biçimi vardır foo@xy , foo HAL adı ve xy özel versiyonu; örneğin nfc@1.0 , keymaster@3.0 (kök önek, örneğin android.hardware , bu belge boyunca kullanılmaz.)
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şme sırasında yeni compatibility_matrix.current.xml (oluşturulur F ) ve mevcut compatibility_matrix.f.xml (burada f < F ) artık değiştirilir.

Yeni bir FCM Sürüm gelişen başlatmak için F :

  1. Son Kopya compatibility_matrix.<F-1>.xml için compatibility_matrix.current.xml .
  2. Güncelleme level için dosyada niteliği F .
  3. Bu uyumluluk matrisini cihaza 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:

  • optional="false" cihazları ile gemi ki eğer V = F Bu HAL ile başlatmak gerekir,

    VEYA
  • optional="true" cihazları ile gemi ki eğer V = F Bu HAL olmadan başlatabilirsiniz.

Örneğin, Android 8.1 kişiye cas@1.0 isteğe bağlı bir HAL gibi. 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)

HAL den küçük bir versiyonu yükseltme sahip olduğunda gelişimi sırasında, xz için x.(z+1) mevcut FCM şekli de F , bu versiyon ise:

  • İ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 tanıtıldı broadcastradio@1.1 küçük versiyonu olarak 1.0 HAL yükseltin. Eski sürüm broadcastradio@1.0 , yeni sürüm, ise Android 8.0 ile piyasaya cihazlar için isteğe bağlıdır broadcastradio@1.1 , Android 8.1 ile piyasaya cihazlar için isteğe bağlıdır. In 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>

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

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" ama aynı eski büyük halleriyle beraber <hal> ile gemi olduğu cihazlarda eğer etiket, V = F Bu HAL ile başlatmak gerekir, ancak eski ana sürümü ile başlatabilirsiniz.
  • optional="true" cihazları ile gemi ki eğer V = F HAL başlatmak gerekmez.

Örneğin, Android 9 tanıtır health@2.0 önemli-sürüm olarak 1.0 HAL yükseltme ve 1.0 HAL artık kullanılmayacağı. Eski sürüm health@1.0 , Android 8.0 ve Android 8.1 ile piyasaya 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. In 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, 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. Rename compatibility_matrix.current.xml için compatibility_matrix.F.xml .
  2. Dosya özniteliği vardır emin olun level="F" .
  3. İlgili Düzenleme inşa kurallarını dosya adı değişikliği yansıtmak için.
  4. Tüm cihazların kurulduğundan ve önyüklendiğinden emin olun.
  5. Güncelleme VTS testleri (Kargo API seviyesine göre) en son çerçeve başlatılması cihazlarını sağlamak için Hedef FCM Versiyon sahip V >= F .
  6. Dosyayı AOSP'ye 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 testler Android 9 ile başlatılması cihazları Hedef FCM Sürüm> = 3 olduğundan emin olun.

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ün kullanımdan kaldırılması 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ın HAL'sini kullanımdan kaldırma

Belirli bir aygıt 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ü, aygıtları yükseltmek için çerçeve tarafından hala desteklenmektedir.

FCM Sürüm zaman F salınır, bir HAL Sürüm foo@xy özgü HAL Versiyon açıkça Hedef FCM Versiyon için en son FCM belirtilen değilse onaylanmadı V = F . İle başlatılması cihazlar için V = F , aşağıdaki koşullardan biri doğruysa:

  • Ç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 bir ana sürüm yükseltme 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 kaldırıldı kabul edilir.

HAL çerçevesini kullanımdan kaldırma

Belirli bir çerçeve 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 geç yapılması veya çerçeve vermenizi bekliyoruz olmamalıdır foo sürümü de xy veya daha eski herhangi bir sürümü de xy . 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ü ne zaman F yayınlandı, bir HAL Sürüm foo@xy onaylanmadı ise çerçeve tezahür belirtir max-level=" F - 1 " için foo@xy . İle başlatılması cihazlar için V = F , çerçeve HAL sağlamaz foo@xy . İle başlatılması için cihaz uyumluluk matrisi V = F gerekir değil ile liste çerçeve HAL'lere max-level < V .

Örneğin, Android 12'de, schedulerservice@1.0 kullanımdan kaldırılmıştır. Onun max-level özniteliği, 5 , Android 11. Bkz tanıtılan FCM sürümü Android 12 çerçeve manifest'te .

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

Belirli bir hedef FCM şekli aktif cihazlar zaman V , belirli bir eşik değerinin altına damla, hedef FCM şekli grubu aşağıdaki çerçeve salım S F kaldırılır. Bu, aşağıdaki adımların her ikisi ile yapılır:

  • Çıkarma compatibility_matrix.V.xml (sistem görüntü üzerinde yüklü değil böylece) inşa kurallarından ve uygulanan veya kaldırılan işlevsellik bağlı olduğunu herhangi bir kod silme.
  • İle çerçeve HAL'lere çıkarılması max-level daha düşük ya da eşit V çerçeve manifest'ten ve herhangi bir kod bu uygular kaldırılan çerçeve HAL'lere silinmesi.

Belirli bir çerçeve serbest bırakılması için S F hedef FCM Sürüm dışarıdan olan cihazlar bu sürüme geçiş 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ış

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 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 herhangi yayımlanan uyumluluk matrislerde değildir ve aynı zamanda bir yayınlanmamış HAL kabul edilir.

Çerçeve HAL'leri için, bir HAL sürümü yalnızca ilgisiz 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. (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.

HAL Sürüm en yüksek FCM Sürümü (hariç olan bir kamu ve dondurulmuş uyumluluk matrisi içinde ise compatibility_matrix.current.xml ), HAL versiyonu akımdır (yani kaldırılmış değil). Ö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.

HAL versiyonu olmadan son yayımlanan şube çerçeve manifest'te ise çerçeve HAL'lere için max-level nitelik veya (alışılmadık) bir max-level için eşit veya bu dalda yayımlanmış FCM sürümüne göre daha yüksek, bu bir serbest sayılır ve mevcut HAL sürümü. Örneğin, displayservice belirtildiği gibi HAL serbest bırakılır ve Android 12 mevcut olan Android 12framework manifest .

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

Aygıt HAL'leri için, 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:

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

HAL sürümü en son yayımlanan şubesi çerçeve manifest'te ise çerçeve HAL'lere için, max-level özelliğinde bu dalda yayımlanmış FCM sürümünden daha düşük, bu bir serbest ama kaldırılmış HAL versiyonu olarak kabul edilir. Örneğin, schedulerservice tarafından belirtildiği gibi, HAL serbest bırakılır ancak Android 12 kullanımdan kaldırılmış 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 , listeler eski cihazlarda çerçevenin gereksinimleri (yani cihazlar öncesinde Android 8.0 başlatıldı).

Bu dosya sürümü ile FCM varsa F , herhangi olmayan Tiz cihaz yükseltilebilir F onun aygıt bildirim bu dosya ile uyumlu olması koşuluyla. 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

Salınan FCM versiyonlarının listesi altında bulunabilir hardware/interfaces/compatibility_matrices .

Belirli bir Android sürümü ile piyasaya FCM sürümünü bulmak için bkz Level.h .