Genel sistem görüntüleri

Genel sistem görüntüsü (GSI), Android cihazlar için ayarlanmış yapılandırmalara sahip bir sistem görüntüsüdür. Android 9 veya üstünü çalıştıran herhangi bir Android cihazının başarıyla çalışabileceği, değiştirilmemiş Android Açık Kaynak Projesi (AOSP) koduna sahip saf bir Android uygulaması olarak kabul edilir.

GSI'lar, VTS ve CTS-on-GSI testlerini çalıştırmak için kullanılır. Bir Android cihazının sistem görüntüsü bir GSI ile değiştirilir, ardından cihazın Android'in en son sürümüyle satıcı arayüzlerini doğru bir şekilde uyguladığından emin olmak için Vendor Test Suite (VTS) ve Compatibility Test Suite (CTS) ile test edilir.

GSI'ları kullanmaya başlamak için, GSI yapılandırmaları (ve izin verilen varyanslar) ve türleri hakkında ayrıntılar için aşağıdaki bölümleri inceleyin. Bir GSI kullanmaya hazır olduğunuzda, cihaz hedefiniz için GSI'yı indirin ve oluşturun , ardından GSI'yı bir Android cihaza yükleyin .

GSI yapılandırması ve varyansları

Geçerli Android GSI aşağıdaki yapılandırmaya sahiptir:

Mevcut Android GSI aşağıdaki ana farklılıkları içerir:

  • CPU mimarisi. Farklı CPU yönergeleri (ARM, x86, vb.) ve CPU bitliği (32 bit veya 64 bit) desteği.

Tiz uyumluluk testleri için GSI hedefleri

Uyumluluk testi için kullanılan GSI, cihazın başlattığı Android sürümü tarafından belirlenir.

Cihaz tipi Hedef oluştur
Android 12 ile başlayan cihazlar gsi_$arch-user (İmzalı)
Android 11 ile başlayan cihazlar gsi_$arch-user (İmzalı)
Android 10 ile başlayan cihazlar gsi_$arch-user (İmzalı)
Android 9 ile başlatılan cihazlar gsi_$arch-userdebug

Tüm GSI'lar Android 12 kod tabanından oluşturulmuştur ve her CPU mimarisinin karşılık gelen bir GSI ikili dosyası vardır ( GSI'ları Oluşturma bölümündeki derleme hedefleri listesine bakın).

Android 12 GSI değişiklikleri

Android 12 ile başlatılan veya Android 12'ye güncellenen cihazların uyumluluk testi için Android 12 GSI'ları kullanması gerekir. Bu, önceki GSI'lardan aşağıdaki önemli değişiklikleri içerir:

  • hedef adı. Uyumluluk testleri için GSI hedef adı gsi_$arch olarak değiştirildi. aosp_$arch hedef adına sahip GSI, Android uygulama geliştiricileri için tutulur. CTS-on-GSI test planı, satıcı arabirimini test etmek için de azaltılmıştır.
  • Eski GSI aşamalı olarak kullanımdan kaldırılmıştır. GSI 12, tamamen Treblized olmayan Android 8.0 veya 8.1 cihazları barındıran geçici çözümleri kaldırır.
  • Userdebug SEPolicy. GSI gsi_$arch içerir userdebug_plat_sepolicy.cil . OEM'e özel vendor_boot-debug.img veya boot-debug.img yanıp sönerken /system/bin/init , GSI system.img userdebug_plat_sepolicy.cil yükleyecektir. Detay için Debug Ramdisk ile VTS Testine bakın.

Android 11 GSI değişiklikleri

Android 11 ile başlatılan veya Android 11'e güncellenen cihazların uyumluluk testi için Android 11 GSI'ları kullanması gerekir. Bu, önceki GSI'lardan aşağıdaki önemli değişiklikleri içerir:

  • system_ext içeriği. Android 11, system_ext yeni bir bölüm tanımlar. GSI, sistem uzantısı içeriğini system/system_ext klasörünün altına koyar.
  • APEX'ler. GSI hem düzleştirilmiş hem de sıkıştırılmış APEX'ler içerir. Hangisinin kullanılacağı, çalışma zamanında satıcı bölümündeki ro.apex.updatable sistem özelliği tarafından belirlenir. Ayrıntılar için Sistemi APEX güncellemelerini destekleyecek şekilde yapılandırma referansı.

Android 10 GSI değişiklikleri

