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 kullanabileceği öğeleri ve hedef FCM sürümü gereksinimlerini tanımlar. Android, FCM yaşam döngüsü kapsamında HIDL HAL'leri kullanımdan kaldırıp kaldırır ve ardından 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ı ve kaldırmalıdır.

Terminoloji

Framework Compatibility Matrix (FCM)
Uygun tedarikçi uygulamalarıyla ilgili çerçeve şartlarını belirten bir XML dosyası. Uyumluluk matrisi sürüm oluşturulmuş olup 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 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)
Tedarikçi uygulamasının karşıladığı, cihaz manifestosunda açıkça belirtilen hedef FCM sürümü (SF'den itibaren). Bir tedarikçi uygulaması, yayınlanmış bir FCM'ye göre oluşturulmalıdır. Ancak, Cihaz Manifesti'nde daha yeni HAL sürümlerini bildirebilir.
HAL Sürümü
HAL sürümü foo@x.y biçimindedir. Burada foo, HAL adını, x.y ise belirli sürümü ifade eder. Örneğin, nfc@1.0, keymaster@3.0 (kök önek, örneğin android.hardware, bu belgenin tamamında atlanır).
Cihaz Manifesti
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ı. Cihaz manifestinin içeriği, cihazın hedef FCM sürümüyle sınırlıdır ancak V'ye karşılık gelen FC'ye göre kesinlikle daha yeni olan HAL'leri listeleyebilir.
Cihaz HAL'leri
Cihaz manifestinde listelenen (sağlanan) ve çerçeve uyumluluk matrisinde (FCM) listelenen HAL'ler.
Cihaz Uyumluluğu Matrisi (DCM)
Uygunluk çerçevesi uygulamalarıyla ilgili tedarikçi şartlarını belirten bir XML dosyası. Her cihazda bir DCM bulunur.
Framework Manifest
Sistem, system_ext ve ürün resimleri dahil olmak üzere satıcı arayüzünün çerçeve tarafının hangi HAL sürümlerini sağladığı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.
Framework HAL'leri
Çerçeve manifestinde sağlandığı belirtilen ve cihaz uyumluluk matrisinde (DCM) listelenen HAL'ler.

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

Bu belgede, FCM yaşam döngüsü genel olarak açıklanmaktadır. Desteklenen manifestoları görmek için hardware/interfaces/compatibility_matrices/compatibility_matrix.<FCM>.xml bölümündeki system/libvintf/include/vintf/Level.h içinde FCM'nin bulunabileceği yerler başlıklı makaleyi inceleyin.

İlgili Android sürümünün yüklü olarak gönderildiği bir cihazın, eşdeğer seviyeye eşit veya daha yüksek bir FCM değerine sahip olması beklenir. Örneğin, Android 11 ile gönderilen bir cihaz genellikle FCM düzeyi 5'e sahip olur ancak uyumluluk matrislerinde belirtilen çeşitli ek koşulları içeren FCM düzeyi 6 veya daha yüksek bir düzeyi uygular. Android 15 için desteklenen seviyeler şunlardır:

FCM Android Sürümü
5 Android 11/R
6 Android 12/S
7 Android 13/T
8 Android 14/U
202404 Android 15/V

FCM düzeyi, Vendor API Level ile aynı veya daha yeni olmalıdır.

Android, bir FCM düzeyinin desteğini sonlandırdığında bu düzey, mevcut cihazlarda desteklenmeye devam eder. Daha düşük FCM düzeylerini hedefleyen cihazların, şubede mevcut olduğu sürece daha yeni FCM düzeylerinde listelenen HAL'leri kullanmasına örtülü 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 olduğu durumlarda) artık değiştirilmez.

Yeni bir FCM sürümünde F geliştirmeye başlamak için:

  1. En son compatibility_matrix.<F-1>.xml dosyasını compatibility_matrix.F.xml klasörüne 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ünde F Android'e yeni bir HAL (Wi-Fi, NFC vb.) eklerken HAL'ı compatibility_matrix.F.xml'ye ekleyin.

Örneğin, Android 8.1'de cas@1.0 özelliği kullanıma sunuldu. Android 8.1 ile kullanıma sunulan cihazlar bu HAL'yi uygulayabilir. Bu nedenle, compatibility_matrix.F.xml'ya (bu sürümün geliştirilmesi sırasında geçici olarak compatibility_matrix.current.xml olarak adlandırılıyordu) aşağıdaki giriş eklendi:

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

HAL'yi yükseltme (küçük)

AIDL HAL sürümleri, küçük HAL sürümleri olarak kabul edilir. HIDL arayüzü sürümlerinde major.minor gibi 1.2 sürümleri bulunur.

Geliştirme sırasında, mevcut FCM sürümü F'de bir AIDL HAL'in sürümü 2'dan 3'ye yükseltildiğinde yeni sürüm, compatibility_matrix.F.xml'deki HAL girişine eklenir. Bir HAL girişinin sürüm alanı, 2-3 gibi aralıkları kabul eder.

Örneğin, Android FCM, HAL'nin küçük sürüm yükseltmesi olarak F tanıtıldı foo@3. Eski sürüm foo@2, eski FCM'leri hedefleyen cihazlar için kullanılırken yeni sürüm foo@3, Android FCM F'yi hedefleyen cihazlar için kullanılabilir. Sürüm 2 öncesindeki eski FCM'lerdeki girişler şu şekilde görünür:

<hal format="aidl">
    <name>foo</name>
    <version>2</version>
    <interface>
        <name>IFoo</name>
        <instance>default</instance>
    </interface>
</hal>

Bu giriş compatibility_matrix.F.xml alanına kopyalandı ve 3 sürümünü destekleyecek şekilde aşağıdaki gibi değiştirildi:

<hal format="aidl">
    <name>foo</name>
    <version>2-3</version>
    <interface>
        <name>IFoo</name>
        <instance>default</instance>
    </interface>
</hal>

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

Geliştirme sırasında, mevcut FCM sürümü F'da bir HAL'ın ana sürümü yükseltildiğinde yeni ana sürüm x.0, aşağıdaki ayarlarla compatibility_matrix.F.xml'ye eklenir:

  • V = F ile gönderilen cihazların x.0 ile başlatılması gerekiyorsa yalnızca x.0 sürümü.
  • Aynı <hal> etiketindeki eski ana sürümlerde, V = F ile gönderilen cihazlar eski bir ana sürümle başlatılabilir.

Örneğin, FCM sürümü F, foo@2.0 sürümünü 1.0 HAL'ın büyük sürüm yükseltmesi olarak sunar ve 1.0 HAL'ın desteğini sonlandırır. Eski sürüm olan foo@1.0, önceki FCM sürümlerini hedefleyen cihazlar için kullanılır. HAL'yi sağlayan cihazlar, FCM sürüm F'yı hedefliyorsa yeni 2.0 sürümünü sağlamalıdır. Bu örnekte, önceki FCM sürümlerinde şu giriş yer almaktadır:

<hal format="hidl">
    <name>foo</name>
    <version>1.0</version>;
    <interface>
        <name>IFoo</name>
        <instance>default</instance>
    </interface>
</hal>

Bu girişi compatibility_matrix.F.xml adresine kopyalayın ve aşağıdaki gibi değiştirin:

<hal format="hidl">
    <name>foo</name>
    <version>2.0</version>
    <interface>
        <name>IFoo</name>
        <instance>default</instance>
    </interface>
</hal>

Kısıtlamalar:

  • 1.0 HAL'si compatibility_matrix.F.xml içinde olmadığından, FCM sürümü F'ü hedefleyen cihazlar 1.0 HAL'sini sağlamamalıdır (bu HAL, kullanımdan kaldırılmış olarak kabul edilir).
  • 1.0 HAL, eski FCM sürümlerinde bulunduğundan çerçeve, 1.0 HAL ile çalışmaya devam edebilir. Bu nedenle, eski FCM sürümlerini hedefleyen eski cihazlarla geriye dönük olarak uyumludur.

Yeni FCM sürümleri

Sistem bölümünde FCM sürümü yayınlama işlemi yalnızca Google tarafından AOSP sürümü kapsamında 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 derlenip başlatıldığından emin olun.
  3. En yeni çerçeveyle (Shipping API düzeyine göre) kullanıma sunulan cihazlarda hedef FCM sürümünün V >= F 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ünün 3 veya daha yeni olmasını sağlar.

Ayrıca, ürün ve system_ext FCM'leri her platform FCM sürümü için de koşullar listeleyebilir. Üründe 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 aynı 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ünün desteğinin sonlandırılması

Bir HAL sürümünün desteğini sonlandırmak geliştiricinin kararıdır (ör. AOSP HAL'leri için Google karar verir). Bu durum, daha yüksek bir HAL sürümü (alt veya ana) yayınlandığında ortaya çıkabilir.

Cihaz HAL'sini kullanımdan kaldırma

Belirli bir cihaz HAL'ı foo@x.y, FCM sürümü F'de kullanımdan kaldırıldığında, Hedef FCM sürümü V = F veya sonraki sürümlerle başlatılan hiçbir cihazın foox.y sürümünde ya da x.y'den eski bir sürümde uygulamaması gerekir. Kullanımdan kaldırılan bir HAL sürümü, cihazları yükseltmek için çerçeve tarafından hâlâ desteklenmektedir.

FCM sürümü F yayınlandığında, belirli HAL sürümü en son FCM for Target FCM Version V = F sürümünde açıkça belirtilmemişse HAL sürümü foo@x.y kullanımdan kaldırılmış olarak kabul edilir. V = F ile kullanıma sunulan cihazlarda aşağıdaki koşullardan biri geçerlidir:

  • Çerçeve daha yüksek bir sürüm (ana veya alt) gerektiriyor.
  • Çerçeve artık HAL'yi gerektirmiyor.

Örneğin, Android 9'da health@2.0, 1.0 HAL'nin önemli bir sürüm yükseltmesi olarak sunulur. health@1.0, compatibility_matrix.3.xml dosyasından kaldırılmış ancak compatibility_matrix.legacy.xml, compatibility_matrix.1.xml ve compatibility_matrix.2.xml dosyalarında mevcut. Bu nedenle, health@1.0 desteği sonlandırıldı.

Framework HAL'lerini kullanımdan kaldırma

Belirli bir çerçeve HAL'i foo@x.y, FCM sürüm F'de kullanımdan kaldırıldığında, hedef FCM sürümü V = F veya daha yeni bir sürümle başlatılan cihazların, çerçeve tarafından foo'nin x.y sürümünde ya da x.y'den eski bir sürümde sağlanmasını beklememesi gerekir. Kullanımdan kaldırılan bir HAL sürümü, cihazları yükseltmek için çerçeve tarafından sağlanmaya devam eder.

FCM sürümü F yayınlandığında, çerçeve manifestinde foo@x.y için max-level="F - 1" belirtilmişse HAL sürümü foo@x.y kullanımdan kaldırılmış olarak kabul edilir. V = F ile kullanıma sunulan cihazlarda çerçeve, HAL foo@x.y'yi sağlamaz. V = F ile kullanıma sunulan cihazlardaki cihaz uyumluluğu matrisinde, max-level < V ile çerçeve HAL'leri listelenmemelidir.

Ö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 ayarlanır. Android 12 framework manifest'e bakın.

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ü bir sonraki çerçeve sürümünün SF kümesinden kaldırılır. Bu işlem aşağıdaki iki adımla yapılır:

  1. compatibility_matrix.V.xml öğesini derleme kurallarından kaldırma (böylece sistem görüntüsüne yüklenmez) ve kaldırılan özellikleri uygulayan veya bunlara bağlı olan tüm kodları silme.

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

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

Desteği tamamen sonlandırılmış HAL'lerin kaldırılması

Bir FCM sürümü kaldırıldığında bazı HAL arayüzleri veya HAL arayüzlerinin sürümleri artık hiçbir FCM'de bulunmaz. Bu, Android'in cihazları yükseltme konusunda bile bu sürümleri artık desteklemediği anlamına gelir.

Bir HAL artık desteklenmediğinde geliştiriciler, Android'de bu HAL arayüzüne yapılan referansları kaldırır. Bu referanslar, çerçevedeki istemci kodu, varsayılan uygulama ve VTS test senaryolarında yer alır.

Kaldırılan HAL'den devralınan desteklenen HAL'ler yoksa HAL tanımı da birkaç ek adımla kaldırılabilir.

  1. HAL arayüzü tanımını kaynak koddan kaldırın. Buna *.aidl dosyaları ve Android.bp aidl_interface modülü dahildir.
  2. HIDL ise HASH'i hardware/interfaces/current.txt öğesinden kaldırın.
  3. AIDL kullanılıyorsa dondurulmuş AIDL dosyalarının bulunduğu aidl_api dizinini kaldırın.
  4. Arayüzü hardware/interfaces/compatibility_matrices/exclude/fcm_exclude.cpp cihazından kaldırın.

HAL sürüm durumu

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

Yayınlanmamış

Cihaz HAL'leri için, bir HAL sürümü herkese açık ve dondurulmuş uyumluluk matrislerinin hiçbirinde yer almıyorsa yayınlanmamış ve geliştirme aşamasında olabilir. Bu, yalnızca compatibility_matrix.F.xml'da 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 compatibility_matrix.3.xml'de yer aldı.
  • 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, bir HAL sürümü yalnızca alakasız bir geliştirme dalının çerçeve manifestosunda bulunuyorsa yayınlanmamış olarak kabul edilir.

Yayınlanmış ve güncel

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

Çerçeve HAL'leri için, bir HAL sürümü en son yayınlanan dalın çerçeve manifestosunda max-level özelliği olmadan veya (alışılmadık bir şekilde) bu dalda yayınlanan FCM sürümüne eşit ya da daha yüksek bir max-level ile yer alıyorsa yayınlanmış ve güncel 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ınlandı ancak desteği sonlandırıldı

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

  • Yayınlanmış olmalıdır.
  • En yüksek FCM sürümüne sahip herkese açık ve sabit uyumluluk matrisinde yer almıyor.
  • Çerçevenin hâlâ desteklediği, herkese açık ve sabit bir uyumluluk matrisinde yer alıyor.

Örnekler:

Bu nedenle power@1.0, Android 9'da geçerlidir ancak kullanımdan kaldırılmamıştır.

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

Kaldırıldı

Cihaz HAL'leri için, yalnızca aşağıdaki koşullar geçerliyse bir HAL sürümü kaldırılır:

  • Daha önce yayınlanmış olmalıdır.
  • Çerçevenin desteklediği herkese açık ve sabit bir uyumluluk matrisinde 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, yalnızca aşağıdaki koşullar karşılandığında bir HAL sürümü kaldırılır:

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

Eski FCM'ler

Target FCM Version legacy, Treble destekli olmayan tüm cihazlar için özel bir değerdir. Eski FCM, compatibility_matrix.legacy.xml, eski cihazlardaki (ör. Android 8.0'dan önce piyasaya sürülen cihazlar) çerçevenin gereksinimlerini listeler.

Bu dosya, F sürümüne sahip bir FCM için varsa cihaz manifestosu bu dosyayla uyumlu olduğu sürece Treble olmayan tüm cihazlar F sürümüne yükseltilebilir. Kaldırılması, diğer hedef FCM sürümleri için FCM'lerle aynı prosedüre tabidir (etkin 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ı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 konusuna bakın.