Genel sistem görüntüleri

Genel sistem görüntüsü (GSI), Android cihazlar için yapılandırılmış bir sistem görüntüsüdür. Android 9 veya sonraki bir sürümün yüklü olduğu tüm Android cihazların başarıyla çalıştırabileceği, değiştirilmemiş Android Açık Kaynak Projesi (AOSP) koduna sahip saf Android uygulamasıdır.

GSI'ler, VTS ve GSI'de CTS testleri çalıştırmak için kullanılır. Android cihazın sistem görüntüsü bir GSI ile değiştirilir ve ardından cihazın Android'in en son sürümüyle tedarikçi arayüzlerini doğru şekilde uyguladığından emin olmak için Tedarikçi Test Paketi (VTS) ve Uyumluluk Test Paketi (CTS) ile test edilir.

GSI yapılandırmaları (ve izin verilen farklılıklar) ile türleri hakkında ayrıntılı bilgi edinmek için GSI'leri kullanmaya başlamak üzere aşağıdaki bölümleri inceleyin. GSI kullanmaya hazır olduğunuzda, cihaz hedefiniz için GSI'yi indirip derleyin, ardından GSI'yi bir Android cihaza yükleyin.

GSI yapılandırması ve farklılıkları

Mevcut Android GSI'nin yapılandırması aşağıdaki gibidir:

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

  • CPU mimarisi Farklı CPU talimatları (ARM, x86 vb.) ve CPU bit sayısı (32 bit veya 64 bit) desteği

Treble uygunluk testleri için GSI hedefleri

Uyumluluk testi için kullanılan GSI, cihazın kullanıma sunulduğu Android sürümüne göre belirlenir.

Cihaz türü Derleme hedefi
Android 15 ile kullanıma sunulan cihazlar gsi_$arch-user (İmzalandı)
Android 14 ile kullanıma sunulan cihazlar gsi_$arch-user (İmzalandı)
Android 13 ile kullanıma sunulan cihazlar gsi_$arch-user (İmzalandı)
Android 12L ile kullanıma sunulan cihazlar gsi_$arch-user (İmzalandı)
Android 12 ile kullanıma sunulan cihazlar gsi_$arch-user (İmzalandı)
Android 11 ile kullanıma sunulan cihazlar gsi_$arch-user (İmzalandı)

Tüm GSI'ler Android 12 kod tabanından oluşturulur ve her CPU mimarisine karşılık gelen bir GSI ikili dosyası vardır (GSI oluşturma bölümündeki derleme hedeflerinin listesine bakın).

Android 12 GSI değişiklikleri

Android 12 ile kullanıma sunulan veya Android 12'ye güncellenen cihazlar, uygunluk testi için Android 12 GSI'lerini kullanmalıdır. Bu güncelleme, önceki GSI'lere kıyasla aşağıdaki önemli değişiklikleri içerir:

  • Hedef adı. Uygunluk testleri için GSI hedef adı gsi_$arch olarak değiştirildi. Hedef adı aosp_$arch olan GSI, Android uygulama geliştiricileri için saklanır. Satıcı arayüzünü test etmek için CTS-on-GSI test planı da azaltılmıştır.
  • Eski GSI kullanımdan kaldırılıyor. GSI 12, tamamen Treblized olmayan Android 8.0 veya 8.1 cihazları için geçerli olan geçici çözümleri kaldırır.
  • Userdebug SEPolicy. gsi_$arch adlı GSI, userdebug_plat_sepolicy.cil içeriyor. OEM'ye özgü vendor_boot-debug.img veya boot-debug.img'i yanıp sönerken /system/bin/init, userdebug_plat_sepolicy.cil'ı GSI system.img'den yükler. Ayrıntılar için Hata Ayıklama Ramdisk'i ile VTS Testi başlıklı makaleyi inceleyin.

Android 11 GSI değişiklikleri

Android 11 ile kullanıma sunulan veya Android 11'e güncellenen cihazlar, uygunluk testi için Android 11 GSI'lerini kullanmalıdır. Bu güncelleme, önceki GSI'lere kıyasla aşağıdaki önemli değişiklikleri içerir:

  • system_ext içerikleri. Android 11, yeni bir bölüm system_ext tanımlar. GSI, sistem uzantısı içeriklerini system/system_ext klasörünün altına yerleştirir.
  • 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 tedarikçi bölümündeki ro.apex.updatable sistem mülküne göre belirlenir. Ayrıntılar için Sistemi APEX güncellemelerini destekleyecek şekilde yapılandırma başlıklı makaleyi inceleyin.

