Eşleşme kuralları

İki uyumluluk matrisi ve manifesti, mutabık kalınarak anlaşmaya varılan birlikte çalışabileceğine nasıl karar verebileceğinizi anlatacağım. Bu doğrulama çerçeve uyumluluk matrisi ile cihaz manifest dosyası ve çerçeve manifesti ile cihaz arasında uyumluluk matrisini dikkate alın.

Bu doğrulama, derleme sırasında OTA güncellemesinde yapılır paket oluşturma süresi, başlatma sırasında ve VTS uyumluluk testlerinde

Aşağıdaki bölümlerde, çeşitli bileşenlerden oluşur.

Çerçeve uyumluluk matrisi sürüm eşleşmeleri

Bir cihaz manifestini çerçeve uyumluluk matrisi ile eşleştirmek için: manifest.target-level tarafından belirtilen Gönderim FCM sürümü compatibility-matrix.level. Aksi takdirde hiçbir eşleşme yoktur.

libvintf ile çerçeve uyumluluk matrisi istendiğinde bu eşleşme libvintf cihaz manifestini açıp Kargo bilgilerini aldığı için her zaman başarılı olur FCM Sürümü'nü temel alır ve ilgili Kargo FCM Sürümündeki çerçeve uyumluluk matrisini (artı daha yüksek FCM Sürümlerindeki uyumluluk matrislerinden alınan isteğe bağlı HAL'ler).

HAL eşleşmeleri

HAL eşleşme kuralı,hal sahibi tarafından desteklendiği kabul edilen manifest dosyalarını uyumluluk matrisini dikkate alın.

HIDL ve yerel HAL'ler

HIDL ve yerel HAL'ler için eşleşme kuralları aşağıdaki gibidir.

  • Birden çok <hal> öğesi tek bir AND ile değerlendirilir ilişkilidir.
  • <hal> öğelerinde, öğeleri aşağıdaki şekilde işaretlemek için <hal optional="true"> bulunabilir gerekmez.
  • Aynı içinde birden çok <version> öğesi <hal> sahibi VEYA ilişkisine sahip olur. İki veya daha fazla değer belirtilirse yalnızca sürümlerden birinin uygulanması gerekir. (Aşağıdaki DRM örneğine bakın.)
  • Birden çok <instance> ve Aynı içinde <regex-instance> öğe <hal>, tek bir VE ilişkisiyle değerlendirilir. Bu durumda <hal> gereklidir. (Aşağıdaki <ahref="#drm">DRM örneğine bakın.)</ahref="#drm">

Örnek: Bir modül için başarılı HAL eşleşmesi

Sürüm 2.5'teki bir HAL için eşleşme kuralı aşağıdaki gibidir:

Matris Eşleşen Manifest
2.5 2,5-2.∞. Uyumluluk matrisinde 2.5, 2.5-5.
2.5-7 2,5-2.∞. Şunları gösterir:
.
  • 2.5, en düşük gereken sürümdür. Yani HAL'yi sağlayan bir manifesto 2.0-2.4 uyumlu değildir.
  • 2.7, istenebilecek maksimum sürümdür. Yani uyumluluk matrisi (çerçeve veya cihaz) tarafından 2,7'nin üzerinde. Eşleşen manifestin sahibi, 2.10 sürümünü sunmaya devam edebilir (örnek olarak) 2.7 istendiğinde Uyumluluk matrisi sahibi bilir yalnızca istenen hizmetin API sürüm 2.7 ile uyumlu olduğunu doğrulayın.
  • -7 yalnızca bilgilendirme amaçlıdır ve OTA güncelleme sürecini etkilemez.
ziyaret edin. Bu nedenle, manifest dosyasında 2.10 sürümünde HAL bulunan bir cihaz bunu belirten bir çerçeveyle 2.5-7 olarak tanımlanmıştır.

Örnek: DRM modülü için başarılı HAL eşleşmesi

