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:
- En son
compatibility_matrix.<F-1>.xml
değerinicompatibility_matrix.F.xml
hedefine kopyalayın. - Dosyadaki
level
özelliğiniF
olarak güncelleyin. - 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ı gerekiyorsaoptional="false"
,V = F
ile gönderilen cihazlar bu HAL olmadan başlatılabiliyorsaoptional="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)
veoptional="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 (buradaw >= 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ınx.0
ile başlatılması gerekiyorsa yalnızcax.0
sürümüne sahipoptional="false"
.optional="false"
ancakV = 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ı gerekmiyorsaoptional="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ölgesindeoptional="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:
compatibility_matrix.F.xml
öğesindelevel="F"
özelliğinin bulunduğundan emin olun.- Tüm cihazların derlendiğinden ve başlatıldığından emin olun.
- 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. - 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:
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.max-level
değerinden düşük veyaV
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ızcacompatibility_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:
health@1.0
HAL'sicompatibility_matrix.legacy.xml
,compatibility_matrix.1.xml
vecompatibility_matrix.2.xml
'dedir ancakcompatibility_matrix.3.xml
içinde değildir. Bu nedenle, Android 9'da desteğin sonlandırıldığı düşünülür.- Güç HAL'si, Android 9'da küçük bir sürüm güncellemesine
sahip ancak
power@1.0
hâlâcompatibility_matrix.3.xml
sürümündedir. power@1.0
compatibility_matrix.legacy.xml
,compatibility_matrix.1.xml
vecompatibility_matrix.2.xml
.compatibility_matrix.3.xml
,power@1.0-1
sahip.
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.