Android 10 GSI değişiklikleri

Android 10 ile kullanıma sunulan veya Android 10'a güncellenen cihazlar, uygunluk testi için Android 10 GSI'lerini kullanmalıdır. Bu güncelleme, önceki GSI'lere kıyasla aşağıdaki önemli değişiklikleri içerir:

  • Kullanıcı oluşturma GSI, Android 10'dan itibaren kullanıcı derlemesine sahiptir. Android 10'da kullanıcı derlemesi GSI, GSI/VTS'de CTS uygunluk testinde kullanılabilir. Ayrıntılar için Hata Ayıklama Ramdisk'i ile VTS Testi başlıklı makaleyi inceleyin.
  • Ayrıştırılmamış biçim. Hedefleri olan GSI'ler aosp_$arch ayrıştırılmamış biçimde 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 derleme hedefi kullanımdan kaldırıldı. Android 8 veya 8.1'den Android 10'a ramdisk ve kök olarak sistem olmayan bir cihazla 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 dosyasını destekler.
  • Başlatmayı doğrulayın. GSI'yi kullanarak yalnızca cihazın kilidini açmanız gerekir. Önyüklemeyi doğrulamayı devre dışı bırakmanız gerekmez.

Android 9 GSI değişiklikleri

Android 9 ile kullanıma sunulan veya Android 9'a güncellenen cihazlar, uyumluluk testi için Android 9 GSI'lerini kullanmalıdır. Bu güncelleme, önceki GSI'lere kıyasla aşağıdaki önemli değişiklikleri içerir:

  • GSI ve emülatörü birleştirir. GSI'ler, aosp_arm64 ve aosp_x86 gibi emülatör ürünlerinin sistem resimlerinden 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 dizininin altına monte edebilirdi. Android 9'da sistem görüntüsünün kökü, cihazın kökü olarak monte edilir.
  • 64 bit bağlayıcı arayüzü. Android 8.x'te 32 bit GSI'ler 32 bit bağlayıcı arayüzünü kullanıyordu. Android 9, 32 bit bağlayıcı arayüzünü desteklemediğinden hem 32 bit GSI'ler hem de 64 bit GSI'ler 64 bit bağlayıcı arayüzünü kullanır.
  • VNDK yaptırımı. Android 8.1'de VNDK isteğe bağlıydı. Android 9'dan itibaren VNDK zorunlu olduğundan BOARD_VNDK_VERSION ayarlanmalıdır.
  • Uyumlu sistem mülkü. Android 9, uyumlu bir sistem mülkü (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, Keymaster 3 veya daha eski sürümleri uygulayan cihazların, çalışan sistem tarafından bildirilen sürüm bilgilerinin (ro.build.version.release ve ro.build.version.security_patch) bootloader tarafından bildirilen sürüm bilgileriyle eşleştiğini doğrulaması gerekiyordu. Bu bilgiler genellikle önyükleme resmi başlığından elde edilir.

Android 9 ve sonraki sürümlerde bu şart, tedarikçilerin GSI'yi başlatabilmesini sağlamak için değiştirildi. Daha açık belirtmek gerekirse, GSI tarafından bildirilen sürüm bilgileri tedarikçi firmanın önyükleyicisi tarafından bildirilen sürüm bilgileriyle eşleşmeyebileceği için Keymaster doğrulama yapmamalıdır. Keymaster 3 veya daha eski sürümleri uygulayan cihazlarda tedarikçilerin, doğrulamayı atlayacak şekilde Keymaster uygulamasını değiştirmesi (veya Keymaster 4'e yükseltmesi) gerekir. Anahtar yöneticisi hakkında ayrıntılı bilgi için Donanım destekli anahtar mağazası başlıklı makaleyi inceleyin.

GSI'leri indirme

Önceden derlenmiş GSI'leri ci.android.com adresindeki AOSP sürekli entegrasyon (CI) web sitesinden indirebilirsiniz. Donanım platformunuza yönelik GSI türü indirilemiyorsa belirli hedefler için GSI oluşturma hakkında ayrıntılı bilgi için aşağıdaki bölüme bakın.

GSI oluşturma

Android 9'dan itibaren 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 dalları, tüm güvenlik yamalarını ve GSI yamalarını içeren Android içeriğini içerir.

