FCM yaşam döngüsü

Bir Android çerçeve sürümünde, yükseltilebilir her hedef FCM sürümü için bir tane olmak üzere birden fazla çerçeve uyumluluk matrisi (FCM) bulunur. Bu matrisler, çerçevenin neleri kullanabileceğini ve hedef FCM sürümü şartlarını tanımlar. Android, FCM yaşam döngüsü kapsamında HIDL HAL'leri kullanımdan kaldırır ve kaldırdıktan sonra FCM dosyalarını HAL sürümünün durumunu yansıtacak şekilde değiştirir.

Tedarikçi arayüzlerini genişleten iş ortakları, kendi ekosistemlerinde yalnızca çerçeve OTA'larını etkinleştirmek için aynı yöntemleri kullanarak HIDL HAL'leri de kullanımdan kaldırmalıdır.

Terminoloji

Çerçeve Uyumluluğu Matrisi (FCM)
Uygun tedarikçi uygulamalarında çerçeve şartlarını belirten bir 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ü birden fazla FCM içerir.
Platform FCM Sürümleri (SF)
Bir çerçeve sürümündeki tüm FCM sürümlerinin kümesi. Çerçeve, bu FCM'lerden birini karşılayan tüm tedarikçi firma uygulamalarında ç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)
Cihaz manifestinde açıkça belirtilen ve tedarikçi uygulamasının karşıladığı 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. Burada foo, HAL adı, x.y ise belirli sürümdür; ör. nfc@1.0, keymaster@3.0 (kök ön ek, ör. android.hardware, bu belgede atlanmıştır.)
Cihaz manifesti
Satıcı arayüzünün cihaz tarafında (satıcı ve ODM resimleri dahil) hangi HAL sürümlerinin sağlandığını belirten XML dosyaları. Bir cihaz manifest'inin 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 kıyasla kesinlikle daha yeni HAL'leri listeleyebilir.
Cihaz HAL'leri
Cihaz manifestinde listelenen (sağlanan) ve çerçeve uyumluluk matrisinde (FCM) listelenen (zorunlu veya isteğe bağlı) HAL'ler.
Cihaz Uyumluluğu Matrisi (DCM)
Uygun çerçeve uygulamalarında tedarikçi şartlarını belirten bir XML dosyası. Her cihazda bir DCM bulunur.
Framework Manifest
system, system_ext ve ürün resimleri dahil olmak üzere tedarikçi arayüzünün çerçeve tarafında hangi HAL sürümlerinin sağlandığını belirten bir XML dosyası. Çerçeve manifestindeki 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 manifestinde sağlandığı şekilde ve cihaz uyumluluk matrisinde (DCM) zorunlu veya isteğe bağlı olarak listelenen HAL'ler.

Kod tabanında FCM yaşam döngüsü

Bu belgede, FCM yaşam döngüsü özet olarak açıklanmaktadır. Desteklenen manifest'leri görmek için system/libvintf/include/vintf/Level.h'de FCM'nin bulunduğu hardware/interfaces/compatibility_matrix.<FCM>.xml bölümüne bakın.

İ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 ile birlikte gönderilen bir cihaz genellikle 5. seviye FCM'ye sahip olur ancak uyumluluk matrislerinde belirtilen çeşitli ek şartlarla birlikte 6. seviye veya daha yüksek bir FCM uygular. Desteklenen seviyeler ş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

FCM düzeyi, Tedarikçi API düzeyi ile aynı veya bu düzeyden daha yeni olmalıdır.

Android bir FCM düzeyini kullanımdan kaldırdığında bu düzey, mevcut cihazlarda desteklenmeye devam eder. Daha düşük FCM düzeylerini hedefleyen cihazların, dalda mevcut oldukları sürece yeni FCM düzeylerinde listelenen HAL'leri kullanmasına dolaylı olarak izin verilir.

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

Android, her çerçeve sürümü (ör. Android 8 ve 8.1) 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 tanıtma

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

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