Android 10 ile başlatılan veya Android 10'a güncellenen cihazların uyumluluk testi için Android 10 GSI'ları kullanması gerekir. Bu, önceki GSI'lardan aşağıdaki önemli değişiklikleri içerir:

  • kullanıcı derlemesi GSI, Android 10'dan kullanıcı derlemesine sahiptir. Android 10'da, kullanıcı derlemesi GSI, CTS-on-GSI/VTS uyumluluk testinde kullanılabilir. Ayrıntılar için Debug Ramdisk ile VTS Testine bakın.
  • Ayrılmamış format. aosp_$arch hedefli GSI, ayrıştırılmamış formatta oluşturulmuştur. Gerekirse, ayrıştırılmamış bir GSI'yı seyrek biçime dönüştürmek için img2simg kullanabilirsiniz.
  • Kök olarak sistem. aosp_$arch_a adlı eski GSI oluşturma hedefi aşamalı olarak kaldırıldı. Android 8 veya 8.1'den ramdisk ve root olarak sistem olmayan Android 10'a yükseltilen cihazlar için eski GSI aosp_$arch_ab kullanın. Ramdisk'teki yükseltilmiş init kök olarak sistem düzeniyle OEM system.img'yi destekler.
  • Önyüklemeyi doğrulayın. GSI kullanarak yalnızca cihazın kilidini açmanız gerekir. Önyüklemeyi doğrulamayı devre dışı bırakmak gerekli değildir.

Android 9 GSI değişiklikleri

Android 9 ile başlatılan veya Android 9'a güncellenen cihazların uyumluluk testi için Android 9 GSI'ları kullanması gerekir. Bu, önceki GSI'lardan aşağıdaki önemli değişiklikleri içerir:

  • GSI ve öykünücüyü birleştirir. GSI'lar, aosp_arm64 ve aosp_x86 gibi emülatör ürünlerinin sistem görüntülerinden oluşturulur.
  • Kök olarak sistem. Android'in önceki sürümlerinde, A/B güncellemelerini desteklemeyen cihazlar, sistem görüntüsünü /system dizini altına yerleştirebiliyordu. Android 9'da sistem görüntüsünün kökü, cihazın kökü olarak bağlanır.
  • 64 bit bağlayıcı arayüzü. Android 8.x'te 32 bit GSI'lar, 32 bit binder arabirimini kullandı. Android 9, 32 bit bağlayıcı arabirimini desteklemez, bu nedenle hem 32 bit GSI'lar hem de 64 bit GSI'lar 64 bit bağlayıcı arabirimini kullanır.
  • VNDK yaptırımı. Android 8.1'de VNDK isteğe bağlıydı. Android 9'dan itibaren VNDK zorunludur, dolayısıyla BOARD_VNDK_VERSION ayarlanmalıdır .
  • Uyumlu sistem özelliği. Android 9, uyumlu bir sistem özelliği ( PRODUCT_COMPATIBLE_PROPERTY_OVERRIDE := true ) için erişim kontrolünü etkinleştirir.

Android 9 Keymaster değişiklikleri

Android'in önceki sürümlerinde, çalışan sistem tarafından bildirilen sürüm bilgisinin ( ro.build.version.release ve ro.build.version.security_patch ) Keymaster 3 veya daha düşük sürümünü uygulayan cihazların, önyükleyici tarafından bildirilen sürüm bilgisi ile eşleştiğini doğrulaması gerekiyordu. Bu tür bilgiler tipik olarak önyükleme görüntüsü başlığından elde edilir.

