Dinamik Sistem Güncellemesi

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

Çekirdek gereksinimleri

Çekirdek gereksinimleri için Dinamik bölümleri uygulama başlıklı makaleyi inceleyin.

Ayrıca DSU, Android sistem görüntüsünü doğrulamak için device-mapper-verity (dm-verity) çekirdek özelliğini kullanır. Bu nedenle, aşağıdaki çekirdek yapılandırmalarını etkinleştirmeniz gerekir:

  • CONFIG_DM_VERITY=y
  • CONFIG_DM_VERITY_FEC=y

Bölme koşulları

Android 11'den itibaren DSU, F2FS veya ext4 dosya sistemini kullanmak için /data bölümünün kullanılmasını gerektirir. F2FS daha iyi performans sağlar ve önerilir ancak fark önemsiz olmalıdır.

Aşağıda, bir Pixel cihazda dinamik sistem güncellemesinin ne kadar süreceğine dair bazı örnekler verilmiştir:

  • F2FS'yi kullanarak:
    • 109 saniye, 8 GB kullanıcı, 867 MB sistem, dosya sistemi türü: F2FS: encryption=aes-256-xts:aes-256-cts
    • 104 saniye, 8 GB kullanıcı, 867 MB sistem, dosya sistemi türü: F2FS: encryption=ice
  • ext4 kullanıyorsanız:
    • 135 saniye, 8 GB kullanıcı, 867 MB sistem, dosya sistemi türü: ext4: encryption=aes-256-xts:aes-256-cts

Platformunuzda çok daha uzun sürerse ekleme işaretinin "sync" yazma işlemi yapan herhangi bir işaret içerip içermediğini kontrol edebilir veya daha iyi performans elde etmek için açık bir şekilde "async" işareti belirtebilirsiniz.

Yüklenen resimlerle ilgili verileri depolamak için metadata bölümü (16 MB veya daha büyük) gerekir. İlk aşamada monte edilmelidir.

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

DSU, çekirdek/yaygın 4.9 ile geliştirilmiş ve test edilmiştir. Bu özellik için 4.9 ve sonraki sürümlerin çekirdeğini kullanmanız önerilir.

Satıcı HAL davranışı

Weaver HAL'si

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

Kapı görevlisi HAL'si

GSI, HAL'deki UID'leri +1000000 ile kaydırdığından Gatekeeper HAL'in büyük USER_ID değerlerini desteklemesi gerekir.

Başlatmayı doğrulama

Doğrulanmış başlatmayı devre dışı bırakmadan geliştirici GSI resimlerinin KİLİTLENEN 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ılırken, indirilen Android sistem görüntüsü, cihazdaki geçerli sistem görüntüsünden daha yeni olmalıdır. Bu işlem, her iki sistem görüntüsünün Android Doğrulanmış Başlatma (AVB) AVB özellik tanımlayıcısındaki güvenlik yaması düzeyleri karşılaştırılarak yapılır: Prop: com.android.build.system.security_patch -> '2019-04-05'.

AVB kullanmayan cihazlarda, mevcut sistem görüntüsünün güvenlik yaması düzeyini çekirdek cmdline'ına veya bootloader'a ekleyin: 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'yı çalıştırmak için korumalı alan olarak 8 GB'lık boş bir /data bölümü

DSU örneğini başlatmadan önce en az 10 GB boş alan ayırmanızı öneririz. DSU, SD karttan ayırmayı da destekler. SD kart mevcut olduğunda, bu kartın tahsis için önceliği en yüksektir. SD kart desteği, yeterli dahili depolama alanı bulunmayabilecek düşük güçlü cihazlar için önemlidir. Mevcut bir SD kart varsa bu kartın kullanılmadığından emin olun. DSU, kabul edilen SD kartları desteklemez.

Kullanılabilir ön uçlar

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

DSU'yu adb kullanarak 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

DSU'yu bir uygulama kullanarak başlatma

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

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 paket haline getirmeniz/önceden yüklemeniz gerekir. DynamicSystemClient bir sistem API'si olduğundan uygulamayı normal SDK API'siyle derleyemez ve Google Play'de yayınlayamazsınız. Bu uygulamanın amacı:

  1. Satıcı tanımlı bir şema içeren bir resim listesi ve ilgili URL'yi getirme.
  2. Listedeki resimleri cihazla eşleştirin ve kullanıcının seçmesi için uyumlu resimleri gösterin.
  3. DynamicSystemClient.start işlevini şu şekilde çağırın:

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

URL, sıkıştırılmış, seyrek olmayan bir sistem görüntü dosyasını işaret eder. Bu dosyayı aşağıdaki komutlarla oluşturabilirsiniz:

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

Dosya adı şu biçimde 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ükleyiciyi kullanıma sunar.

DSU yükleyiciyi başlatma

Şekil 1. DSU yükleyiciyi başlatma

Geliştirici DSU Yükleyici düğmesini tıkladığında, web'den önceden yapılandırılmış bir DSU JSON tanımlayıcısını alır ve geçerli tüm resimleri kayan menüde gösterir. DSU yüklemesini başlatmak için bir resim seçin. İlerleme durumu bildirim çubuğunda gösterilir.