Çerçeve uyumluluk matrisi, aşağıdaki sürüm bilgilerini belirtir DRM HAL için:

<hal>
    <name>android.hardware.drm
    <version>1.0</version>
    <version>3.1-2</version>
    <interface>
        <name>IDrmFactory</name>
        <instance>default</instance>
        <instance>specific</instance>
    </interface>
</hal>
<hal>
    <name>android.hardware.drm
    <version>2.0</version>
    <interface>
        <name>ICryptoFactory</name>
        <instance>default</instance>
        <regex-instance>[a-z]+/[0-9]+</regex-instance>
    </interface>
</hal>

Bir tedarikçi aşağıdaki örneklerden BİRİNİ uygulamalıdır; ikisinden biri

android.hardware.drm@1.x::IDrmFactory/default          // where x >= 0
android.hardware.drm@1.x::IDrmFactory/specific         // where x >= 0
. VEYA
android.hardware.drm@3.y::IDrmFactory/default          // where y >= 1
android.hardware.drm@3.y::IDrmFactory/specific         // where y >= 1

VE aşağıdaki örneklerin tümünü de uygulamalıdır:

android.hardware.drm@2.z::ICryptoFactory/default       // where z >= 0
android.hardware.drm@2.z::ICryptoFactory/${INSTANCE}
            // where z >= 0 and ${INSTANCE} matches [a-z]+/[0-9]+
            // e.g. legacy/0

AIDL HAL'ler

Android 11'den sonraki tüm Android sürümleri (Android hariç) 11) VINTF'de AIDL HAL'lerin sürümlerini destekler. AIDL HAL'ler için eşleşme kuralları, HIDL ve yerel HAL'lerin eşleşme kurallarına benzerdir; tek fark şudur: ana sürümler yoktur ve HAL örneği başına tam olarak bir sürüm mevcuttur (1 sürümü belirtilmemiş).

  • Birden çok <hal> öğesi tek bir AND ile değerlendirilir ilişkilidir.
  • <hal> öğelerinde, öğeleri aşağıdaki şekilde işaretlemek için <hal optional="true"> bulunabilir gerekmez.
  • Birden çok <instance> ve Aynı içinde <regex-instance> öğe <hal>, tek bir VE ilişkisiyle değerlendirilir. Bu durumda <hal> gereklidir. (Aşağıdaki <ahref="#vibrator">titreşim örneğine bakın.)</ahref="#vibrator">

Örnek: Bir modül için başarılı HAL eşleşmesi

Sürüm 5'teki bir HAL için eşleşme kuralı aşağıdaki gibidir:

Matris Eşleşen Manifest
5 5-∞. Uyumluluk matrisinde 5, 5-5.
5-7 5-∞. Şunları gösterir:
.
  • 5, en düşük gereken sürümdür. Yani HAL'yi sağlayan bir manifest dosyasıdır. 1-4 uyumlu değildir.
  • 7, istenebilecek maksimum sürümdür. Yani dosyanın sahibi uyumluluk matrisi (çerçeve veya cihaz) tarafından 7'den fazla. Eşleşen manifestin sahibi, sürüm 10'u sunmaya devam edebilir (örnek olarak) ekleyebilirsiniz. Uyumluluk matrisi sahibi bilir yalnızca istenen hizmetin API sürüm 7 ile uyumlu olduğundan emin olun.
  • -7 yalnızca bilgilendirme amaçlıdır ve OTA güncelleme sürecini etkilemez.
ziyaret edin. Bu nedenle, manifest dosyasında sürüm 10'da HAL bulunan bir cihaz bunu belirten bir çerçeveyle 5-7 olarak tanımlanmıştır.

Örnek: Birden fazla modül için başarılı HAL eşleşmesi