Android 9 ve sonraki sürümlerde, satıcıların bir GSI başlatmasını sağlamak için bu gereksinim değişti. Özellikle Keymaster, GSI tarafından bildirilen sürüm bilgisi satıcının önyükleyicisi tarafından bildirilen sürüm bilgisi ile eşleşmeyebileceğinden doğrulama gerçekleştirmemelidir. Keymaster 3 veya daha düşük sürümü uygulayan cihazlar için satıcı firmalar, doğrulamayı atlamak (veya Keymaster 4'e yükseltmek) için Keymaster uygulamasını değiştirmelidir. Keymaster ile ilgili ayrıntılar için Donanım Destekli Anahtar Deposu bölümüne bakın.

GSI'ları indirme

Önceden oluşturulmuş GSI'ları ci.android.com adresindeki AOSP sürekli entegrasyon (CI) web sitesinden indirebilirsiniz. Donanım platformunuz için GSI türü indirilemiyorsa, belirli hedefler için GSI'lar oluşturmaya ilişkin ayrıntılar için aşağıdaki bölüme bakın.

GSI oluşturma

Android 9'dan başlayarak, her Android sürümünün AOSP'de DESSERT -gsi adlı bir GSI şubesi vardır (örneğin, android12-gsi , Android 12'deki GSI şubesidir). GSI şubeleri, tüm güvenlik yamaları ve uygulanan GSI yamaları ile Android içeriğini içerir.

Bir GSI oluşturmak için, bir GSI dalından indirerek ve bir GSI yapı hedefi seçerek Android kaynak ağacını kurun. Cihazınız için doğru GSI sürümünü belirlemek üzere aşağıdaki derleme hedefi tablolarını kullanın. Derleme tamamlandıktan sonra, GSI sistem görüntüsüdür (yani system.img ) ve çıkış klasöründe out/target/product/ generic_arm64 görünür.

Örneğin, android12-gsi GSI dalında gsi_arm64-userdebug GSI oluşturma hedefi oluşturmak için aşağıdaki komutları çalıştırın.

$ repo init -u https://android.googlesource.com/platform/manifest -b android12-gsi
$ repo sync -cq
$ source build/envsetup.sh
$ lunch gsi_arm64-userdebug
$ make -j4

Android GSI derleme hedefleri

Aşağıdaki GSI oluşturma hedefleri, Android 9 veya sonraki sürümleri çalıştıran cihazlar içindir.

GSI adı CPU kemeri Bağlayıcı arayüzü bitliği Kök olarak sistem Hedef oluştur
gsi_arm KOL 64 Y gsi_arm-user
gsi_arm-userdebug
gsi_arm64 ARM64 64 Y gsi_arm64-user
gsi_arm64-userdebug
gsi_x86 x86 64 Y gsi_x86-user
gsi_x86-userdebug
gsi_x86_64 x86-64 64 Y gsi_x86_64-user
gsi_x86_64-userdebug

Yanıp sönen GSI'lar için gereksinimler

Android cihazlar farklı tasarımlara sahip olabilir, bu nedenle tüm cihazlara uygulanacak bir GSI'yı flaşlamak için genel bir komut veya talimat seti yoktur. Açık yanıp sönme talimatları için Android cihazının üreticisine danışın. Aşağıdaki adımları genel bir kılavuz olarak kullanın:

  1. Aygıtın aşağıdakilere sahip olduğundan emin olun:
    • üçlü
    • Cihazların kilidini açmak için bir yöntem (böylece fastboot kullanılarak yanıp sönebilirler)
    • fastboot aracılığıyla flaşlanabilir hale getirmek için kilitlenmemiş bir durum ( fastboot en son sürümüne sahip olduğunuzdan emin olmak için, onu Android kaynak ağacından oluşturun.)
  2. Geçerli sistem bölümünü silin, ardından GSI'yı sistem bölümüne yükleyin.
  3. Kullanıcı verilerini silin ve diğer gerekli bölümlerden (örneğin, kullanıcı verileri ve sistem bölümleri) verileri silin.
  4. Cihazı yeniden başlat.

Örneğin, bir GSI'yı herhangi bir Pixel cihazına flaşlamak için:

  1. fastboot moduna önyükleme yapın ve önyükleyicinin kilidini açın .
  2. fastbootd destekleyen cihazların ayrıca fastbootd önyükleme yapması gerekir:
    $ fastboot reboot fastboot
  3. GSI'yı silin ve sistem bölümüne yükleyin:
    $ fastboot erase system
    $ fastboot flash system system.img
    
  4. Kullanıcı verilerini silin ve diğer gerekli bölümlerden verileri temizleyin (örneğin, kullanıcı verileri ve sistem bölümleri):
    $ fastboot -w
  5. Yeniden başlat:
    $ fastboot reboot
Daha küçük sistem bölümlerine sahip Android 10 veya daha yeni cihazlarda, GSI yanıp sönerken aşağıdaki hata mesajı görünebilir:
    Resizing 'system_a'    FAILED (remote: 'Not enough space to resize partition')
    fastboot: error: Command failed
Ürün bölümünü silmek ve sistem bölümü için yer açmak için aşağıdaki komutu kullanın. Bu, GSI'yi flaşlamak için fazladan alan sağlar:
$ fastboot delete-logical-partition product_a
_a eki, bu örnekteki system_a gibi sistem bölümünün yuva kimliğiyle eşleşmelidir.

GSI'lara katkıda bulunmak

Android, GSI geliştirmeye katkılarınızı memnuniyetle karşılar. Aşağıdakileri yaparak dahil olabilir ve GSI'nın iyileştirilmesine yardımcı olabilirsiniz:

  • Bir GSI yaması oluşturma. DESSERT -gsi bir geliştirme şubesi değildir ve yalnızca AOSP ana şubesinden gelen özel ürünleri kabul eder, bu nedenle bir GSI yaması göndermek için şunları yapmalısınız:
    1. Yamayı AOSP main şubesine gönderin.
    2. Yamayı DESSERT -gsi olarak seçin.
    3. Cherrypick'in incelenmesi için bir hata bildirin.
  • GSI hatalarını bildirmek veya başka önerilerde bulunmak. Hataları bildirme bölümündeki talimatları inceleyin, ardından GSI hatalarına göz atın veya dosyalayın.

İpuçları

Adb kullanarak gezinme çubuğu modunu değiştirme

GSI ile önyükleme yaparken gezinti çubuğu modu satıcının geçersiz kılmasıyla yapılandırılır. Çalışma zamanında aşağıdaki adb komutunu çalıştırarak gezinti çubuğu modunu değiştirebilirsiniz.

adb exec-out cmd overlay enable-exclusive com.android.internal.systemui.navbar.mode

Burada mode , threebutton , twobutton , gestural vb. olabilir.