Örneğin, Android 8.1'de isteğe bağlı bir HAL olarak cas@1.0 kullanıma sunulmuştur. Android 8.1 ile kullanıma sunulan cihazların bu HAL'i uygulaması gerekmez. Bu nedenle, compatibility_matrix.F.xml (bu sürümün geliştirilmesi sırasında geçici olarak compatibility_matrix.current.xml olarak adlandırılıyordu) dosyasına 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'i yükseltme (küçük)

Geliştirme sırasında bir HAL'nin, mevcut FCM Sürümü F ile x.z sürümünden x.(z+1) sürümüne yükseltme işlemi aşağıdaki gibiyse söz konusu sürüm:

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

Örneğin, Android 8.1, 1.0 HAL'in küçük bir sürüm yükseltmesi olarak broadcastradio@1.1'ü kullanıma sundu. Eski sürüm (broadcastradio@1.0), Android 8.0 ile başlatılan cihazlarda isteğe bağlı, yeni sürüm (broadcastradio@1.1) ise Android 8.1 ile başlatılan cihazlarda 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 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>

HAL'i yükseltme (büyük)

Geliştirme sırasında, bir HAL'nin mevcut FCM Sürümü'nde 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'ye eklenir:

  • V = F ile birlikte gönderilen cihazlar x.0 ile başlatılacaksa yalnızca x.0 sürümüne sahip optional="false"
  • optional="false" ancak aynı <hal> etiketindeki eski büyük sürümlerle birlikte, V = F ile birlikte gönderilen cihazlar bu HAL ile başlatılmalı ancak eski bir büyük sürümle başlatılabilirse.
  • V = F ile gönderilen cihazların HAL'yi başlatması gerekmiyorsa optional="true".

Örneğin, Android 9, 1.0 HAL'in büyük sürüm yükseltmesi olarak health@2.0'ü kullanıma sunar ve 1.0 HAL'in desteğini sonlandırır. Android 8.0 ve Android 8.1 ile kullanıma sunulan cihazlar için eski sürüm (health@1.0) isteğe bağlıdır. Android 9 ile kullanıma sunulan cihazlarda yeni 2.0 sürümü sunulmalıdır. Örneğin, compatibility_matrix.legacy.xml, compatibility_matrix.1.xml ve compatibility_matrix.2.xml şu girişi içerdiğini varsayalım:

<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şi compatibility_matrix.F.xml alanına kopyalayıp aşağıdaki gibi değiştirin:

<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'te bulunduğundan Android 9 ile kullanıma sunulan cihazlar 2.0 HAL ile birlikte gönderilmelidir.`
  • 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 desteğinin sonlandırıldığı kabul edilir).
  • 1.0 HAL, legacy/1/2.xml ürününde (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 ile (kaldırılmış HAL sürümü olarak kabul edilmez) ç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 öğesinin level="F" özelliğine sahip olduğundan emin olun.
  2. Tüm cihazların derlendiğinden ve önyükleme yaptığından emin olun.
  3. En yeni ç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ınlama.

Örneğin, VTS testleri, Android 9 ile kullanıma sunulan cihazların hedef FCM sürümünün 3 veya daha yeni bir sürüm olduğundan emin olur.

Ayrıca ürün ve system_ext FCM'leri, her platform FCM sürümü için koşulları da listeleyebilir. FCM sürümlerinin ürün ve system_ext bölümlerinde yayınlanması, sırasıyla bu resimlerin sahibi tarafından yapılır. product 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 F sürümüne sahip FCM'deki uyumluluk matrisi, hedef F sürümüne sahip bir cihazdaki gereksinimleri yansıtır.

HAL sürümünün desteğinin sonlandırılması

Bir HAL Sürümünün kullanımdan kaldırılması, geliştirici tarafından verilen bir karardır (ör. AOSP HAL'ler için bu kararı Google verir). Bu durum, daha yüksek bir HAL sürümü (alt veya ana sürüm) yayınlandığında ortaya çıkabilir.

Cihaz HAL'inin desteğini sonlandırma

Belirli bir cihaz HAL'i foo@x.y, FCM F sürümünde kullanımdan kaldırıldığında, hedef FCM V = F veya sonraki bir sürümle kullanıma sunulan tüm cihazların foox.y sürümünde veya x.y'ten eski bir sürümde uygulamaması gerekir. Desteği sonlandırılan bir HAL sürümü, cihazları yükseltmek için çerçeve tarafından hâlâ desteklenir.

F sürüm numaralı FCM yayınlandığında, V = F sürüm numaralı hedef FCM için en son FCM'de belirli bir HAL sürümü açıkça belirtilmemişse söz konusu HAL sürümü kullanımdan kaldırılmış kabul edilir.foo@x.y V = F ile kullanıma sunulan cihazlarda aşağıdaki koşullardan biri geçerlidir:

  • Çerçeve için daha yeni bir sürüm (büyük veya küçük) gereklidir;
  • Çerçeve artık HAL'e ihtiyaç duymuyor.

Örneğin, Android 9'da health@2.0, 1.0 HAL'in büyük bir sürüm yükseltmesi olarak kullanıma sunulur. health@1.0, compatibility_matrix.3.xml'ten kaldırılır ancak compatibility_matrix.legacy.xml, compatibility_matrix.1.xml ve compatibility_matrix.2.xml dosyalarında bulunur. Bu nedenle, health@1.0 desteği sonlandırıldı.

Bir çerçeve HAL'inin desteğini sonlandırma

Belirli bir çerçeve HAL'i foo@x.y, FCM sürüm F'te kullanımdan kaldırıldığında, hedef FCM sürümü V = F veya sonraki sürümlerle kullanıma sunulan cihazların, çerçevenin foox.y sürümünde veya x.y'den eski sürümlerde sağlamasını beklememesi gerekir. Desteği sonlandırılan HAL sürümü, cihazları yükseltmek için çerçeve tarafından hâlâ sağlanır.

FCM F sürümü yayınlandığında, HAL foo@x.y sürümü için sunulan destek sonlandırılır. Bunun nedeni, çerçeve manifestinin foo@x.y için max-level="F - 1" belirtmesidir. V = F ile başlatılan cihazlar için çerçeve, HAL foo@x.y'ü sağlamaz. V = F ile kullanıma sunulan cihazlardaki cihaz uyumluluk matrisinde, max-level < V ile birlikte çerçeve HAL'leri listelenmemelidir.

Örneğin, Android 12'de schedulerservice@1.0 desteği sonlandırılmıştır. max-level özelliği, Android 11'de kullanıma sunulan FCM sürümü olan 5 olarak ayarlanmıştır. Android 12 çerçeve manifestini inceleyin.

Hedef FCM sürümleri için destek kaldırılıyor

Belirli bir hedef FCM sürümünün V etkin cihaz sayısı belirli bir eşiğin altına düştüğünde, hedef FCM sürümü sonraki çerçeve sürümünün SF grubundan kaldırılır. Bu işlem aşağıdaki adımların her ikisi tarafından da yapılır:

  1. compatibility_matrix.V.xml'ü derleme kurallarından kaldırma (sistem görüntüsüne yüklenmemesi için) ve kaldırılan özellikleri uygulayan veya bu özelliklere bağlı olan tüm kodları silme.

  2. max-level değeri V veya V'a eşit olan çerçeve HAL'lerini çerçeve manifestinden kaldırma ve kaldırılan çerçeve HAL'lerini uygulayan tüm kodları silme.

Belirli bir çerçeve sürümü için hedef FCM sürümü SF dışında olan cihazlar bu sürüme yükseltemez.

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, HAL sürümü herkese açık ve dondurulmuş uyumluluk matrislerinden hiçbirinde yoksa yayınlanmamış ve muhtemelen geliştirme aşamasında kabul edilir. Yalnızca compatibility_matrix.F.xml'te bulunan HAL sürümleri de buna dahildir. Ö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'te mevcuttu.
  • teleportation@1.0 HAL, yayınlanan uyumluluk matrislerinde yer almıyor ve yayınlanmamış bir HAL olarak kabul ediliyor.

Çerçeve HAL'leri için, yalnızca alakasız bir geliştirme dalının çerçeve manifestinde bulunan HAL sürümleri yayınlanmamış olarak kabul edilir.

Yayınlanmış ve güncel

Cihaz HAL'leri için, herkese açık ve dondurulmuş bir uyumluluk matrisinde bulunan HAL sürümleri yayınlanır. Örneğin, FCM 3 sürümü dondurulduktan ve 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 herkese açık ve dondurulmuş bir uyumluluk matrisindeyse HAL sürümü günceldir (yani desteği sonlandırılmamıştır). Örneğin, compatibility_matrix.3.xml ürününde var olmaya devam eden mevcut HAL Sürümleri (compatibility_matrix.legacy.xml'te kullanıma sunulan nfc@1.0) da yayınlanmış ve mevcut HAL Sürümleri olarak kabul edilir.

Çerçeve HAL'leri için, en son yayınlanan dalın çerçeve manifestinde max-level özelliği olmadan veya (normalde) bu dalda yayınlanan FCM sürümüne eşit veya bu sürümden daha yüksek bir max-level ile bir HAL sürümü varsa bu sürüm, yayınlanmış ve geçerli bir HAL sürümü olarak kabul edilir. Örneğin, Android 12 çerçeve manifestinde belirtildiği gibi displayservice HAL, Android 12'de yayınlanmış ve günceldir.

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

Cihaz HAL'leri için HAL sürümünün desteği, yalnızca aşağıdaki koşulların tümü karşılandığı takdirde sonlandırılır:

  • Yayınlandı.
  • En yüksek FCM sürümüne sahip herkese açık ve dondurulmuş uyumluluk matrisinde yer almıyor.
  • Çerçevenin hâlâ desteklediği herkese açık ve dondurulmuş bir uyumluluk matrisindedir.

Örnekler:

Bu nedenle power@1.0, Android 9'da günceldir ancak desteği KESİNLİKLE sonlandırılmamıştır.

Çerçeve HAL'leri için, en son yayınlanan dalın çerçeve manifestinde max-level özelliği bu daldaki FCM sürümünün sürümünden daha düşük bir HAL sürümü varsa bu sürüm, yayınlanmış ancak desteği sonlandırılmış bir HAL sürümü olarak kabul edilir. Örneğin, schedulerservice HAL yayınlanmış olsa da 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 HAL sürümü yalnızca aşağıdaki koşullar geçerliyse kaldırılır:

  • Daha önce yayınlanmış.
  • Çerçevenin desteklediği herkese açık ve dondurulmuş uyumluluk matrislerinde yer almıyor.

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 bulunmadığından emin olmak için VTS testleri yazılabilir.

Çerçeve HAL'leri için bir HAL sürümü yalnızca aşağıdakiler karşılanırsa kaldırılır:

  • Daha önce yayınlanmış.
  • En son yayınlanan dalın hiçbir çerçeve manifestinde yer almıyor.

Eski FCM'ler

Hedef FCM sürümü eski, Treble olmayan tüm cihazlar için özel bir değerdir. Eski FCM (compatibility_matrix.legacy.xml), eski cihazlardaki (ör. Android 8.0'den önce kullanıma sunulan cihazlar) çerçevenin koşullarını listeler.

Bu dosya, F sürümü olan bir FCM için mevcutsa cihaz manifest'i bu dosyayla uyumlu olduğu sürece Treble dışındaki tüm cihazlar F sürümüne yükseltilebilir. Bu sürümün kaldırılması, diğer hedef FCM sürümleri için FCM'lerle aynı prosedürü izler (8.0 öncesi etkin 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 listesini hardware/interfaces/compatibility_matrices bölümünde bulabilirsiniz.

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