Çerçeve uyumluluk matrisi, aşağıdaki sürüm bilgilerini belirtir (titreşim ve kamera HAL'leri için):

<hal>
    <name>android.hardware.vibrator
    <version>1-2</version>
    <interface>
        <name>IVibrator</name>
        <instance>default</instance>
        <instance>specific</instance>
    </interface>
</hal>
<hal>
    <name>android.hardware.camera
    <version>5</version>
    <interface>
        <name>ICamera</name>
        <instance>default</instance>
        <regex-instance>[a-z]+/[0-9]+</regex-instance>
    </interface>
</hal>

Bir tedarikçi aşağıdaki örneklerin tümünü uygulamalıdır:

android.hardware.vibrator.IVibrator/default     // version >= 1
android.hardware.vibrator.IVibrator/specific    // version >= 1
android.hardware.camera.ICamera/default         // version >= 5
android.hardware.camera.ICamera/${INSTANCE}
            // with version >= 5, where ${INSTANCE} matches [a-z]+/[0-9]+
            // e.g. legacy/0

Çekirdek eşleşmeleri

Çerçeve uyumluluk matrisinin <kernel> bölümü , cihazdaki Linux çekirdeği için çerçevenin gereksinimlerini açıklar. Bu karşılaştırılmasının amaçlandığı bilgi cihazın VINTF nesnesi tarafından bildirilen çekirdek hakkında

Çekirdek dallarını eşleştir

Her çekirdek dalı soneki (örneğin, 5.4-r) benzersiz bir çekirdek FCM sürümü (örneğin, 5). Eşleme, sürüm harfleri arasındaki eşlemeyle aynıdır. (örneğin, R) ve FCM sürümleri (örneğin, 5).

VTS testleri, cihazın cihaz manifestini, /vendor/etc/vintf/manifest.xml. aşağıdakilerden biri doğruysa:

  • Çekirdek FCM sürümü, hedef FCM sürümünden farklı. Örneğin, yukarıda belirtilen cihazda hedef FCM sürüm 4 var ve çekirdek FCM sürümü 5'tir (çekirdek dal soneki r).
  • Çekirdek FCM sürümü, 5'ten büyük veya 5'e eşit (çekirdek dalı soneki r).
ziyaret edin.

VTS testleri, çekirdek FCM sürümü belirtilirse çekirdek FCM sürümünün cihaz manifestindeki hedef FCM sürümünden daha büyük veya bu sürüme eşit olmalıdır.

Örnek: Çekirdek dalını belirleme

Cihazda FCM sürüm 4 (Android 10'da kullanıma sunulan) hedeflendiyse ancak çekirdeği 4.19-r dalından çalıştırıyorsa cihaz manifestinde aşağıdaki bilgiler belirtilmelidir:

<manifest version="2.0" type="device" target-level="4">
   <kernel target-level="5" />
</manifest>

VINTF nesnesi, çekirdek uyumluluğunu 4.19-r çekirdeğinin şartlarına göre kontrol eder dalına gelecektir. Bu gereksinimler, kernel/configs/r/android-4.19 bulabilirsiniz.

Örnek: GKI için çekirdek dalını belirleme

Cihaz, Genel Kernel Görüntüsü (GKI) ve /proc/version şudur:

5.4.42-android12-0-00544-ged21d463f856

Ardından VINTF nesnesi, çekirdek sürümünden Android sürümünü alır ve bunu belirlemek için çekirdek FCM sürümü. Bu örnekte android12, çekirdek FCM sürüm 6 anlamına gelir (Android 12'de yayınlandı).

Çekirdek sürüm dizesinin nasıl ayrıştırıldığıyla ilgili ayrıntılar için GKI sürümleri.

Çekirdek sürümlerini eşleştirin

Bir matris, her biri aşağıdaki özelliklere sahip birden çok <kernel> bölümü içerebilir: Şu biçimi kullanan farklı bir version özelliği:

${ver}.${major_rev}.${kernel_minor_rev}

VINTF nesnesi,<kernel> Eşleşen FCM sürümüne sahip FCM, aynı sürümle Cihaz çekirdeği olarak ${ver} ve ${major_rev} (ör. version="${ver}.${major_rev}.${matrix_minor_rev}"); diğer bölümler yok sayılır. Ayrıca, çekirdekteki küçük düzeltme bir değer olmalıdır yakınlık matrisinden (${kernel_minor_rev} >= ${matrix_minor_rev};). <kernel> bölümü karşılanmıyorsa bu şartlarda uyuşmazlık söz konusu.

Örnek: Eşleştirme koşullarını seçme

/system/etc/vintf bölgesindeki FCM'lerin aşağıdaki şartları yerine getirin (üstbilgi ve alt bilgi etiketleri atlanır):

<!-- compatibility_matrix.3.xml -->
<kernel version="4.4.107" level="3"/>
<!-- See kernel/configs/p/android-4.4/ for 4.4-p requirements -->
<kernel version="4.9.84" level="3"/>
<!-- See kernel/configs/p/android-4.9/ for 4.9-p requirements -->
<kernel version="4.14.42" level="3"/>
<!-- See kernel/configs/p/android-4.14/ for 4.14-p requirements -->

<!-- compatibility_matrix.4.xml -->
<kernel version="4.9.165" level="4"/>
<!-- See kernel/configs/q/android-4.9/ for 4.9-q requirements -->
<kernel version="4.14.105" level="4"/>
<!-- See kernel/configs/q/android-4.14/ for 4.14-q requirements -->
<kernel version="4.19.42" level="4"/>
<!-- See kernel/configs/q/android-4.19/ for 4.19-q requirements -->

<!-- compatibility_matrix.5.xml -->
<kernel version="4.14.180" level="5"/>
<!-- See kernel/configs/r/android-4.14/ for 4.14-r requirements -->
<kernel version="4.19.123" level="5"/>
<!-- See kernel/configs/r/android-4.19/ for 4.19-r requirements -->
<kernel version="5.4.41" level="5"/>
<!-- See kernel/configs/r/android-5.4/ for 5.4-r requirements -->

Hedef FCM sürümü, çekirdek FCM sürümü ve çekirdek sürümü birlikte çekirdeği seçer. gereklilikler:

Hedef FCM sürümüKernel FCM sürümüÇekirdek sürümüŞununla eşleştir:
3 (K)belirtilmedi4.4.106 Eşleşme yok (alt sürüm uyuşmazlığı)
3 (K)belirtilmedi4.4.107 4.4-p
3 (K)belirtilmedi4.19.42 4.19-q (aşağıdaki nota bakın)
3 (K)belirtilmedi5.4.41 5.4-r (aşağıdaki nota bakın)
3 (K)3 (K) 4.4.107 4.4-p
3 (K)3 (K) 4.19.42 Eşleşme yok (4.19-p çekirdek dalı)
3 (K)4 (Ç) 4.19.42 4.19-q
4 (Ç)belirtilmedi4.4.107 Eşleşme yok (4.4-q çekirdek dalı)
4 (Ç)belirtilmedi4.9.165 4.9-q
4 (Ç)belirtilmedi5.4.41 5.4-r (aşağıdaki nota bakın)
4 (Ç)4 (Ç) 4.9.165 4.9-q
4 (Ç)4 (Ç) 5.4.41 Eşleşme yok (5.4-q çekirdek dalı)
4 (Ç)5 (Sağ) 4.14.1054.14-r
4 (Ç)5 (Sağ) 5.4.41 5.4-r
5 (Sağ)belirtilmediherhangi VTS başarısız (Hedef FCM sürüm 5 için çekirdek FCM sürümü belirtilmelidir)
5 (Sağ)4 (Ç) herhangi VTS başarısız oldu (çekirdek FCM sürümü < hedef FCM sürümü)
5 (Sağ)5 (Sağ) 4.14.1804.14-r

Çekirdek yapılandırmalarını eşleştirme

<kernel> bölümü eşleşirse işlem devam eder. config öğelerini şununla eşleştirmeye çalışarak: /proc/config.gz. Uyumluluktaki her yapılandırma öğesi için yapılandırmanın doğru olup olmadığını görmek için /proc/config.gz devam eder. Bir yapılandırma öğesi uyumlulukta n olarak ayarlandığında eşleşen <kernel> bölümü için matris, mevcut olmamalıdır başlangıç fiyatı: /proc/config.gz. Son olarak, uyumluluk matrisi, /proc/config.gz içinde mevcut olabilir veya olmayabilir.

Örnek: Çekirdek yapılandırmalarını eşleştirme

  • <value type="string">bar</value> eşleşme "bar". Alıntılar uyumluluk matrisinde atlanır ancak mevcut /proc/config.gz içinde.
  • <value type="int">4096</value> eşleşme 4096 veya 0x1000 ya da 0X1000.
  • <value type="int">0x1000</value> eşleşme 4096 veya 0x1000 ya da 0X1000.
  • <value type="int">0X1000</value> eşleşme 4096 veya 0x1000 ya da 0X1000.
  • <value type="tristate">y</value> eşleşme y.
  • <value type="tristate">m</value> eşleşme m.
  • <value type="tristate">n</value>, yapılandırma anlamına gelir öğe /proc/config.gz içinde OLMAMALIDIR.
  • <value type="range">1-0x3</value> eşleşme 1, 2 veya 3 ya da onaltılık eşdeğeri.

Örnek: Başarılı çekirdek eşleşmesi

FCM sürüm 1 ile çerçeve uyumluluk matrisi aşağıdaki çekirdek bilgilerini içerir:

<kernel version="4.14.42">
   <config>
      <key>CONFIG_TRI</key>
      <value type="tristate">y</value>
   </config>
   <config>
      <key>CONFIG_NOEXIST</key>
      <value type="tristate">n</value>
   </config>
   <config>
      <key>CONFIG_DEC</key>
      <value type="int">4096</value>
   </config>
   <config>
      <key>CONFIG_HEX</key>
      <value type="int">0XDEAD</value>
   </config>
   <config>
      <key>CONFIG_STR</key>
      <value type="string">str</value>
   </config>
   <config>
      <key>CONFIG_EMPTY</key>
      <value type="string"></value>
   </config>
</kernel>

Önce çekirdek dalı eşleştirilir. Çekirdek dalı, cihaz manifest dosyasında belirtilmiştir. manifest.kernel.target-level içinde varsayılan olarak manifest.level değerine ayarlanır. değer belirtilmemişse. Cihaz manifestindeki çekirdek dalı ise:

  • değeri 1 ise sonraki adıma geçer ve çekirdek sürümünü kontrol eder.
  • 2 ise matrisle eşleşmez. VINTF nesneleri, matristen çekirdek gereksinimlerini okur: FCM sürüm 2'yi kullanın.

Ardından, çekirdek sürümü eşleştirilir. uname() içindeki bir cihaz raporlar:

  • 4.9.84 (<kernel version="4.9.x"> ile ayrı bir çekirdek bölümü olmadığı sürece matrisle eşleşmez; burada x <= 84)
  • 4.14.41 (matrisle eşleşmez, version değerinden küçük)
  • 4.14.42 (matrisle eşleştir)
  • 4.14.43 (matrisle eşleştir)
  • 4.1.22 (ayrı bir çekirdek bölümü olmadığı sürece matrisle eşleşmez. x <= 22; <kernel version="4.1.x"> ile)

Uygun <kernel> bölümü seçildikten sonra, değeri n dışında her <config> öğesi için ilgili girişin /proc/config.gz üzerinde mevcut olmasını bekleyecektir; n değerine sahip her <config> öğe için ilgili giriş /proc/config.gz içinde bulunmayacaktır. Biz <value> içeriğinin, sonraki metinle tam olarak eşleşmesini bekle en fazla yeni satır karakterine kadar eşittir işareti (tırnak işaretleri dahil) # (baştaki ve sondaki boşluklar kısaltıldı).

Aşağıdaki çekirdek yapılandırması, başarılı bir eşleme örneğidir:

# comments don't matter
CONFIG_TRI=y
# CONFIG_NOEXIST shouldn't exist
CONFIG_DEC = 4096 # trailing comments and whitespaces are fine
CONFIG_HEX=57005  # 0XDEAD == 57005
CONFIG_STR="str"
CONFIG_EMPTY=""   # empty string must have quotes
CONFIG_EXTRA="extra config items are fine too"

Aşağıdaki çekirdek yapılandırması, başarısız bir eşleşme örneğidir:

CONFIG_TRI="y"   # mismatch: quotes
CONFIG_NOEXIST=y # mismatch: CONFIG_NOEXIST exists
CONFIG_HEX=0x0   # mismatch; value doesn't match
CONFIG_DEC=""    # mismatch; type mismatch (expect int)
CONFIG_EMPTY=1   # mismatch; expects ""
# mismatch: CONFIG_STR is missing

SE politikası eşleşiyor

SE politikası için aşağıdaki eşleşmeler gereklidir:

  • <sepolicy-version>, kapalı bir minör aralığını tanımlar her ana sürüm için geçerli. Cihaz tarafından bildirilen sepolicy sürümü çerçeveyle uyumlu olması için bu aralıklardan birinde olması gerekir. Eşleşme kuralları HAL sürümlerine benzerdir; sepolicy sürümü de aralığın minimum sürümüne eşit veya daha yüksek. Maksimum sürüm: yalnızca bilgilendirme amaçlıdır.
  • <kernel-sepolicy-version> (ör. policydb sürümü). Zorunluluk Cihaz tarafından bildirilen security_policyvers() değerinden düşük olmalıdır.

Örnek: Başarılı SE politika eşleşmesi

Çerçeve uyumluluk matrisi aşağıdaki sepolicy bilgilerini belirtir:

<sepolicy>
    <kernel-sepolicy-version>30</kernel-sepolicy-version>
    <sepolicy-version>25.0</sepolicy-version>
    <sepolicy-version>26.0-3</sepolicy-version>
</sepolicy>

Cihazda:

  • security_policyvers() tarafından döndürülen değer daha büyük olmalıdır veya eşittir. Aksi takdirde eşleşme olmaz. Örnek:
    • Bir cihaz 29 değerini döndürürse bu eşleşme değildir.
    • Bir cihaz 31 değerini döndürürse bu bir eşleşmedir.
  • SE politikası sürümü 25.0-∞ veya 26.0-∞ değerlerinden biri olmalıdır. Aksi takdirde eşleşmesini sağlar. ("26.0" ifadesinden sonraki "-3" değeri bilgi verme amaçlıdır.)

AVB sürümü eşleşiyor

AVB sürümü bir MAJOR sürümü ve MINOR sürümünü şu biçimde içerir: MAJOR.MINOR olarak (ör. 1.0, 2.1). Ayrıntılı bilgi için Sürüm oluşturma ve Uyumluluk. AVB sürümü aşağıdaki sistem özelliklerine sahiptir:

  • ro.boot.vbmeta.avb_version, libavb sürümüdür bootloader'da
  • ro.boot.avb_version, şurada libavb versiyonudur: Android OS (init/fs_mgr)

Sistem özelliği, yalnızca karşılık gelen libavb kullanıldığında görünür kullanarak (ve "Tamam" sonucunu döndürür). Doğrulama başarısız olursa eksik (veya hiç doğrulama gerçekleşmedi).

Uyumluluk eşleşmesi aşağıdakileri karşılaştırır:

  • sysprop ro.boot.vbmeta.avb_version Çerçeve uyumluluk matrisinden avb.vbmeta-version;
    • ro.boot.vbmeta.avb_version.MAJOR == avb.vbmeta-version.MAJOR
    • ro.boot.vbmeta.avb_version.MINOR >= avb.vbmeta-version.MINOR
  • sysprop ro.boot.avb_version Çerçeve uyumluluk matrisinden avb.vbmeta-version.
    • ro.boot.avb_version.MAJOR == avb.vbmeta-version.MAJOR
    • ro.boot.avb_version.MINOR >= avb.vbmeta-version.MINOR

Bootloader veya Android OS, libavb uygulamasının iki kopyasını içerebilir. cihazları yeni sürüme geçirmek ve başlatmak için her biri farklı MAJOR sürümüne sahip kitaplıklar. cihazlar. Bu durumda, aynı imzasız sistem görüntüsü paylaşılabilir ancak nihai imzalı sistem görüntüleri farklıdır ( avb.vbmeta-version):

Şekil 1. AVB sürümü eşleşiyor (/sistem P, diğer tüm bölümler O'dur).



Şekil 2. AVB sürümü eşleşiyor (tüm bölümler P'dir).

Örnek: Başarılı AVB sürümü eşleşmesi

Çerçeve uyumluluk matrisi aşağıdaki AVB bilgilerini belirtir:

<avb>
    <vbmeta-version>2.1</vbmeta-version>
</avb>

Cihazda:

ro.boot.avb_version              == 1.0 &&
ro.boot.vbmeta.avb_version       == 2.1  mismatch 
ro.boot.avb_version              == 2.1 &&
ro.boot.vbmeta.avb_version       == 3.0  mismatch 
ro.boot.avb_version              == 2.1 &&
ro.boot.vbmeta.avb_version       == 2.3  match 
ro.boot.avb_version              == 2.3 &&
ro.boot.vbmeta.avb_version       == 2.1  match 

OTA sırasında AVB sürümünü eşleştir

Android 9 veya önceki sürümlerle başlatılan cihazlarda Android 10, AVB Çerçeve uyumluluk matrisindeki sürüm gereksinimleri mevcut AVB ile eşleştirilir sürümü yüklü olmalıdır. OTA sırasında AVB sürümünün ana sürüm yükseltmesi varsa (örneğin, 0,0'dan 1,0'a) karşılaştırıldığında, OTA'daki VINTF uyumluluğu kontrolü, oluşturur.

Bir OEM, sorunu azaltmak için OTA paketine sahte bir AVB sürümü yerleştirebilir. (compatibility.zip) tuşuna basın. Bunu yapmak için:

  1. Android 9 kaynak ağacına aşağıdaki CL'leri satın alın:
  2. Cihaz için BOARD_OTA_FRAMEWORK_VBMETA_VERSION_OVERRIDE tanımlayın. Değeri OTA'dan önceki AVB sürümüne, yani OTA'dan önceki AVB sürümüne eşit olmalıdır. kullanıma sunuldu.
  3. OTA paketini yeniden derleyin.

Bu değişiklikler otomatik olarak BOARD_OTA_FRAMEWORK_VBMETA_VERSION_OVERRIDE: Aşağıdaki dosyalarda compatibility-matrix.avb.vbmeta-version:

  • /system/compatibility_matrix.xml. Cihazdaki (Android 9'da kullanılmaz)
  • OTA paketinde compatibility.zip içinde system_matrix.xml

Bu değişiklikler, şunlar dahil diğer çerçeve uyumluluk matrislerini etkilemez: /system/etc/vintf/compatibility_matrix.xml OTA'dan sonra, Bunun yerine, uyumluluk kontrolleri için /system/etc/vintf/compatibility_matrix.xml kullanılır.

VNDK sürümü eşleşiyor

Cihaz uyumluluk matrisi, gerekli VNDK sürümünü compatibility-matrix.vendor-ndk.version Cihaz uyumluluk matrisinde <vendor-ndk> etiketi yok; hayır bir eşleşme olarak değerlendirilir.

Cihaz uyumluluk matrisinde <vendor-ndk> varsa etiketi, eşleşen bir <vendor-ndk> girişi <version>, VNDK tedarikçi firma anlık görüntüleri grubundan yapıldı (ör. çerçeve manifest'indeki çerçeve tarafından sağlanır) Böyle bir giriş yoksa hiçbir eşleşme yoktur.

Böyle bir giriş varsa cihazda numaralandırılmış kitaplık grubu uyumluluk matrisi, çerçeve manifestini; Aksi takdirde giriş, eşleşme olarak kabul edilmez.

  • Özel bir durum olarak, cihazda hiçbir kitaplık belirtilmemişse giriş her zaman eşleşme olarak kabul edilir, çünkü boş herhangi bir kümenin alt kümesidir.

Örnek: Başarılı VNDK sürümü eşleşmesi

Cihaz uyumluluk matrisi, VNDK'da aşağıdaki şartı belirtiyorsa:

<!-- Example Device Compatibility Matrix -->
<vendor-ndk>
    <version>27</version>
    <library>libjpeg.so</library>
    <library>libbase.so</library>
</vendor-ndk>

Çerçeve manifestinde, yalnızca 27 sürümüne sahip giriş dikkate alınır.

<!-- Framework Manifest Example A -->
<vendor-ndk>
    <version>27</version>
    <library>libjpeg.so</library>
    <library>libbase.so</library>
    <library>libfoo.so</library>
</vendor-ndk>

VNDK sürüm 27, çerçeve manifestinde yer aldığından A örneği bir eşleşmedir. ve {libjpeg.so, libbase.so, libfoo.so} ⊇ {libjpeg.so, libbase.so}.

<!-- Framework Manifest Example B -->
<vendor-ndk>
    <version>26</version>
    <library>libjpeg.so</library>
    <library>libbase.so</library>
</vendor-ndk>
<vendor-ndk>
    <version>27</version>
    <library>libbase.so</library>
</vendor-ndk>

B örneği eşleşme değildir. VNDK sürüm 27 çerçevede olsa da manifesto dosyası libjpeg.so, şu çerçeve tarafından desteklenmez: anlık görüntü. VNDK sürüm 26 yoksayılır.

Sistem SDK sürümü eşleşiyor

Cihaz uyumluluk matrisi, gerekli bir dizi gerekli Sistem SDK'sını tanımlar compatibility-matrix.system-sdk.version dilindedir. Bir yalnızca set, bildirilen sistem SDK'sı sürümlerinin bir alt kümesiyse eşleştir manifest.system-sdk.version ile değiştirebilirsiniz.

  • Özel bir durum olarak, cihazda herhangi bir Sistem SDK'sı sürümü belirtilmemişse her zaman eşleşme kabul edilir, çünkü boş herhangi bir kümenin alt kümesidir.

Örnek: Başarılı Sistem SDK sürümü eşleşmesi

Cihaz uyumluluk matrisi, Sistem'de aşağıdaki gereksinimi belirtiyorsa SDK:

<!-- Example Device Compatibility Matrix -->
<system-sdk>
    <version>26</version>
    <version>27</version>
</system-sdk>

Ardından, çerçevenin eşleşmesi için Sistem SDK'sı 26 ve 27 sürümlerini sağlaması gerekir.

<!-- Framework Manifest Example A -->
<system-sdk>
    <version>26</version>
    <version>27</version>
</system-sdk>

A örneği bir eşleşmedir.

<!-- Framework Manifest Example B -->
<system-sdk>
    <version>26</version>
    <version>27</version>
    <version>28</version>
</system-sdk>

B örneği bir eşleşmedir.

<!-- Framework Manifest Example C -->
<system-sdk>
    <version>26</version>
</system-sdk>

Sistem SDK 27 sürümü sağlanmadığı için C örneği eşleşmez.