GSI oluşturmak için bir GSI dalından indirme ve GSI derleme hedefi seçerek Android kaynak ağacını oluşturun. 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 (system.img) ve out/target/product/generic_arm64 çıkış klasöründe görünür.

Örneğin, android12-gsi GSI dalında gsi_arm64-userdebug GSI derleme hedefini derlemek 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 derleme hedefleri, Android 9 veya sonraki sürümlerde kullanıma sunulan cihazlar içindir.

GSI adı CPU mimarisi Bağlayıcı arayüzü bit sayısı Sistem-root Derleme hedefi
gsi_arm ALARMI ETKİNLEŞTİR 32 Y gsi_arm-user
gsi_arm-userdebug
gsi_arm64 ARM64 64) Y gsi_arm64-user
gsi_arm64-userdebug
gsi_x86 x86 32 Y gsi_x86-user
gsi_x86-userdebug
gsi_x86_64 x86-64 64) Y gsi_x86_64-user
gsi_x86_64-userdebug

GSI'leri flaşlamayla ilgili şartlar

Android cihazların tasarımları farklı olabilir. Bu nedenle, tüm cihazlara uygulanabilecek genel bir GSI yanıp sönme komutu veya talimat grubu yoktur. Android cihazın üreticisine danışarak yanan ışıklarla ilgili talimatları inceleyin. Genel yönerge olarak aşağıdaki adımları uygulayın:

  1. Cihazın aşağıdakilere sahip olduğundan emin olun:
    • Tiz
    • Cihazların kilidini açma yöntemi (fastboot kullanılarak yazılım yüklenmeleri için)
    • fastboot üzerinden yanıp söndürülebilmesi için kilidi açık bir durum (fastboot'in en son sürümüne sahip olduğunuzdan emin olmak için Android kaynak ağacından derleyin.)
  2. Mevcut sistem bölümünü silin, ardından GSI'yi sistem bölümüne yükleyin.
  3. Kullanıcı verilerini silin ve gerekli diğer bölümlerdeki verileri (ör. kullanıcı verileri ve sistem bölümleri) temizleyin.
  4. Cihazı yeniden başlatın.

Örneğin, herhangi bir Pixel cihaza GSI yüklemek için:

  1. fastboot modunda başlatın ve bootloader'ın kilidini açın.
  2. fastbootd desteği sunan cihazların da aşağıdaki işlemleri yaparak fastbootd'a önyükleme yapması gerekir:
    $ fastboot reboot fastboot
  3. GSI'yi silin ve sistem bölümüne yükleyin:
    $ fastboot erase system
    $ fastboot flash system system.img
  4. Kullanıcı verilerini silin ve gerekli diğer bölümlerdeki verileri (ör. kullanıcı verileri ve sistem bölümleri) temizleyin:
    $ fastboot -w
  5. Yeniden bootloader'a önyükleme yapın:
    $ fastboot reboot-bootloader
  6. Sağlanan vbmeta'yı yanıp sönerken Doğrulanmış Başlatma doğrulamasını devre dışı bırakma:
    $ fastboot --disable-verification flash vbmeta vbmeta.img
  7. Reboot:
    $ fastboot reboot
Daha küçük sistem bölümlerine sahip Android 10 veya daha yeni cihazlarda GSI'yi yüklerken 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 üzere aşağıdaki komutu kullanın. Bu, GSI'yi flaşlamak için ek alan sağlar:
$ fastboot delete-logical-partition product_a
_a son eki, sistem bölümünün yuva kimliğiyle (bu örnekte system_a gibi) eşleşmelidir.

GSI'lere katkıda bulunma

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

  • GSI yaması oluşturma. DESSERT-gsi bir geliştirme dalı değildir ve yalnızca AOSP ana dalından seçilen kodları kabul eder. Bu nedenle, GSI yaması göndermek için şunları yapmanız gerekir:
    1. Yamayı AOSP main şubesine gönderin.
    2. DESSERT-gsi için yamayı seçin.
    3. Seçili öğelerin incelenmesi için hata kaydı oluşturun.
  • GSI hatalarını bildirme veya başka öneriler yapma. Hata bildirme bölümündeki talimatları inceleyin, ardından GSI hatalarına göz atın veya hata bildirin.

İpuçları

adb'yi kullanarak gezinme çubuğu modunu değiştirme

GSI ile önyükleme yapılırken gezinme çubuğu modu, tedarikçi firmanın geçersiz kılma işlemiyle yapılandırılır. Aşağıdaki adb komutunu çalışma zamanında çalıştırarak gezinme ç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.