Genel Sistem Görüntüleri

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

GSI'ler, VTS ve CTS-on-GSI testleri 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 en son Android 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'leri kullanmaya başlamak için, GSI yapılandırmaları (ve izin verilen farklılıklar) ve türleri ile ilgili ayrıntılar için aşağıdaki bölümleri inceleyin. Bir GSI kullanmaya hazır olduğunuzda, cihaz hedefiniz için GSI'yi indirip oluşturun , ardından GSI'yi bir Android cihaza aktarın.

GSI yapılandırması ve varyansları

Mevcut Android GSI aşağıdaki yapılandırmaya sahiptir:

Mevcut Android GSI, aşağıdaki büyük farklılıkları içerir:

  • CPU mimarisi. Farklı CPU talimatları (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şlatıldığı Android sürümü tarafından belirlenir.

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

Tüm GSI'ler, Android 12 kod tabanından oluşturulur ve her CPU mimarisinin karşılık gelen bir GSI ikili dosyası vardır ( GSI'leri 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, uyumluluk testi için Android 12 GSI'leri kullanmalıdır. Bu, önceki GSI'lerden aşağıdaki büyük değişiklikleri içerir:

  • Hedef adı. Uyumluluk testleri için GSI hedef adı gsi_$arch olarak değiştirilir. Hedef adı aosp_$arch olan GSI, Android uygulama geliştiricileri için tutulur. CTS-on-GSI test planı, satıcı arayüzünü test etmek için de azaltılmıştır.
  • Eski GSI aşamalı olarak kaldırılmıştır. GSI 12, tam olarak üç katına çıkarılmamış Android 8.0 veya 8.1 cihazlarını barındıran geçici çözümleri kaldırır.
  • Kullanıcı hata ayıklama SEPolicy. GSI gsi_$arch , userdebug_plat_sepolicy.cil dosyasını içerir. OEM'e özel vendor_boot-debug.img veya boot-debug.img dosyası yanıp sönerken, /system/bin/init userdebug_plat_sepolicy.cil GSI system.img yükler. Ayrıntılar için Debug Ramdisk ile VTS Testine başvurun.

Android 11 GSI değişiklikleri

Android 11 ile başlatılan veya Android 11'e güncellenen cihazlar, uyumluluk testi için Android 11 GSI'leri kullanmalıdır. Bu, önceki GSI'lerden aşağıdaki büyük değişiklikleri içerir:

  • system_ext içeriği. Android 11 yeni bir system_ext 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'leri içerir. Hangisinin kullanılacağı, çalışma zamanında satıcı bölümünde ro.apex.updatable sistem özelliği tarafından belirlenir. Ayrıntılar için APEX güncellemelerini desteklemek için sistemi yapılandırma referansına bakın.

Android 10 GSI değişiklikleri

Android 10 ile başlatılan veya Android 10'a güncellenen cihazlar, uyumluluk testi için Android 10 GSI'leri kullanmalıdır. Bu, önceki GSI'lerden aşağıdaki büyük değişiklikleri içerir:

  • Kullanıcı yapısı. 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 başvurun.
  • Ayrılmamış biçim. aosp_$arch GSI, ayrıştırılmamış formatta oluşturulur. Gerekirse, ayrıştırılmamış bir GSI'yi 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 kullanımdan kaldırılmıştı. 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 . Ramdisk'teki yükseltilmiş init , kök olarak sistem düzeniyle OEM system.img'yi destekler.
  • Önyüklemeyi doğrulayın. GSI'yi 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, uyumluluk testi için Android 9 GSI'ları kullanmalıdır. Bu, önceki GSI'lerden aşağıdaki büyük değişiklikleri içerir:

  • GSI ve öykünücüyü birleştirir. GSI'ler, örneğin 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 bağlayabilirdi. Android 9'da, sistem görüntüsünün kökü, cihazın kökü olarak monte edilir.
  • 64 bit bağlayıcı arabirimi. Android 8.x'te 32-bit GSI'ler 32-bit bağlayıcı arayüzünü kullandı. Android 9, 32 bit bağlayıcı arabirimini desteklemez, bu nedenle hem 32 bit GSI'ler hem de 64 bit GSI'ler 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, bu nedenle BOARD_VNDK_VERSION ayarlanmalıdır .
  • Uyumlu sistem özelliği. Android 9, uyumlu bir sistem özelliği için erişim kontrolünü etkinleştirir ( PRODUCT_COMPATIBLE_PROPERTY_OVERRIDE := true ).

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 ) önyükleyici tarafından bildirilen sürüm bilgisi ile eşleştiğini doğrulamak için Keymaster 3 veya daha düşük bir sürümü uygulayan cihazların gerekliydi. Bu tür bilgiler tipik olarak önyükleme görüntüsü başlığından elde edildi.

