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ümlere ayrılmıştı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 beyan edilen ve bir tedarikçi uygulamasının karşıladığı hedeflenen FCM sürümü (SF'den). Tedarikçi firma uygulaması, yayınlanan bir FCM'ye göre oluşturulmalıdır ancak cihaz manifestinde daha yeni HAL sürümlerini belirtebilir.
- HAL Sürümü
- HAL sürümü,
foo@x.y
biçimindedir. Buradafoo
, 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 manifest dosyasında ve çerçeve uyumluluk matrisinde (FCM) listelenen (sağlanan) 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ığı ve cihaz uyumluluk matrisinde (DCM) listelendiği şekilde 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, eşdeğer düzeye eşit veya bu düzeyden 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 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 |
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ünde F
geliştirmeye başlamak için:
- En son
compatibility_matrix.<F-1>.xml
'icompatibility_matrix.F.xml
'a 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 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 compatibility_matrix.F.xml
'e ekleyin.
Örneğin, Android 8.1'de cas@1.0
kullanıma sunulmuştur. Android 8.1 ile kullanıma sunulan cihazlar bu HAL'i uygulayabilir. 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">
<name>android.hardware.cas</name>
<version>1.0</version>
<interface>
<name>IMediaCasService</name>
<instance>default</instance>
</interface>
</hal>
HAL'i yükseltme (küçük)
AIDL HAL sürümleri, küçük HAL sürümleri olarak sayılır. HIDL arayüz sürümleri, 1.2
gibi major.minor
sürümlerine sahiptir.
Geliştirme sırasında, bir AIDL HAL'de mevcut FCM sürümü F
'de 2
sürümünden 3
sürümüne yükseltme yapıldığında yeni sürüm, compatibility_matrix.F.xml
'daki HAL girişine eklenir. HAL girişinin sürüm alanı 2-3
gibi aralıkları kabul eder.
Örneğin, Android FCM F
, HAL'ın küçük bir sürüm yükseltmesi olarak foo@3
'ü kullanıma sundu. Eski sürüm (foo@2
), eski FCM'leri hedefleyen cihazlar için kullanılır. Yeni sürüm (foo@3
) ise Android FCM F
'yi hedefleyen cihazlar için kullanılabilir. 2
sürümünden önceki eski FCM'lerdeki giriş ş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ü desteklemek için aşağıdaki şekilde değiştirildi:
<hal format="aidl">
<name>foo</name>
<version>2-3</version>
<interface>
<name>IFoo</name>
<instance>default</instance>
</interface>
</hal>
HAL'i yükseltme (önemli)
Geliştirme sırasında, bir HAL'de mevcut FCM F
sürümünde büyük bir sürüm yükseltmesi olduğunda, yeni büyük sürüm x.0
aşağıdaki ayarlarla compatibility_matrix.F.xml
'e eklenir:
V = F
ile birlikte gönderilen cihazlarınx.0
ile başlatılması gerekiyorsa yalnızcax.0
sürümü.V = F
ile birlikte gönderilen cihazlar eski bir ana sürümle başlatılabiliyorsa aynı<hal>
etiketindeki eski ana sürümlerle.
Örneğin, F
sürümü olan FCM, 1.0 HAL'in büyük sürüm yükseltmesi olarak foo@2.0
'ü kullanıma sunar ve 1.0 HAL'in desteğini sonlandırır. Eski sürüm (foo@1.0
), önceki FCM sürümlerini hedefleyen cihazlar için kullanılır. F
FCM sürümünü hedefleyen cihazlar, HAL sağlıyorsa yeni 2.0 sürümünü sağlamalıdır. Bu örnekte, önceki FCM sürümleri şu girişi içerir:
<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
alanına kopyalayıp 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,
compatibility_matrix.F.xml
sürümünde olmadığındanF
sürümünü hedefleyen cihazlar 1.0 HAL'i sağlamamalıdır (bu HAL'in desteği sonlandırıldığı kabul edildiğinden). - 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 uyumludur.
Yeni FCM sürümleri
Sistem bölümünde bir FCM sürümünü yayınlama işlemi, yalnızca AOSP sürümü kapsamında Google tarafından gerçekleştirilir ve aşağıdaki adımları içerir:
compatibility_matrix.F.xml
öğesininlevel="F"
özelliğine sahip olduğundan emin olun.- Tüm cihazların derlendiğinden ve başlatıldığından emin olun.
- En son çerçeveyle (Gönderim 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. - 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 product ve system_ext FCM'leri, her platformun FCM sürümleriyle ilgili 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 desteğinin sonlandırılması geliştirici kararıdır (ör. AOSP HAL'leri için 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 sürümlerle kullanıma sunulan tüm cihazların foo
'ı x.y
sürümünde veya x.y
'ten eski sürümlerde uygulamaması gerekir. Desteği sonlandırılan 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ü desteği sonlandı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) gerekir;
- Ç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 x.y
sürümünde veya x.y
'den eski sürümlerde foo
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ümlerine yönelik 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:
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.max-level
değeriV
veyaV
'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ızcacompatibility_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
'te kullanılmaya devam eden mevcut HAL sürümleri (ör. compatibility_matrix.legacy.xml
'de kullanıma sunulan nfc@1.0
) de kullanıma sunulan 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 yeni 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, displayservice
HAL, Android 12 çerçeve manifestinde belirtildiği gibi Android 12'de kullanıma sunulmuş ve günceldir.
Kullanıma sunuldu ancak desteği sonlandırıldı
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:
health@1.0
HAL,compatibility_matrix.legacy.xml
,compatibility_matrix.1.xml
vecompatibility_matrix.2.xml
içindedir ancakcompatibility_matrix.3.xml
içinde değildir. Bu nedenle Android 9'da desteği sonlandırılmıştır.- Güç HAL'i Android 9'da küçük bir sürüm yükseltmesi aldı ancak
power@1.0
hâlâcompatibility_matrix.3.xml
sürümünde. 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
, 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üre (8.0 öncesi etkin cihaz sayısı belirli bir eşiğin altına düştüğünde kaldırılır) tabidir.
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 birlikte yayınlanan FCM sürümünü bulmak için Level.h
bölümüne bakın.