Bir Android çerçeve sürümü, çerçevenin ne kullanabileceğini ve Hedef FCM sürüm gereksinimlerini tanımlayan, yükseltilebilir her bir Hedef FCM Sürümü için bir tane olmak üzere birden çok Çerçeve Uyumluluk Matrisine (FCM) sahiptir. FCM yaşam döngüsünün bir parçası olarak Android, HIDL HAL'leri kullanımdan kaldırır ve 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ını etkinleştirmek için, satıcı arabirimlerini genişleten iş ortaklarının aynı yöntemleri kullanarak HIDL HAL'lerini de kullanımdan kaldırması ve kaldırması gerekir.
terminoloji
Çerçeve Uyumluluk Matrisi (FCM) | Uygun satıcı uygulamalarına ilişkin çerçeve gereksinimlerini belirten bir XML dosyası. Uyumluluk matrisi sürümlendirilir ve her çerçeve sürümü için yeni bir sürüm dondurulur. Her çerçeve sürümü birden çok FCM içerir. |
---|---|
Platform FCM Sürümleri (S F ) | 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) | Hedeflenen FCM sürümü (S F'den ), bir satıcı uygulamasının karşıladığı cihaz bildiriminde açıkça belirtilir. Cihaz Bildiriminde daha yeni HAL sürümleri bildirebilmesine rağmen, yayınlanmış bir FCM'ye karşı bir satıcı uygulaması oluşturulmalıdır. |
HAL Sürümü | Bir HAL Sürümü foo@xy biçimine sahiptir; burada foo , HAL adıdır ve xy , belirli sürümdür; örneğin nfc@1.0 , keymaster@3.0 (kök öneki, örneğin android.hardware , bu belgede atlanmıştır.) |
Aygıt Bildirimi | Satıcı ve ODM görüntüleri dahil olmak üzere satıcı arabiriminin aygıt tarafının hangi HAL sürümlerini sağladığını belirten XML dosyaları. Bir aygıt bildiriminin içeriği, aygıtın Hedef FCM sürümü tarafından sınırlandırılır, ancak V'ye karşılık gelen FCM'ye göre kesinlikle daha yeni olan HAL'leri listeleyebilir. |
Cihaz HAL'leri | Aygıt bildiriminde listelenen (sağlanan) ve çerçeve uyumluluk matrisinde (FCM) listelenen (gerekli veya isteğe bağlı) HAL'ler. |
Cihaz Uyumluluk Matrisi (DCM) | Çerçeve uygulamalarına uygun satıcı gereksinimlerini belirten bir XML dosyası. Her cihaz bir DCM içerir. |
Çerçeve Manifestosu | Sistem, system_ext ve ürün görüntüleri dahil olmak üzere satıcı arabiriminin çerçeve tarafının hangi HAL sürümlerini sağladığını belirten bir XML dosyası. Çerçeve bildirimindeki HAL'ler, aygıtın Hedef FCM sürümüne göre dinamik olarak devre dışı bırakılır. |
Çerçeve HAL'leri | Çerçeve bildiriminde sağlanan ve cihaz uyumluluk matrisinde (DCM) gerekli veya isteğe bağlı olarak listelenen HAL'ler. |
Yeni bir FCM Sürümünde Geliştirme
Android, her çerçeve sürümü için (Android 8, 8.1 vb. gibi) FCM Sürümünü artırır. Geliştirme sırasında, yeni compatibility_matrix.current.xml
oluşturulur ( F
) ve mevcut compatibility_matrix.f.xml
(burada f
< F
) artık değiştirilmez.
Yeni bir FCM Sürümü F
geliştirmeye başlamak için:
- En son
compatibility_matrix.<F-1>.xml
compatibility_matrix.current.xml
. - Dosyadaki
level
niteliğiniF
olarak güncelleyin. - Bu uyumluluk matrisini cihaza yüklemek için ilgili yapı kurallarını ekleyin.
Yeni bir HAL ile tanışın
Geliştirme sırasında, mevcut FCM Sürüm F
Android'e yeni bir HAL (Wi-Fi, NFC, vb.) tanıtılırken, aşağıdaki optional
ayarlarla HAL'ı compatibility_matrix.current.xml
dosyasına ekleyin:
-
V = F
ile gelen cihazların bu HAL ile başlatılması gerekiyorsa,optional="false"
,
VEYA -
V = F
ile gelen cihazlar bu HAL olmadan başlatılabilirse,optional="true"
.
Örneğin, Android 8.1, isteğe bağlı bir HAL olarak cas@1.0
tanıttı. Bu HAL'ı uygulamak için Android 8.1 ile başlatılan aygıtlar gerekli değildir, bu nedenle aşağıdaki girdi compatibility_matrix.current.xml
eklenmiştir (Android 8.1 yayınlandıktan sonra compatibility_matrix.2.xml
olarak yeniden adlandırılmıştır):
<hal format="hidl" optional="true"> <name>android.hardware.cas</name> <version>1.0</version> <interface> <name>IMediaCasService</name> <instance>default</instance> </interface> </hal>
HAL yükseltme (küçük)
Geliştirme sırasında, bir HAL, mevcut FCM Sürüm F
xz
x.(z+1)
'e bir alt sürüm yükseltmesine sahipse, bu sürüm:
-
V = F
ile başlatılan aygıtlarda gerekli olancompatibility_matrix.current.xml
dosyasındax.(z+1)
veoptional="false"
belirtilmelidir. -
V = F
ile başlatılan cihazlarda gerekli değildir,compatibility_matrix.current.xml
,xy-z
ve isteğe bağlılığı convert_matrixcompatibility_matrix.<F-1>.xml
.xml'den kopyalamalı ve sürümüxw-(z+1)
olarak değiştirmelidir (buradaw >= y
).
Örneğin, Android 8.1, 1.0 HAL'ın küçük bir sürüm yükseltmesi olarak broadcastradio@1.1
radyosu@1.1'i tanıttı. Eski sürüm olan broadcastradio@1.0
, Android 8.0 ile başlatılan cihazlar için isteğe bağlıyken, daha yeni sürüm olan broadcastradio@1.1
, Android 8.1 ile başlatılan cihazlar için isteğe bağlıdır. compatibility_matrix.1.xml
içinde:
<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.2.xml
compatibility_matrix.current.xml
yeniden adlandırıldı) 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>
Bir HAL'i Yükseltme (majör)
Geliştirme sırasında, bir HAL, mevcut FCM Sürüm F
bir ana sürüm yükseltmesine sahip olduğunda, yeni ana sürüm x.0
, aşağıdaki optional
ayarlarla compatibility_matrix.current.xml
dosyasına eklenir:
-
V = F
ile gelen cihazlarınx.0
ile başlatılması gerekiyorsa, yalnızcax.0
sürümüyleoptional="false"
. -
optional="false"
ancak aynı<hal>
etiketindeki daha eski ana sürümlerle birlikte,V = F
ile birlikte gelen aygıtların bu HAL ile başlatılması gerekiyorsa, ancak daha eski bir ana sürümle başlatılabilirse. -
V = F
ile gelen aygıtların HAL'ı başlatması gerekmiyorsa,optional="true"
.
Örneğin, Android 9, 1.0 health@2.0
ana sürüm yükseltmesi olarak Health@2.0'ı sunar ve 1.0 HAL'ı kullanımdan kaldırır. Daha eski sürüm olan health@1.0
, Android 8.0 ve Android 8.1 ile başlatılan cihazlar için isteğe bağlıdır. Android 9 ile başlatılan cihazlar, kullanımdan kaldırılan 1.0 HAL'ı sağlamamalı ve bunun yerine yeni 2.0 sürümünü sağlamalıdır. compatibility_matrix.legacy.xml
, compatibility_matrix.1.xml
ve compatibility_matrix.2.xml
içinde:
<hal format="hidl" optional="true"> <name>android.hardware.health</name> <version>1.0</version> <interface> <name>IHealth</name> <instance>default</instance> </interface> </hal>
Bu girdi, compatibility_matrix.3.xml
compatibility_matrix.current.xml
yeniden adlandırılır) ve aşağıdaki gibi değiştirilir:
<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"
ilecompatibility_matrix.3.xml
içinde olduğundan, Android 9 ile başlatılan cihazlar 2.0 HAL ile birlikte gönderilmelidir. - 1.0 HAL,
compatibility_matrix.3.xml
içinde olmadığı için, Android 9 ile başlatılan cihazlar 1.0 HAL'ı sağlamamalıdır (bu HAL kullanımdan kaldırıldığı için). - 1.0 HAL, eski/1/2.xml'de (Android 9'un çalışabileceği daha eski FCM Sürümleri) isteğe bağlı bir HAL olarak mevcut olduğundan, Android 9 çerçevesi 1.0 HAL ile çalışmaya devam edebilir (bu, kaldırılmış bir HAL Sürümü olarak kabul edilmez). ).
Yeni FCM Sürümleri
Sistem bölümünde bir FCM Sürümü yayınlama işlemi, yalnızca Google tarafından bir AOSP sürümünün parçası olarak yapılır ve aşağıdaki adımları içerir:
-
compatibility_matrix.F.xml
compatibility_matrix.current.xml
olarak yeniden adlandırın. - Dosyanın
level="F"
özniteliğine sahip olduğundan emin olun. - Dosya adı değişikliğini yansıtmak için ilgili derleme kurallarını düzenleyin.
- Tüm cihazların kurulduğundan ve önyüklendiğinden emin olun.
- En son çerçeveyle (Nakliye API düzeyine göre) başlatılan cihazların Hedef FCM Sürüm
V >= F
sahip olduğundan emin olmak için VTS testlerini güncelleyin . - Dosyayı AOSP'ye yayınlayın.
Bu dosya yeniden adlandırılıp yayınlandıktan sonra değiştirilemez. Örneğin, Android 9 geliştirmesi sırasında, hardware/interfaces/compatibility_matrices/
için aşağıdaki dosyalar oluşturulmuştur :
-
compatibility_matrix.legacy.xml
-
compatibility_matrix.1.xml
-
compatibility_matrix.2.xml
-
compatibility_matrix.current.xml
Android 9 piyasaya sürüldüğünde, compatibility_matrix.3.xml
, compatibility_matrix.current.xml
olarak yeniden adlandırılır ve hardware/interfaces/compatibility_matrices/
için aşağıdaki dosyalar oluşturulur:
-
compatibility_matrix.legacy.xml
-
compatibility_matrix.1.xml
-
compatibility_matrix.2.xml
-
compatibility_matrix.3.xml
VTS testleri , Android 9 ile başlatılan cihazların Hedef FCM Sürümü >= 3'e sahip olmasını sağlar.
Ayrıca, ürün ve system_ext FCM'leri ayrıca her bir platform FCM sürümü için gereksinimleri listeleyebilir. Ürün ve system_ext bölümlerinde FCM sürümlerinin yayınlanması, sırasıyla bu görüntülerin 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ı hizada 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 aygıttaki gereksinimleri yansıtır.
HAL Sürümünün kullanımdan kaldırılması
Bir HAL Sürümünü kullanımdan kaldırmak bir geliştirici kararıdır (yani AOSP HAL'leri için kararı Google verir). Daha yüksek bir HAL sürümü (küçük veya büyük) yayınlandığında olabilir.
Bir cihaz HAL'sini kullanımdan kaldırma
Belirli bir aygıt HAL foo@xy
FCM Sürüm F
kullanımdan kaldırıldığında, bu, Hedef FCM Sürüm V = F
veya daha yenisiyle başlatılan herhangi bir aygıtın foo
sürüm xy
veya xy
daha eski herhangi bir sürümde uygulamaması gerektiği anlamına gelir. Kullanımdan kaldırılmış bir HAL sürümü, aygıtları yükseltmek için çerçeve tarafından hala desteklenmektedir.
FCM Sürümü F
yayınlandığında, belirli HAL Sürümü Hedef FCM Sürümü V = F
için en son FCM'de açıkça belirtilmemişse, bir HAL Sürümü foo@xy
kullanımdan kaldırılmış olarak kabul edilir. 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 gerektirir (majör veya minör);
- Çerçeve artık HAL gerektirmiyor.
Örneğin, Android 9'da health@2.0
, 1.0 HAL'ın ana sürüm yükseltmesi olarak sunulur. health@1.0
, compatibility_matrix.2.xml
compatibility_matrix.3.xml
compatibility_matrix.legacy.xml
compatibility_matrix.1.xml
Bu nedenle, health@1.0
kullanımdan kaldırılmış olarak kabul edilir.
HAL çerçevesini kullanımdan kaldırma
Belirli bir çerçeve HAL foo@xy
, FCM Sürüm F
kullanımdan kaldırıldığında, bu, Hedef FCM Sürüm V = F
veya daha yenisiyle başlatılan herhangi bir aygıtın, çerçevenin xy
sürümünde veya xy
daha eski herhangi bir sürümde foo
sağlamasını beklememesi gerektiği anlamına gelir. Cihazları yükseltmek için çerçeve tarafından hala kullanımdan kaldırılmış bir HAL sürümü sağlanmaktadır.
FCM sürüm F
yayınlandığında, çerçeve bildirimi foo@ foo@xy
için max-level=" F - 1 "
belirtiyorsa, HAL Sürümü foo@xy
kullanımdan kaldırıldığı kabul edilir. V = F
ile başlatılan aygıtlar için çerçeve HAL foo@xy
sağlamaz. V = F
ile başlatılan cihazlardaki cihaz uyumluluk matrisi, max-level < V
olan ç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 tanıtılan FCM sürümü olan 5
ayarlanmıştır. Bkz. Android 12 çerçeve bildirimi .
Hedef FCM Sürümleri için desteğin kaldırılması
Belirli bir Hedef FCM Sürümü V
aktif 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 ayarlı S F'sinden kaldırılır. Bu, aşağıdaki adımların her ikisi ile yapılır:
-
compatibility_matrix.V.xml
derleme kurallarından kaldırılması (böylece sistem görüntüsüne yüklenmemesi için) ve uygulanan veya kaldırılan işlevselliğe bağlı olan tüm kodların silinmesi. - Çerçeve bildiriminden
max-level
V
eşit veya daha düşük olan çerçeve HAL'lerini kaldırma ve kaldırılan çerçeve HAL'lerini uygulayan tüm kodları silme.
Belirli bir çerçeve sürümü için SF dışında bir hedef FCM Sürümü olan cihazlar, bu sürüme yükseltilemez.
HAL Sürüm durumu
Aşağıdaki bölümlerde (kronolojik sırayla) bir HAL Sürümünün olası durumları açıklanmaktadır.
yayınlanmamış
Aygıt HAL'leri için, bir HAL Sürümü genel ve donmuş uyumluluk matrislerinden herhangi birinde değilse, yayınlanmamış ve muhtemelen geliştirme aşamasında olarak kabul edilir. Bu, yalnızca compatibility_matrix.current.xml
içinde olan HAL Sürümlerini içerir. Örnekler:
- Android 9'un geliştirilmesi sırasında (
compatibility_matrix.3.xml
,compatibiility_matrix.current.xml
olarak yeniden adlandırılmadan önce),health@2.0
HAL, yayınlanmamış bir HAL olarak kabul edildi. -
teleportation@1.0
HAL, yayımlanmış herhangi bir uyumluluk matrisinde yer almaz ve aynı zamanda yayımlanmamış bir HAL olarak kabul edilir.
Çerçeve HAL'leri için, bir HAL sürümü yalnızca ilişkisiz bir geliştirme dalının çerçeve bildirimindeyse, yayınlanmamış olarak kabul edilir.
Yayınlanmış ve Güncel
Aygıt HAL'leri için, bir HAL Sürümü herhangi bir genel ve donmuş uyumluluk matrisindeyse, serbest bırakılır. Örneğin, FCM Sürüm 3 dondurulduktan sonra ( compatibiility_matrix.current.xml
, compatibility_matrix.3.xml
olarak yeniden adlandırıldığında) ve AOSP'de yayınlandıktan sonra, health@2.0
HAL, yayınlanmış ve geçerli bir HAL Sürümü olarak kabul edilir.
Bir HAL Sürümü, en yüksek FCM Sürümüne sahip ( compatibility_matrix.current.xml
hariç) genel ve donmuş bir uyumluluk matrisindeyse, HAL sürümü günceldir (yani kullanımdan kaldırılmamıştır). Örneğin, compatibility_matrix.3.xml
içinde var olmaya devam eden mevcut HAL Sürümleri ( compatibility_matrix.legacy.xml
içinde tanıtılan nfc@1.0
gibi), aynı zamanda yayımlanmış ve mevcut HAL Sürümleri olarak kabul edilir.
Çerçeve HAL'leri için, bir HAL sürümü, max-level
özniteliği olmadan veya (olağandışı olarak) bu dalda yayınlanan FCM sürümüne eşit veya ondan daha yüksek bir max-level
düzey olmadan en son yayınlanan dalın çerçeve bildirimindeyse, yayımlanmış olarak kabul edilir. ve mevcut HAL sürümü. Örneğin, HAL displayservice
hizmeti, Android 12'de yayınlanmıştır ve şu şekildedir: Android 12framework manifest
.
Yayınlandı ancak Kullanımdan Kaldırıldı
Aygıt HAL'leri için, yalnızca ve yalnızca aşağıdakilerin tümü karşılandığında bir HAL Sürümü kullanımdan kaldırılır:
- Serbest bırakılır.
- En yüksek FCM Sürümüne sahip olan genel ve donmuş uyumluluk matrisinde değildir.
- Çerçevenin hala desteklediği, genel ve donmuş 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 kullanımdan kaldırılmış olarak kabul edilir. - Power HAL, Android 9'da küçük bir sürüm yükseltmesine sahiptir, ancak
power@1.0
, halacompatibility_matrix.3.xml
içindedir.-
power@1.0
,compatibility_matrix.legacy.xml
,compatibility_matrix.1.xml
vecompatibility_matrix.2.xml
içindedir. -
compatibility_matrix.3.xml
,power@1.0-1
sahiptir.
-
Bu nedenle power@1.0
, Android 9'da günceldir, ancak kullanımdan kaldırılmış DEĞİLDİR .
Çerçeve HAL'leri için, bir HAL sürümü, bu dalda yayınlanan FCM sürümünden daha düşük bir max-level
özniteliğe sahip en son yayınlanan dalın çerçeve bildirimindeyse, yayınlanmış ancak kullanımdan kaldırılmış bir HAL sürümü olarak kabul edilir. Örneğin, HAL schedulerservice
hizmeti yayınlandı ancak Android 12'de kullanımdan kaldırıldı. Android 12framework manifest
.
Kaldırıldı
Aygıt HAL'leri için bir HAL Sürümü, yalnızca ve yalnızca aşağıdakiler doğruysa kaldırılır:
- Daha önce serbest bırakıldı.
- Çerçevenin desteklediği herhangi bir genel ve donmuş uyumluluk matrisinde değildir.
Genel, 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 olmadığından emin olmak için VTS testleri yazılabilir.
Çerçeve HAL'leri için, bir HAL sürümü yalnızca ve ancak aşağıdakiler karşılanırsa kaldırılır:
- Daha önce serbest bırakıldı.
- En son yayınlanan dalın herhangi bir çerçeve bildiriminde değildir.
Eski FCM'ler
Hedef FCM Sürümü mirası, Tiz olmayan tüm cihazlar için özel bir değerdir. Eski FCM, compatibility_matrix.legacy.xml
, çerçevenin eski cihazlarda (yani, Android 8.0'dan önce başlatılan cihazlarda) gereksinimlerini listeler.
Bu dosya, F
sürümüne sahip bir FCM için mevcutsa, cihaz bildiriminin bu dosyayla uyumlu olması koşuluyla, Tiz olmayan herhangi bir cihaz F
yükseltilebilir. Kaldırılması, diğer Hedef FCM Sürümleri için FCM'lerle aynı prosedürü izler (aktif 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ımlanan FCM sürümlerinin listesi hardware/interfaces/compatibility_matrices
altında bulunabilir.
Belirli bir Android sürümüyle yayınlanan FCM sürümünü bulmak için bkz. Level.h
.