Android 9 ve sonraki sürümlerde, bu gereksinim, satıcıların bir GSI başlatmasını sağlamak için değiştirilmiştir. Özellikle, 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, Keymaster doğrulama yapmamalıdır. Keymaster 3 veya daha düşük sürümünü uygulayan cihazlar için, satıcıların doğrulamayı atlamak (veya Keymaster 4'e yükseltmek) için Keymaster uygulamasını değiştirmesi gerekir. Keymaster ile ilgili ayrıntılar için Donanım destekli Anahtar Deposu'na bakın.

GSI'leri indirme

Önceden oluşturulmuş GSI'leri 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'ler oluşturmaya ilişkin ayrıntılar için aşağıdaki bölüme bakın.

Bina GSI'leri

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

Bir GSI oluşturmak için, bir GSI şubesinden indirerek ve bir GSI oluşturma hedefi seçerek Android kaynak ağacını kurun. Cihazınız için doğru GSI sürümünü belirlemek için 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 çıktı klasöründe out/target/product/ generic_arm64 .

Örneğin, android12-gsi GSI dalında GSI derleme hedefi gsi_arm64-userdebug 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 oluşturma hedefleri

Aşağıdaki GSI oluşturma hedefleri, Android 9 veya sonraki sürümlerde başlatılan 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

GSI'lerin yanıp sönmesi için gereksinimler

Android cihazların farklı tasarımları olabilir, bu nedenle bir GSI'yi tüm cihazlara uygulamak için genel bir komut veya talimat seti yoktur. Açıkça 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. Cihazın aşağıdakilere sahip olduğundan emin olun:
    • üç kat
    • Cihazların kilidini açmak için bir yöntem (böylece fastboot kullanılarak flash'lanabilirler)
    • fastboot aracılığıyla flash'lanabilir hale getirmek için kilitsiz 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'yi sistem bölümüne flashlayın.
  3. Kullanıcı verilerini silin ve diğer gerekli bölümlerden (örneğin, kullanıcı verileri ve sistem bölümleri) verileri temizleyin.
  4. Cihazı yeniden başlat.

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

  1. fastboot moduna önyükleme yapın ve önyükleyicinin kilidini açın .
  2. fastbootd destekleyen cihazların ayrıca fastbootd şu şekilde önyükleme yapması gerekir:
    $ fastboot reboot fastboot
  3. GSI'yi silin ve sistem bölümüne flashlayın:
    $ fastboot erase system
    $ fastboot flash system system.img
    
  4. Kullanıcı verilerini silin ve diğer gerekli bölümlerdeki verileri temizleyin (örneğin, kullanıcı verileri ve sistem bölümleri):
    $ fastboot -w
  5. Yeniden başlatma:
    $ 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üntülenebilir:
    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 flash etmek için fazladan alan sağlar:
$ fastboot delete-logical-partition product_a
_a son system_a _a sistem bölümünün yuva kimliğiyle eşleşmelidir.

GSI'lere katkıda bulunmak

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

  • Bir GSI yaması oluşturma. DESSERT -gsi bir geliştirme dalı değildir ve yalnızca AOSP ana dalından gelen kirazları kabul eder, bu nedenle bir GSI yaması göndermek için şunları yapmanız gerekir:
    1. Yamayı AOSP master şubesine gönderin.
    2. DESSERT -gsi için yamayı seçin.
    3. Cherrypick'in gözden geçirilmesi için bir hata bildirin.
  • GSI hatalarını bildirmek veya başka önerilerde bulunmak. Hataları Raporlama bölümündeki talimatları gözden geçirin, 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, gezinme çubuğu modu, satıcıyı geçersiz kılarak yapılandırılır. Çalışma zamanında aşağıdaki adb komutunu çalıştırarak gezinme çubuğu modunu değiştirebilirsiniz.

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

mode threebutton , twobutton , gestural vb. olabileceği yerler.