DSU görüntüsünün yükleme ilerleme durumu

Şekil 2. DSU görüntüsünün yükleme ilerleme durumu

DSU yükleyicisi varsayılan olarak GSI resimlerini 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 DSU yükleyicisinden nasıl yükleneceği gösterilmektedir.

Özellik işareti

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

Özellik bayrağını etkinleştirme.

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

Özellik bayrağı kullanıcı derlemesi ç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'de tedarikçi ana makine sistem görüntüleri (isteğe bağlı)

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

Görüntüler, burada gösterildiği gibi herkese açık olmalıdır:

GCE&#39;de herkese açık erişim

Şekil 4. GCE'de herkese açık erişim

Bir öğeyi herkese açık hale getirme işlemini Google Cloud dokümanlarında bulabilirsiniz.

ZIP dosyası içinde birden çok bölümlü DSU

Android 11'den itibaren DSU'da birden fazla bölüm olabilir. Örneğin, system.img'a ek olarak product.img içerebilir. Cihaz başlatıldığında init, yüklü DSU bölümlerini algılar ve yüklü DSU etkinleştirildiğinde cihaz üzerindeki 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 fazla bölüm içeren DSU işlemi

Şekil 5. Birden fazla bölümlendirmeli DSU işlemi

OEM imzalı DSU

Cihaz üzerinde çalışan tüm resimlerin cihaz üreticisi tarafından yetkilendirildiğinden emin olmak için DSU paketindeki tüm resimler imzalanmalıdır. Örneğin, aşağıdaki gibi iki bölüm resmi içeren bir DSU paketi 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 imzalanmalıdır. Genel uygulama, paketi imzalamak için gizli anahtarın, doğrulamak için de ortak anahtarın kullanıldığı bir asimetrik algoritma (ör. RSA) kullanmaktır. İlk aşama ramdisk'i, eşleme için kullanılan herkese açık anahtarı (ör. /avb/*.avbpubkey) içermelidir. Cihaz zaten AVB'yi benimsemişse mevcut imzalama prosedürü yeterlidir. Aşağıdaki bölümlerde imzalama süreci gösterilmiştir ve DSU paketindeki görüntüleri doğrulamak için kullanılan AVB yayıncı anahtarının yerleşimi vurgulanmaktadır.

DSU JSON tanımlayıcısı

DSU JSON tanımlayıcısı, DSU paketlerini tanımlar. İki temel öğeyi destekler. İlk olarak, include ilkel türü ek JSON tanımlayıcıları içerir veya DSU yükleyiciyi yeni bir konuma yönlendirir. Örnek:

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

