Dinamik Sistem Güncellemesi

Dinamik Sistem Güncellemeleri (DSU), mevcut sistem görüntüsünü bozma riski olmadan kullanıcıların internetten indirip deneyebilecekleri bir Android sistem görüntüsü oluşturmanıza olanak tanır. Bu belgede DSU'nun nasıl destekleneceği açıklanmaktadır.

Çekirdek gereksinimleri

Çekirdek gereksinimleri için bkz . Dinamik Bölümlerin Uygulanması .

Ayrıca DSU, Android sistem görüntüsünü doğrulamak için cihaz eşleyici-verity (dm-verity) çekirdek özelliğine güvenir. Bu nedenle aşağıdaki çekirdek yapılandırmalarını etkinleştirmelisiniz:

  • CONFIG_DM_VERITY=y
  • CONFIG_DM_VERITY_FEC=y

Bölüm gereksinimleri

Android 11'den başlayarak DSU, /data bölümünün F2FS veya ext4 dosya sistemini kullanmasını gerektirir. F2FS daha iyi performans sağlar ve önerilir, ancak farkın önemsiz olması gerekir.

Pixel cihazda dinamik sistem güncellemesinin ne kadar sürdüğüne dair bazı örnekleri burada bulabilirsiniz:

  • F2FS'yi kullanma:
    • 109s, 8G kullanıcısı, 867M sistemi, dosya sistemi türü: F2FS: şifreleme=aes-256-xts:aes-256-cts
    • 104s, 8G kullanıcısı, 867M sistemi, dosya sistemi türü: F2FS: şifreleme=ice
  • Ext4'ü kullanma:
    • 135s, 8G kullanıcısı, 867M sistemi, dosya sistemi türü: ext4: şifreleme=aes-256-xts:aes-256-cts

Platformunuzda çok daha uzun sürüyorsa, bağlama bayrağının "senkronizasyon" yazmayı sağlayan herhangi bir bayrak içerip içermediğini kontrol etmek isteyebilirsiniz veya daha iyi performans elde etmek için açıkça bir "async" bayrağı belirtebilirsiniz.

Yüklenen görüntülerle ilgili verileri depolamak için metadata bölümü (16 MB veya daha büyük) gereklidir. İlk aşama montajı sırasında monte edilmelidir.

userdata bölümü F2FS veya ext4 dosya sistemini kullanmalıdır. F2FS kullanırken, Android ortak çekirdeğinde bulunan F2FS ile ilgili tüm yamaları ekleyin.

DSU, çekirdek/ortak 4.9 ile geliştirilmiş ve test edilmiştir. Bu özellik için çekirdek 4.9 ve üzeri kullanılması tavsiye edilir.

Satıcı HAL davranışı

Dokumacı HAL

Dokumacı HAL, kullanıcı anahtarlarının saklanması için sabit sayıda yuva sağlar. DSU iki ekstra anahtar yuvası kullanır. Bir OEM'in dokumacı HAL'si varsa, genel sistem görüntüsü (GSI) ve ana bilgisayar görüntüsü için yeterli yuvaya sahip olması gerekir.

Kapı Bekçisi HAL

Gatekeeper HAL'nin büyük USER_ID değerlerini desteklemesi gerekir çünkü GSI, UID'leri HAL'ye +1000000 oranında kaydırır.

Önyüklemeyi doğrula

Doğrulanmış önyüklemeyi devre dışı bırakmadan Geliştirici GSI Görüntülerinin KİLİTLİ durumda başlatılmasını desteklemek istiyorsanız, device/<device_name>/device.mk dosyasına aşağıdaki satırı ekleyerek Geliştirici GSI anahtarlarını ekleyin:

$(call inherit-product, $(SRC_TARGET_DIR)/product/developer_gsi_keys.mk)

Geri alma koruması

DSU kullanırken indirilen Android sistem görüntüsünün cihazdaki mevcut sistem görüntüsünden daha yeni olması gerekir. Bu, her iki sistem görüntüsünün Android Doğrulanmış Önyükleme (AVB) AVB özellik tanımlayıcısındaki güvenlik yaması düzeylerini karşılaştırarak yapılır: Prop: com.android.build.system.security_patch -> '2019-04-05' .

AVB kullanmayan cihazlar için, geçerli sistem görüntüsünün güvenlik yaması düzeyini çekirdek cmdline'ına veya önyükleyici ile bootconfig'e yerleştirin: androidboot.system.security_patch=2019-04-05 .

Donanım Gereksinimleri

