FCM yaşam döngüsü

Bir Android çerçeve sürümünde, her yükseltilebilir Hedef FCM Sürümü için bir tane olmak üzere, çerçevenin neleri kullanabileceğini ve Hedef FCM sürümü gereksinimlerini tanımlayan birden fazla Çerçeve Uyumluluk Matrisi (FCM) bulunur. Android, FCM yaşam döngüsünün bir parçası olarak HIDL HAL'leri kullanımdan kaldırıp 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 tedarikçi arayüzlerinin kapsamını 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)
Tedarikçi firma uygulamalarına uygunlukla ilgili çerçeve gereksinimlerini belirten XML dosyası. Uyumluluk matrisi, sürümlüdür ve her çerçeve sürümü için yeni bir sürüm dondurulur. Her çerçeve sürümünde birden fazla FCM bulunur.
Platform FCM Sürümleri (SF)
Bir çerçeve sürümündeki tüm FCM sürümleri grubu. Çerçeve, bu FCM'lerden birini karşılayan herhangi bir tedarikçi 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)
Tedarikçi firma uygulamasının uygun olduğu, cihaz manifestinde açıkça belirtilen hedeflenen FCM sürümü (SF'den). Cihaz Manifest'inde daha yeni HAL sürümleri beyan edilse bile, yayınlanmış bir FCM'ye karşı tedarikçi firma uygulaması oluşturulmalıdır.
HAL Sürümü
HAL Sürümü, foo@x.y biçimindedir.foo HAL adı, x.y ise özel sürümdür. Ör.nfc@1.0, keymaster@3.0 (kök önek, ör. android.hardware) bu dokümanda atlanmıştır.
Cihaz Manifesti
Tedarikçi firma ve ODM görüntüleri dahil olmak üzere tedarikçi firma arayüzünün cihaz tarafındaki HAL sürümlerini belirten XML dosyaları. Bir cihaz manifestinin 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 tamamen daha yeni olan HAL'leri listeleyebilir.
Cihaz HAL'leri
Cihaz manifest dosyasında listelenen (sağlanan) ve çerçeve uyumluluk matrisinde (FCM) listelenen (zorunlu veya isteğe bağlı) HAL'ler.
Cihaz Uyumluluk Matrisi (DCM)
Uygun çerçeve uygulamaları ile ilgili tedarikçi firma gereksinimlerini belirten XML dosyası. Her cihazda bir DCM bulunur.
Çerçeve Çalışması Manifesti
Sistem, sistem_uzantısı ve ürün görüntüleri dahil olmak üzere tedarikçi arayüzünün çerçeve tarafındaki HAL sürümlerini belirten bir XML dosyası. Çerçeve manifestindeki 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 manifestinde sağlandığı şekilde ve cihaz uyumluluk matrisinde (DCM) zorunlu veya isteğe bağlı olarak listelenen HAL'ler.

Codebase'de FCM Yaşam Döngüsü

Bu belgede FCM yaşam döngüsü özet olarak açıklanmaktadır. Şu anda desteklenen manifestleri görmek için hardware/interfaces/compatibility_matrix.<FCM>.xml bölümüne bakın. Burada FCM'nin system/libvintf/include/vintf/Level.h içinde bulunabilir.

İlgili Android sürümünü gönderen bir cihazın FCM değerinin, eşdeğer düzeyde veya daha yüksek bir FCM değerine sahip olması beklenir. Örneğin, Android 11 yüklü bir cihaz sevkiyatı genellikle FCM düzeyi 5'e sahip olur, ancak uyumluluk matrislerinde belirtilen çeşitli ek gereksinimleri içeren FCM düzeyi 6 veya üstünü uygular. 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
202404 Android 15/V

Android, bir FCM düzeyini kullanımdan kaldırdığında mevcut cihazlarda desteklenmeye devam eder.

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

Android, her çerçeve sürümü (ör. Android 8, 8.1 vb.) için 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 (f < F) artık değiştirilmez.

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

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

Yeni bir HAL ile tanışın

Geliştirme sırasında, mevcut FCM sürümünde (F) Android'e yeni bir HAL (kablosuz, NFC vb.) sunarken aşağıdaki optional ayarlarıyla HAL'yi compatibility_matrix.F.xml uygulamasına ekleyin:

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

Örneğin, Android 8.1'de isteğe bağlı bir HAL olarak cas@1.0 kullanıma sunulmuştur. Android 8.1 ile başlatılan cihazların bu HAL'yi uygulaması gerekmez. Bu nedenle, compatibility_matrix.F.xml bölümüne aşağıdaki giriş eklendi (sürüm geliştirilirken geçici olarak compatibility_matrix.current.xml olarak adlandırılıyordu):

<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 yükseltme (küçük)

Geliştirme sırasında bir HAL, mevcut FCM Sürümü F ile x.z sürümünden x.(z+1) sürümüne küçük sürüm yükseltmesi yaptığında, söz konusu sürüm aşağıdaki şartlara uyuyorsa:

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

Örneğin, Android 8.1, 1.0 HAL'nin küçük sürüm yükseltmesi olarak broadcastradio@1.1'yi kullanıma sunmuştur. Eski sürüm olan broadcastradio@1.0, Android 8.0 ile başlatılan cihazlar için isteğe bağlı, yeni sürüm broadcastradio@1.1 ise Android 8.1 ile başlatılan cihazlar için isteğe bağlıdır. compatibility_matrix.1.xml'te:

<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 alanına kopyalandı ve şu ş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 yükseltme (büyük)

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

  • V = F ile gönderilen cihazların x.0 ile başlatılması gerekiyorsa yalnızca x.0 sürümüne sahip 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 cihazların HAL'yi başlatması gerekmiyorsa optional="true".

Örneğin, Android 9, health@2.0'yi 1.0 HAL'nin ana sürüm yükseltmesi olarak kullanıma sunmuş ve 1.0 HAL'yi kullanımdan kaldırmıştır. Eski sürüm olan health@1.0, Android 8.0 ve Android 8.1 ile başlatılan cihazlarda isteğe bağlıdır. Android 9 ile kullanıma sunulan cihazlarda desteği sonlandırılan 1.0 HAL sürümü bulunmamalı, bunun yerine yeni 2.0 sürümü sağlanmalıdır. I 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 hedefine kopyalandı ve şu ş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 bölgesinde optional="false" olduğundan, Android 9 ile başlatılan cihazların 2.0 HAL ile gönderilmesi gerekir.
  • 1.0 HAL, compatibility_matrix.3.xml dahilinde olmadığı için, Android 9 ile başlatılan cihazlarda 1.0 HAL'yi sağlamamalıdır (bu HAL'nin desteği sonlandırıldığı kabul edilir).
  • 1.0 HAL, old/1/2.xml dosyasında (Android 9'un ç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ış HAL sürümü olarak kabul edilmez) ile çalışmaya devam edebilir.

Yeni FCM sürümleri

Sistem bölümünde FCM Sürümü yayınlama süreci, AOSP sürümü kapsamında yalnızca Google tarafından yapılır ve aşağıdaki adımları içerir:

  1. compatibility_matrix.F.xml öğesinde level="F" özelliğinin bulunduğundan emin olun.
  2. Tüm cihazların derlendiğinden ve başlatıldığından emin olun.
  3. En son çerçeveyle (Shipping API seviyesine göre) kullanıma sunulan cihazların hedef FCM sürümüne 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 kullanıma sunulan cihazlarda Hedef FCM Sürümü >= 3 olmasını sağlar.

Buna ek olarak, product ve system_ext FCM'ler her bir platform FCM sürümü için gereksinimleri de listeleyebilir. Ürün ve system_ext bölümlerinde FCM sürümlerinin yayınlanması sırasıyla bu resimlerin sahibi tarafından yapılır. Ürün ve system_ext bölümlerindeki FCM sürüm numaraları, sistem bölümündekilerle uyumlu olmalıdır. Sistem bölümündeki FCM sürümlerine benzer şekilde, ürün ve sistem uzantısı bölümlerindeki FCM sürüm F'deki uyumluluk matrisi, hedef FCM sürümü olan 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ı geliştiriciye ait bir karardır (ör. AOSP HAL'ler için bu kararı Google verir). Bu durum, daha yüksek bir HAL sürümü (küçük veya ana sürüm) yayınlandığında ortaya çıkabilir.

Cihaz HAL'sini kullanımdan kaldırma

Belirli bir cihazın HAL foo@x.y sürümü, FCM Sürümü F'de kullanımdan kaldırıldığında bu, Hedef FCM Sürümü V = F veya sonraki sürümlerle başlatılan herhangi bir cihazın x.y sürümünde veya x.y sürümünden daha eski sürümlerde foo uygulamasını uygulamaması gerektiği anlamına gelir. Kullanımdan kaldırılmış bir HAL sürümü, cihazları yükseltme çerçevesi tarafından hâlâ desteklenmektedir.

FCM Sürümü F yayınlandığında, hedef FCM Sürümü V = F için son FCM'de ilgili HAL Sürümü açıkça belirtilmemişse söz konusu HAL Sürümü foo@x.y kullanımdan kaldırılmıştır. 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 (ana veya alt sürüm) gerektiriyor;
  • Söz konusu çerçeve artık HAL gerektirmez.

Örneğin, Android 9'da health@2.0, 1.0 HAL'nin ana sürüm yükseltmesi olarak kullanıma sunulmuştur. health@1.0, compatibility_matrix.3.xml ürününden kaldırıldı ancak compatibility_matrix.legacy.xml, compatibility_matrix.1.xml ve compatibility_matrix.2.xml dosyalarında yer alıyor. Bu nedenle, health@1.0 desteği sonlandırıldı.

Çerçeve HAL'sini kullanımdan kaldırma

Belirli bir çerçeve HAL foo@x.y, FCM F Sürümü'nde kullanımdan kaldırıldığında, Hedef FCM Sürümü V = F veya sonraki sürümlerle başlatılan herhangi bir cihaz, x.y sürümünde veya x.y sürümünden daha eski bir sürümde foo sağlayacağını düşünmemelidir. Cihazları yeni sürüme geçirme çerçevesi tarafından kullanımdan kaldırılmış bir HAL sürümü sağlanmaya devam etmektedir.

FCM sürümü F yayınlandığında, çerçeve manifestinde foo@x.y için max-level="F - 1" değeri belirtilmişse HAL Sürümü foo@x.y desteği sonlandırıldı. Çerçeve, V = F ile başlatılan cihazlarda HAL foo@x.y sağlamaz. V = F ile başlatılan cihazlardaki cihaz uyumluluk matrisi, max-level < V içeren ç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 kullanıma sunulan FCM sürümü olan 5 olarak ayarlandı. Android 12 çerçevesi manifestini inceleyin.

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

Belirli bir Hedef FCM Sürümü'ndeki (V) etkin 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 grubu F'sinden kaldırılır. Bu işlem, aşağıdaki adımların her ikisi de uygulanarak gerçekleştirilir:

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

  2. max-level değerinden düşük veya V değerine eşit olan çerçeve HAL'lerini çerçeve manifestinden kaldırmak ve kaldırılan çerçeve HAL'lerini uygulayan kodları silmek.

Belirli bir çerçeve sürümü için SF dışında hedef FCM Sürümü bulunan 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çıklanmıştır.

Yayınlanmamış

Cihaz HAL'leri söz konusu olduğunda, herkese açık ve dondurulmuş uyumluluk matrislerinin hiçbirinde yer almayan HAL Sürümü, yayınlanmamış ve muhtemelen geliştirme aşamasında olarak kabul edilir. Yalnızca compatibility_matrix.F.xml dilinde olan HAL Sürümleri buna dahildir. Örnekler:

  • Android 9'un geliştirilmesi sırasında health@2.0 HAL, yayınlanmamış bir HAL olarak kabul ediliyordu ve yalnızca compatibility_matrix.3.xml sürümünde mevcuttu.
  • teleportation@1.0 HAL, yayınlanan hiçbir uyumluluk matrisinde yer almamaktadır ve ayrıca yayınlanmamış bir HAL olarak kabul edilir.

Çerçeve HAL'lerinde, HAL sürümü yalnızca alakasız bir geliştirme dalının çerçeve manifestinde yer alıyorsa bu sürüm yayınlanmamış olarak kabul edilir.

Yayınlanan ve Güncellenen

Cihaz HAL'lerinde, herkese açık ve donmuş bir uyumluluk matrisinde yer alan HAL Sürümü yayınlanır. Örneğin, FCM Sürüm 3 dondurulup AOSP'de yayınlandıktan sonra health@2.0 HAL, yayınlanmış ve mevcut bir HAL Sürümü olarak kabul edilir.

Bir HAL sürümü, en yüksek FCM sürümüne sahip herkese açık ve dondurulmuş bir uyumluluk matrisinde yer alıyorsa HAL sürümü günceldir (kullanımdan kaldırılmamıştır). Örneğin, compatibility_matrix.3.xml içinde kullanılmaya devam eden mevcut HAL Sürümleri (compatibility_matrix.legacy.xml içinde kullanıma sunulan nfc@1.0 gibi) da yayınlanmış ve mevcut HAL Sürümleri olarak kabul edilir.

Çerçeve HAL'lerinde bir HAL sürümü, max-level özelliği içermeyen en son yayınlanan dalın çerçeve manifestinde yer alıyorsa veya bu dalda yayınlanan FCM sürümüne eşit ya da bu sürümden daha yüksek bir max-level varsa bu sürüm, yayınlanmış ve mevcut HAL sürümü olarak kabul edilir. Örneğin, displayservice HAL, Android 12 çerçeve manifestinde belirtildiği gibi Android 12'de yayınlanmış ve günceldir.

Yayınlanan ancak desteği sonlandırılan

Cihaz HAL'leri için bir HAL Sürümü, yalnızca aşağıdaki şartların tamamı karşılandığı takdirde kullanımdan kaldırılır:

  • Yayınlandı.
  • En yüksek FCM sürümüne sahip herkese açık ve donmuş uyumluluk matrisinde yer almaz.
  • Çerçeve, herkese açık ve donmuş bir uyumluluk matrisinde yer almaya devam eder.

Örnekler:

Bu nedenle power@1.0 günceldir, ancak Android 9'da DEVRE DIŞI BIRAKMAZ.

Çerçeve HAL'lerinde, en son yayınlanan dalın çerçeve manifestinde bulunan ve bu daldaki FCM sürümünden daha düşük max-level özelliğine sahip bir HAL sürümü, yayınlanmış ancak kullanımdan kaldırılmış bir HAL sürümü olarak kabul edilir. Örneğin, schedulerservice HAL yayınlanmıştır ancak Android 12 çerçeve manifestinde belirtildiği gibi Android 12'de desteği sonlandırılmıştır.

Kaldırıldı

Cihaz HAL'leri için bir HAL Sürümü, yalnızca aşağıdaki koşulların geçerli olması durumunda kaldırılır:

  • Daha önce yayınlanmış.
  • Çerçevenin desteklediği herkese açık ve donmuş bir uyumluluk matrisinde yer almaz.

Herkese açık olan, dondurulmuş ancak çerçeve tarafından desteklenmeyen uyumluluk matrisleri, ayarlanan HAL sürümlerini 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 aşağıdaki şartların karşılanması durumunda kaldırılır:

  • Daha önce yayınlanmış.
  • En son yayınlanan dalın herhangi bir çerçeve manifestinde değil.

Eski FCM'ler

Eski hedef FCM sürümü, Treble olmayan tüm cihazlar için özel bir değerdir. Eski FCM (compatibility_matrix.legacy.xml), eski cihazlarda (ör. Android 8.0'dan önce kullanıma sunulan cihazlar) bu çerçeveyle ilgili gereksinimleri listeler.

Bu dosya F sürümüne sahip bir FCM için mevcutsa cihaz manifestinin bu dosyayla uyumlu olması koşuluyla Treble olmayan tüm cihazlar F sürümüne geçirilebilir. Diğer Hedef FCM Sürümleri'ndeki FCM'lerle aynı prosedürle kaldırılır (8.0 öncesi etkin cihaz 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 listesini hardware/interfaces/compatibility_matrices altında bulabilirsiniz.

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