İkinci olarak, yayınlanan DSU paketlerini açıklamak için image temel öğesi kullanılır. Temel resim öğesinin içinde birkaç özellik vardır:

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

  • cpu_api, vndk ve os_version özellikleri, sonraki bölümde açıklanacak uyumluluk denetimleri için kullanılır.

  • İsteğe bağlı pubkey özelliği, DSU paketini imzalamak için kullanılan gizli anahtarla eşlenen ortak anahtarı açıklar. Belirtildiğinde DSU hizmeti, cihazda DSU paketini doğrulamak için kullanılan anahtarın olup olmadığını kontrol edebilir. Bu sayede, tanınmayan bir DSU paketinin (ör. OEM A tarafından imzalanan bir DSU'nun OEM B tarafından üretilen bir cihaza yüklenmesi) yüklenmesi önlenir.

  • İ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, hizmet şartları özelliğinin belirtildiği bir DSU paketi seçtiğinde Şekil 6'da gösterilen iletişim kutusu açılır. Bu iletişim kutusunda, geliştiriciden DSU paketini yüklemeden önce hizmet şartlarını kabul etmesi istenir.

    Hizmet Şartları iletişim kutusu

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

Referans olarak, GSI'nın DSU JSON tanımlayıcısını burada bulabilirsiniz:

{
   "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

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

  • cpu_api, cihaz mimarisini açıklayan 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 tam sayıdır. Örneğin, Android 10 için os_version 10, Android 11 için os_version 11 olur. Bu özellik belirtildiğinde, ro.system.build.version.release sistem özelliğine eşit veya bundan daha büyük olmalıdır. Bu kontrol, Android 11 satıcı cihazında, şu anda desteklenmeyen bir Android 10 GSI görüntüsünün başlatılmasını önlemek için kullanılır. Android 10 cihazda Android 11 GSI görüntüsünün başlatılmasına izin verilir.

  • vndk, DSU paketinde yer alan tüm VNDK'ları belirten isteğe bağlı bir dizidir. Bu parametre belirtildiğinde DSU yükleyici, ro.vndk.version sistem özelliğinden çıkarılan sayının dahil olup olmadığını kontrol eder.

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

DSU görüntülerini imzalamak için kullanılan RSA anahtar çiftinin güvenliğinin ihlal edildiği son derece nadir durumlarda, güvenliği ihlal edilmiş anahtarı kaldırmak için ramdisk en kısa sürede güncellenmelidir. Önyükleme bölümünü güncellemenin yanı sıra, HTTPS URL'sinden bir DSU anahtar iptal listesi (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 yükleme sırasında, DSU resimlerindeki ortak anahtarlar iptal listesi ile doğrulanır. Görüntülerin iptal edilmiş bir herkese açık anahtar içerdiği tespit edilirse DSU yükleme işlemi durdurulur.

Anahtar iptal listesi URL'si, güvenlik gücünü sağlamak için HTTPS URL'si olmalıdır ve bir kaynak dizesiyle belirtilir:

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

Dizinin değeri https://dl.google.com/developers/android/gsi/gsi-keyblacklist.json'tir. Bu değer, Google tarafından yayınlanan GSI anahtarları için iptal listesidir. Bu kaynak dizesi, DSU özelliğini kullanan OEM'lerin kendi anahtar kara listelerini sağlayıp koruyabilmesi için yer paylaşımına tabi tutulabilir ve özelleştirilebilir. Bu sayede OEM, cihazın ramdisk imajını güncellemeden belirli ortak anahtarları engelleyebilir.

İptal listesinin biçimi şu şekildedir:

{
   "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 SHA-1 özetidir ve AVB ortak anahtarını oluşturma bölümünde açıklanan biçimdedir.
  • status, anahtarın iptal durumunu gösterir. Şu anda yalnızca REVOKED değeri desteklenmektedir.
  • reason, iptal nedenini açıklayan isteğe bağlı bir dizedir.

DSU işlemleri

Bu bölümde, çeşitli DSU yapılandırma işlemlerinin nasıl yapılacağı açıklanmaktadır.

Yeni bir anahtar çifti oluştur

.pem biçiminde (ör. 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 bir donanım güvenlik modülünde (HSM) saklanabilir. Bu durumda, anahtar oluşturma işleminden sonra kullanılabilir bir x509 ortak anahtar sertifikası olabilir. x509 sertifikasından AVB ortak anahtarını oluşturma talimatları için Eşleme ortak anahtarını ramdisk'e ekleme bölümüne bakın.

Bir x509 sertifikasını PEM biçimine 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şleme yayıncı anahtarını RAM'e ekle

İmzalanmış DSU paketini doğrulamak için oem_cert.avbpubkey, /avb/*.avbpubkey altına yerleştirilmelidir. İlk olarak PEM biçimindeki ortak anahtarı AVB ortak anahtar biçimine dönüştürün:

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

Ardından, aşağıdaki adımları uygulayarak ortak anahtarı ilk aşama ramdisk'ine ekleyin.

  1. avbpubkey öğesini kopyalamak için önceden oluşturulmuş bir modül ekleyin. Örneğin, device/<company>/<board>/oem_cert.avbpubkey ve device/<company>/<board>/avb/Android.mk öğelerini şuna benzer içeriklerle 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 hedefini, eklenen oem_cert.avbpubkey değerine bağlı hale getirin:

    droidcore: oem_cert.avbpubkey
    

JSON tanımlayıcısında AVB herkese açık anahtar özelliğini oluşturma

oem_cert.avbpubkey, AVB ortak anahtar ikili biçimindedir. JSON açıklayıcıya yerleştirmeden önce okunabilir hale getirmek için SHA-1 kullanın:

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

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

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

DSU paketi imzalayın

DSU paketini imzalamak için aşağıdaki yöntemlerden birini kullanın:

  • 1. Yöntem: DSU paketi oluşturmak için orijinal AVB imzalama işlemi tarafından oluşturulan yapıyı yeniden kullanın. Alternatif bir yaklaşım da, zaten imzalanmış görüntüleri sürüm paketinden çıkarmak ve ayıklanan görüntüleri kullanarak ZIP dosyasını doğrudan oluşturmaktır.

  • 2. Yöntem: Özel anahtar varsa DSU bölümlerini imzalamak için aşağıdaki komutları kullanın. 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 avbtool'u kullanma başlıklı makaleyi inceleyin.

DSU paketini yerel olarak doğrulama

Tüm yerel resimleri, aşağıdaki komutlarla eşleme herkese açık anahtarına göre doğrulamanız önerilir:


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

Beklenen çıkış aşağıdaki gibi görünür:

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 oluşturma

Aşağıdaki örnekte, bir system.img ve bir product.img içeren bir DSU paketi oluşturulmaktadır:

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

Her iki resim de imzalandıktan sonra ZIP dosyası 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ştirme

Varsayılan olarak DSU yükleyici, https://...google.com/.../gsi-src.json olan GSI resimlerinin meta verilerini gösterir.

OEM'ler, kendi JSON tanımlayıcısına işaret eden persist.sys.fflag.override.settings_dynamic_system.list özelliğini tanımlayarak listenin üzerine yazabilir. Örneğin, bir OEM, GSI'nin yanı sıra OEM'ye ait resimleri içeren aşağıdaki gibi JSON meta verileri 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"
      },

}

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

Yayınlanan DSU meta verilerini zincirleme

7.Şekil Yayınlanan DSU meta verilerini zincirleme