Bir DSU örneğini başlattığınızda iki geçici dosya ayrılır:

  • GSI.img (1~1,5 G) depolamak için mantıksal bir bölüm
  • GSI'yi çalıştırmak için sanal alan olarak 8 GB boş /data bölümü

Bir DSU örneğini başlatmadan önce en az 10 GB boş alan ayırmanızı öneririz. DSU ayrıca bir SD karttan tahsisi de destekler. Bir SD kart mevcut olduğunda, tahsis için en yüksek önceliğe sahiptir. SD kart desteği, yeterli dahili depolamaya sahip olmayan, düşük güçlü cihazlar için kritik öneme sahiptir. Bir SD kart mevcut olduğunda, bunun benimsenmediğinden emin olun. DSU, benimsenen SD kartları desteklemez.

Kullanılabilir ön uçlar

DSU'yu adb , bir OEM uygulaması veya tek tıklamayla DSU yükleyiciyi (Android 11 veya sonraki sürümlerde) kullanarak başlatabilirsiniz.

Adb kullanarak DSU'yu başlatın

DSU'yu adb kullanarak başlatmak için şu komutları girin:

$ simg2img out/target/product/.../system.img system.raw
$ gzip -c system.raw > system.raw.gz
$ adb push system.raw.gz /storage/emulated/0/Download
$ adb shell am start-activity \
-n com.android.dynsystem/com.android.dynsystem.VerificationActivity  \
-a android.os.image.action.START_INSTALL    \
-d file:///storage/emulated/0/Download/system.raw.gz  \
--el KEY_SYSTEM_SIZE $(du -b system.raw|cut -f1)  \
--el KEY_USERDATA_SIZE 8589934592

Bir uygulama kullanarak DSU'yu başlatın

DSU'ya ana giriş noktası android.os.image.DynamicSystemClient.java API'sidir:

public class DynamicSystemClient {


...
...

     /**
     * Start installing DynamicSystem from URL with default userdata size.
     *
     * @param systemUrl A network URL or a file URL to system image.
     * @param systemSize size of system image.
     */
    public void start(String systemUrl, long systemSize) {
        start(systemUrl, systemSize, DEFAULT_USERDATA_SIZE);
    }

Bu uygulamayı cihaza paketlemeniz/önceden yüklemeniz gerekir. DynamicSystemClient bir sistem API'si olduğundan, uygulamayı normal SDK API ile oluşturamazsınız ve Google Play'de yayınlayamazsınız. Bu uygulamanın amacı:

  1. Satıcı tanımlı bir şemayla bir resim listesi ve karşılık gelen URL'yi getirin.
  2. Listedeki görselleri cihazla eşleştirin ve kullanıcının seçmesi için uyumlu görselleri gösterin.
  3. DynamicSystemClient.start şu şekilde çağırın:

    DynamicSystemClient aot = new DynamicSystemClient(...)
       aot.start(
            ...URL of the selected image...,
            ...uncompressed size of the selected image...);
    
    

URL, aşağıdaki komutlarla oluşturabileceğiniz gzip'li, seyrek olmayan bir sistem görüntü dosyasına işaret eder:

$ simg2img ${OUT}/system.img ${OUT}/system.raw
$ gzip ${OUT}/system.raw
$ ls ${OUT}/system.raw.gz

Dosya adı şu formatta olmalıdır:

<android version>.<lunch name>.<user defined title>.raw.gz

Örnekler:

  • o.aosp_taimen-userdebug.2018dev.raw.gz
  • p.aosp_taimen-userdebug.2018dev.raw.gz

Tek tıklamayla DSU yükleyici

Android 11, geliştirici ayarlarında bir ön uç olan tek tıklamayla DSU yükleyicisini sunar.

DSU yükleyicisini başlatma

Şekil 1. DSU yükleyicisini başlatma

Geliştirici DSU Yükleyici düğmesini tıklattığında, web'den önceden yapılandırılmış bir DSU JSON tanımlayıcısını getirir ve uygulanabilir tüm görüntüleri kayan menüde görüntüler. DSU kurulumunu başlatmak için bir görüntü seçtiğinizde ilerleme bildirim çubuğunda gösterilir.

DSU görüntüsü yükleme ilerlemesi

Şekil 2. DSU görüntüsü yükleme ilerlemesi

Varsayılan olarak DSU yükleyicisi, GSI görüntülerini içeren bir JSON tanımlayıcısını yükler. Aşağıdaki bölümlerde OEM imzalı DSU paketlerinin nasıl oluşturulacağı ve bunların DSU yükleyicisinden nasıl yükleneceği gösterilmektedir.

Özellik bayrağı

DSU özelliği, settings_dynamic_android özellik bayrağının altındadır. DSU'yu kullanmadan önce ilgili özellik bayrağının etkinleştirildiğinden emin olun.

Özellik bayrağını etkinleştirme.

Şekil 3. Özellik bayrağının etkinleştirilmesi

Özellik bayrağı kullanıcı arayüzü, kullanıcı yapısını çalıştıran bir cihazda kullanılamayabilir. Bu durumda bunun yerine adb komutunu kullanın:

$ adb shell setprop persist.sys.fflag.override.settings_dynamic_system 1

GCE'deki satıcı ana bilgisayar sistemi görüntüleri (isteğe bağlı)

Sistem görüntüleri için olası depolama konumlarından biri Google Compute Engine (GCE) paketidir. Sürüm yöneticisi, yayımlanan sistem görüntüsünü eklemek/silmek/değiştirmek için GCP depolama konsolunu kullanır.

Resimler burada gösterildiği gibi genel erişime açık olmalıdır:

GCE'de genel erişim

Şekil 4. GCE'de kamu erişimi

Bir öğeyi herkese açık hale getirme prosedürü Google Cloud belgelerinde mevcuttur.

ZIP dosyasında çok bölümlü DSU

Android 11'den itibaren DSU'nun birden fazla bölümü olabilir. Örneğin, system.img ek olarak bir product.img içerebilir. Aygıt önyüklendiğinde, ilk aşama init , yüklü DSU bölümlerini algılar ve yüklü DSU etkinleştirildiğinde aygıttaki bölümü geçici olarak değiştirir. DSU paketi, cihazda karşılık gelen bir bölüme sahip olmayan bir bölüm içerebilir.

Birden çok bölüm içeren DSU işlemi

Şekil 5. Birden fazla bölüm içeren DSU işlemi

OEM imzalı DSU

Cihazda çalışan tüm görsellerin cihaz üreticisi tarafından yetkilendirildiğinden emin olmak için DSU paketindeki tüm görsellerin imzalanması gerekir. Örneğin, aşağıdaki gibi iki bölüm görüntüsü içeren bir DSU paketinin olduğunu varsayalım:

dsu.zip {
    - system.img
    - product.img
}

Hem system.img hem de product.img ZIP dosyasına yerleştirilmeden önce OEM anahtarı tarafından imzalanması gerekir. Yaygın uygulama, gizli anahtarın paketi imzalamak için, genel anahtarın ise onu doğrulamak için kullanıldığı RSA gibi asimetrik bir algoritma kullanmaktır. İlk aşamadaki ramdisk, /avb/*.avbpubkey gibi ayrıştırma ortak anahtarını içermelidir. Cihaz zaten AVB'yi benimsemişse mevcut imzalama prosedürü yeterli olacaktır. Aşağıdaki bölümlerde imzalama süreci gösterilmekte ve DSU paketindeki görüntüleri doğrulamak için kullanılan AVB ortak anahtarının yerleşimi vurgulanmaktadır.

DSU JSON tanımlayıcısı

DSU JSON tanımlayıcısı DSU paketlerini açıklar. İki temel öğeyi destekler. İlk olarak, include ilkel ek JSON tanımlayıcılarını içerir veya DSU yükleyicisini yeni bir konuma yönlendirir. Örneğin:

{
    "include": ["https://.../gsi-release/gsi-src.json"]
}

İkinci olarak, yayımlanan DSU paketlerini tanımlamak için ilkel image kullanılır. İlkel görüntünün içinde birkaç özellik vardır:

  • name ve details nitelikleri, kullanıcının seçmesi için iletişim kutusunda gösterilen dizelerdir.

  • Sonraki bölümde açıklanan uyumluluk kontrolleri için cpu_api , vndk ve os_version nitelikleri kullanılır.

  • İsteğe bağlı pubkey özelliği, DSU paketini imzalamak için kullanılan gizli anahtarla eşleşen genel anahtarı açıklar. Belirtildiğinde DSU hizmeti, cihazın DSU paketini doğrulamak için kullanılan anahtara sahip olup olmadığını kontrol edebilir. Bu, tanınmayan bir DSU paketinin kurulmasını (örneğin, OEM-A tarafından imzalanmış bir DSU'nun OEM-B tarafından üretilen bir cihaza kurulmasını) önler.

  • İsteğe bağlı tos özelliği, ilgili DSU paketinin hizmet şartlarını açıklayan bir metin dosyasına işaret eder. Bir geliştirici, belirtilen hizmet koşulları özniteliğine sahip bir DSU paketi seçtiğinde, Şekil 6'da gösterilen iletişim kutusu açılır ve geliştiriciden DSU paketini yüklemeden önce hizmet koşullarını kabul etmesi istenir.

    Hizmet şartları iletişim kutusu

    Şekil 6. Hizmet şartları iletişim kutusu

Referans olması açısından aşağıda GSI için bir DSU JSON tanımlayıcısı verilmiştir:

{
   "images":[
      {
         "name":"GSI+GMS x86",
         "os_version":"10",
         "cpu_abi": "x86",
         "details":"exp-QP1A.190711.020.C4-5928301",
         "vndk":[
            27,
            28,
            29
         ],
         "pubkey":"",
         "tos": "https://dl.google.com/developers/android/gsi/gsi-tos.txt",
         "uri":"https://.../gsi/gsi_gms_x86-exp-QP1A.190711.020.C4-5928301.zip"
      },
      {
         "name":"GSI+GMS ARM64",
         "os_version":"10",
         "cpu_abi": "arm64-v8a",
         "details":"exp-QP1A.190711.020.C4-5928301",
         "vndk":[
            27,
            28,
            29
         ],
         "pubkey":"",
         "tos": "https://dl.google.com/developers/android/gsi/gsi-tos.txt",
         "uri":"https://.../gsi/gsi_gms_arm64-exp-QP1A.190711.020.C4-5928301.zip"
      },
      {
         "name":"GSI ARM64",
         "os_version":"10",
         "cpu_abi": "arm64-v8a",
         "details":"exp-QP1A.190711.020.C4-5928301",
         "vndk":[
            27,
            28,
            29
         ],
         "pubkey":"",
         "uri":"https://.../gsi/aosp_arm64-exp-QP1A.190711.020.C4-5928301.zip"
      },
      {
         "name":"GSI x86_64",
         "os_version":"10",
         "cpu_abi": "x86_64",
         "details":"exp-QP1A.190711.020.C4-5928301",
         "vndk":[
            27,
            28,
            29
         ],
         "pubkey":"",
         "uri":"https://.../gsi/aosp_x86_64-exp-QP1A.190711.020.C4-5928301.zip"
      }
   ]
}

Uyumluluk yönetimi

Bir DSU paketi ile yerel aygıt arasındaki uyumluluğu belirtmek için çeşitli özellikler kullanılır:

  • cpu_api , cihaz mimarisini tanımlayan bir dizedir. Bu özellik zorunludur ve ro.product.cpu.abi sistem özelliğiyle karşılaştırılır. Değerleri tam olarak eşleşmelidir.

  • os_version , Android sürümünü belirten isteğe bağlı bir tamsayıdır. Örneğin, Android 10 için os_version 10 ve Android 11 için os_version 11 . Bu öznitelik belirtildiğinde ro.system.build.version.release sistem özelliğine eşit veya ondan büyük olmalıdır. Bu kontrol, şu anda desteklenmeyen bir Android 11 satıcı cihazında Android 10 GSI görüntüsünün önyüklenmesini önlemek için kullanılır. Android 10 cihazında Android 11 GSI görüntüsünün başlatılmasına izin verilir.

  • vndk , DSU paketinde bulunan tüm VNDK'leri belirten isteğe bağlı bir dizidir. Belirtildiğinde DSU yükleyicisi, ro.vndk.version sistem özelliğinden çıkarılan numaranın dahil edilip edilmediğini kontrol eder.

Güvenlik için DSU anahtarlarını iptal edin

DSU görüntülerini imzalamak için kullanılan RSA anahtar çiftinin güvenliğinin ihlal edildiği son derece nadir bir durumda, güvenliği ihlal edilmiş anahtarı kaldırmak için ramdisk mümkün olan en kısa sürede güncellenmelidir. Önyükleme bölümünü güncellemenin yanı sıra, bir HTTPS URL'sindeki DSU anahtar iptal listesini (anahtar kara listesi) kullanarak güvenliği ihlal edilmiş anahtarları engelleyebilirsiniz.

DSU anahtar iptal listesi, iptal edilen AVB ortak anahtarlarının bir listesini içerir. DSU kurulumu sırasında DSU görüntülerinin içindeki genel anahtarlar iptal listesiyle doğrulanır. Görüntülerin iptal edilmiş bir ortak anahtar içerdiği tespit edilirse DSU yükleme işlemi durdurulur.

Anahtar iptal listesi URL'si, güvenliğin gücünü sağlamak için bir HTTPS URL'si olmalı ve bir kaynak dizesinde belirtilmelidir:

frameworks/base/packages/DynamicSystemInstallationService/res/values/strings.xml@key_revocation_list_url

Dizenin değeri, Google tarafından yayımlanan GSI anahtarları için bir iptal listesi olan https://dl.google.com/developers/android/gsi/gsi-keyblacklist.json şeklindedir. Bu kaynak dizisi yerleştirilebilir ve özelleştirilebilir, böylece DSU özelliğini benimseyen OEM'ler kendi anahtar kara listelerini sağlayabilir ve koruyabilirler. Bu, OEM'in, aygıtın ramdisk görüntüsünü güncellemeden belirli genel anahtarları engellemesine yönelik bir yol sağlar.

İptal listesinin formatı şöyledir:

{
   "entries":[
      {
         "public_key":"bf14e439d1acf231095c4109f94f00fc473148e6",
         "status":"REVOKED",
         "reason":"Key revocation test key"
      },
      {
         "public_key":"d199b2f29f3dc224cca778a7544ea89470cbef46",
         "status":"REVOKED",
         "reason":"Key revocation test key"
      }
   ]
}
  • public_key iptal edilen anahtarın AVB pubkey'i oluşturma bölümünde açıklanan formattaki SHA-1 özetidir.
  • status anahtarın iptal durumunu gösterir. Şu anda desteklenen tek değer REVOKED .
  • reason , iptal nedenini açıklayan isteğe bağlı bir dizedir.

DSU prosedürleri

Bu bölümde çeşitli DSU yapılandırma prosedürlerinin nasıl gerçekleştirileceği açıklanmaktadır.

Yeni bir anahtar çifti oluştur

.pem formatında (örneğin, 2048 bit boyutunda) bir RSA özel/genel anahtar çifti oluşturmak için openssl komutunu kullanın:

$ openssl genrsa -out oem_cert_pri.pem 2048
$ openssl rsa -in oem_cert_pri.pem -pubout -out oem_cert_pub.pem

Özel anahtara erişilemeyebilir ve yalnızca donanım güvenlik modülünde (HSM) tutulur. Bu durumda anahtar oluşturulduktan sonra x509 ortak anahtar sertifikası mevcut olabilir. AVB ortak anahtarını x509 sertifikasından oluşturmaya yönelik talimatlar için Eşleştirme ortak anahtarını ramdisk'e ekleme bölümüne bakın.

Bir x509 sertifikasını PEM formatına dönüştürmek için:

$ openssl x509 -pubkey -noout -in oem_cert_pub.x509.pem > oem_cert_pub.pem

Sertifika zaten bir PEM dosyasıysa bu adımı atlayın.

Eşleştirme pubkey'ini ramdisk'e ekleyin

İmzalı DSU paketini doğrulamak için oem_cert.avbpubkey /avb/*.avbpubkey altına yerleştirilmesi gerekir. Öncelikle PEM formatındaki genel anahtarı AVB genel anahtar formatına dönüştürün:

$ avbtool extract_public_key --key oem_cert_pub.pem --output oem_cert.avbpubkey

Daha sonra aşağıdaki adımlarla genel anahtarı birinci aşama ramdisk’e ekleyin.

  1. avbpubkey dosyasını kopyalamak için önceden oluşturulmuş bir modül ekleyin. Örneğin, aşağıdaki gibi içeriğe sahip device/<company>/<board>/oem_cert.avbpubkey ve device/<company>/<board>/avb/Android.mk ekleyin:

    include $(CLEAR_VARS)
    
    LOCAL_MODULE := oem_cert.avbpubkey
    LOCAL_MODULE_CLASS := ETC
    LOCAL_SRC_FILES := $(LOCAL_MODULE)
    ifeq ($(BOARD_USES_RECOVERY_AS_BOOT),true)
    LOCAL_MODULE_PATH := $(TARGET_RECOVERY_ROOT_OUT)/first_stage_ramdisk/avb
    else
    LOCAL_MODULE_PATH := $(TARGET_RAMDISK_OUT)/avb
    endif
    
    include $(BUILD_PREBUILT)
    
  2. Droidcore hedefinin eklenen oem_cert.avbpubkey bağlı olmasını sağlayın:

    droidcore: oem_cert.avbpubkey
    

JSON tanımlayıcısında AVB pubkey özelliğini oluşturun

oem_cert.avbpubkey , AVB ortak anahtar ikili biçimindedir. JSON tanımlayıcısına koymadan önce okunabilir hale getirmek için SHA-1'i kullanın:

$ sha1sum oem_cert.avbpubkey | cut -f1 -d ' '
3e62f2be9d9d813ef5........866ac72a51fd20

Bu, JSON tanımlayıcısının pubkey özelliğinin içeriği olacaktır.

   "images":[
      {
         ...
         "pubkey":"3e62f2be9d9d813ef5........866ac72a51fd20",
         ...
      },

Bir DSU paketi imzalayın

Bir DSU paketini imzalamak için şu yöntemlerden birini kullanın:

  • Yöntem 1: Bir DSU paketi oluşturmak için orijinal AVB imzalama işlemi tarafından oluşturulan yapıyı yeniden kullanın. Alternatif bir yaklaşım, önceden imzalanmış görüntüleri yayın paketinden çıkarmak ve çıkarılan görüntüleri doğrudan ZIP dosyası oluşturmak için kullanmaktır.

  • Yöntem 2: Özel anahtar mevcutsa DSU bölümlerini imzalamak için aşağıdaki komutları kullanın. Bir DSU paketindeki (ZIP dosyası) her img ayrı olarak imzalanır:

    $ key_len=$(openssl rsa -in oem_cert_pri.pem -text | grep Private-Key | sed -e 's/.*(\(.*\) bit.*/\1/')
    $ for partition in system product; do
        avbtool add_hashtree_footer \
            --image ${OUT}/${partition}.img \
            --partition_name ${partition} \
            --algorithm SHA256_RSA${key_len} \
            --key oem_cert_pri.pem
    done
    

avbtool kullanarak add_hashtree_footer ekleme hakkında daha fazla bilgi için bkz . avbtool'u kullanma .

DSU paketini yerel olarak doğrulayın

Tüm yerel görüntülerin aşağıdaki komutlarla eşleşen genel anahtara göre doğrulanması önerilir:


for partition in system product; do
    avbtool verify_image --image ${OUT}/${partition}.img  --key oem_cert_pub.pem
done

Beklenen çıktı şuna benzer:

Verifying image dsu/system.img using key at oem_cert_pub.pem
vbmeta: Successfully verified footer and SHA256_RSA2048 vbmeta struct in dsu/system.img
: Successfully verified sha1 hashtree of dsu/system.img for image of 898494464 bytes

Verifying image dsu/product.img using key at oem_cert_pub.pem
vbmeta: Successfully verified footer and SHA256_RSA2048 vbmeta struct in dsu/product.img
: Successfully verified sha1 hashtree of dsu/product.img for image of 905830400 bytes

DSU paketi yapın

Aşağıdaki örnek, system.img product.img içeren bir DSU paketi oluşturur:

dsu.zip {
    - system.img
    - product.img
}

Her iki görüntü de imzalandıktan sonra ZIP dosyasını oluşturmak için aşağıdaki komutu kullanın:

$ mkdir -p dsu
$ cp ${OUT}/system.img dsu
$ cp ${OUT}/product.img dsu
$ cd dsu && zip ../dsu.zip *.img && cd -

Tek tıklamayla DSU'yu özelleştirin

Varsayılan olarak DSU yükleyicisi, https://...google.com/.../gsi-src.json olan GSI görüntülerinin meta verilerine işaret eder.

OEM'ler, kendi JSON tanımlayıcılarına işaret eden persist.sys.fflag.override.settings_dynamic_system.list özelliğini tanımlayarak listenin üzerine yazabilir. Örneğin, bir OEM, GSI'yi içeren JSON meta verilerinin yanı sıra aşağıdaki gibi OEM'e özel görseller sağlayabilir:

{
    "include": ["https://dl.google.com/.../gsi-src.JSON"]
    "images":[
      {
         "name":"OEM image",
         "os_version":"10",
         "cpu_abi": "arm64-v8a",
         "details":"...",
         "vndk":[
            27,
            28,
            29
         ],
         "spl":"...",
         "pubkey":"",
         "uri":"https://.../....zip"
      },

}

Bir OEM'in yayınlanan DSU meta verilerini Şekil 7'de gösterildiği gibi zincirleme yapması mümkündür.

Yayınlanan DSU meta verilerini zincirleme

Şekil 7. Yayınlanan DSU meta verilerinin zincirlenmesi