Genel sistem görüntüsü (GSI), Android cihazlar için yapılandırmaları ayarlanmış bir sistem görüntüsüdür. Android 9 veya sonraki sürümlerin yüklü olduğu tüm Android cihazlarda sorunsuz bir şekilde çalışabilen, değiştirilmemiş Android Açık Kaynak Projesi (AOSP) koduyla saf Android uygulaması olarak kabul edilir.
GSI'ler, VTS ve CTS-on-GSI testlerini çalıştırmak için kullanılır. Android cihazın sistem görüntüsü GSI ile değiştirilir, ardından cihazın satıcı arayüzlerini Android'in en yeni sürümüyle doğru ş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 aşağıdaki bölümleri inceleyerek GSI yapılandırmaları (ve izin verilen varyanslar) ve türleri hakkında ayrıntılı bilgi edinin. Bir GSI kullanmaya hazır olduğunuzda cihazınızın hedefi için GSI'yi indirip oluşturun, 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:
- Treble. GSI, AIDL/HIDL tabanlı mimari değişiklikler (Treble olarak da bilinir) için tam destek içerir. Bu değişiklikler arasında AIDL arayüzleri ve HIDL arayüzleri için destek de yer alır. GSI'yi AIDL/HIDL satıcı arayüzlerini kullanan tüm Android cihazlarda kullanabilirsiniz. (Daha ayrıntılı bilgi için Mimari kaynakları bölümüne bakın.)
- Dosya sistemi. GSI, ext4 dosya sistemini kullanır.
Mevcut Android GSI'sinde aşağıdaki önemli farklılıklar bulunur:
- CPU mimarisi. Farklı CPU talimatları (ARM, x86 vb.) ve CPU bitliği (32 bit veya 64 bit) desteği.
Treble uygunluk testleri için GSI hedefleri
Uygunluk testi için kullanılan GSI, cihazın piyasaya sürüldüğü Android sürümüne göre belirlenir.
Cihaz türü | Hedef oluşturma |
---|---|
Android 15 ile kullanıma sunulan cihazlar | gsi_$arch-user (İmzalı) |
Android 14 ile kullanıma sunulan cihazlar | gsi_$arch-user (İmzalı) |
Android 13 ile kullanıma sunulan cihazlar | gsi_$arch-user (İmzalı) |
Android 12L ile kullanıma sunulan cihazlar | gsi_$arch-user (İmzalı) |
Android 12 ile kullanıma sunulan cihazlar | gsi_$arch-user (İmzalı) |
Android 11 ile kullanıma sunulan cihazlar | gsi_$arch-user (İmzalı) |
Tüm GSI'ler Android 12 kod tabanından oluşturulur ve her CPU mimarisinin karşılık gelen bir GSI ikilisi vardır (GSI'leri oluşturma bölümündeki derleme hedefleri 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 değişiklikler arasında, önceki GSI'lerde yapılan aşağıdaki önemli değişiklikler yer alır:
- 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. Test planıCTS-on-GSI
satıcı arayüzünü test etmek için de kısaltılmıştır. - Eski GSI kullanımdan kaldırıldı. GSI 12 tamamen Treble'a uygun olmayan Android 8.0 veya 8.1 cihazları destekleyen geçici çözümleri kaldırır.
- Userdebug SEPolicy. GSI
gsi_$arch
userdebug_plat_sepolicy.cil
içerir. OEM'e özelvendor_boot-debug.img
veyaboot-debug.img
yanıp sönerken/system/bin/init
, GSI'danuserdebug_plat_sepolicy.cil
yüklenirsystem.img
. 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 değişiklikler arasında, önceki GSI'lerde yapılan aşağıdaki önemli değişiklikler yer alır:
- system_ext içerikleri. Android
11, yeni bir bölüm
system_ext
tanımlar. GSI, sistem uzantısı içeriklerinisystem/system_ext
klasörüne yerleştirir. - APEXes. 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ündeki
ro.apex.updatable
sistem özelliği tarafından belirlenir. Referans Sistemi APEX güncellemelerini destekleyecek şekilde yapılandırma
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 değişiklikler arasında, önceki GSI'lerde yapılan aşağıdaki önemli değişiklikler yer alır:
- Kullanıcı derlemesi. GSI, Android 10'dan kullanıcı derlemesine sahiptir. Android 10'da, kullanıcı derlemesi GSI, CTS-on-GSI/VTS uygunluk testinde kullanılabilir. Ayrıntılar için Hata Ayıklama Ramdisk'i ile VTS Testi başlıklı makaleyi inceleyin.
- Seyrek olmayan biçim. Hedefler içeren GSI'lar
aosp_$arch
seyrek olmayan biçimde oluşturulur. Gerekirseimg2simg
kullanarak seyrek olmayan bir GSI'yi seyrek biçime dönüştürebilirsiniz. - System-as-root.
aosp_$arch_a
adlı eski GSI derleme hedefinin desteği sonlandırıldı. Android 8 veya 8.1'den ramdisk ve sistem dışı kök ile Android 10'a yükseltilen cihazlar için eski GSI'yiaosp_$arch_ab
kullanın. Yükseltilmişinit
, ramdisk'te OEM system.img'yi destekler. Bu, system-as-root düzenine sahiptir. - Başlatmayı doğrulayın. GSI'yı kullanırken yalnızca cihazın kilidini açmanız gerekir. Doğrulanmış başlatma özelliğini 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, uygunluk testi için Android 9 GSI'lerini kullanmalıdır. Bu değişiklikler arasında, önceki GSI'lerde yapılan aşağıdaki önemli değişiklikler yer alır:
- GSI ile emülatörü birleştirir. GSI'lar, emülatör ürünlerinin sistem görüntülerinden (ör.
aosp_arm64
veaosp_x86
) oluşturulur. - System-as-root. Android'in önceki sürümlerinde, A/B güncellemelerini desteklemeyen cihazlar sistem görüntüsünü
/system
dizini altına monte edebiliyordu. 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 özelliği. Android 9, uyumlu bir sistem özelliği (
PRODUCT_COMPATIBLE_PROPERTY_OVERRIDE := true
) için erişim kontrolü yapılmasını sağlar.
Android 9 Keymaster değişiklikleri
Android'in önceki sürümlerinde, Keymaster 3 veya daha düşük bir sürümü 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 tür bilgiler genellikle önyükleme görüntüsü başlığından alınır.
Android 9 ve sonraki sürümlerde, satıcıların GSI'yi başlatabilmesi için bu şart değiştirildi. Daha net bir ifadeyle, GSI tarafından bildirilen sürüm bilgileri, satıcının önyükleyicisi tarafından bildirilen sürüm bilgileriyle eşleşmeyebileceğinden Keymaster doğrulama yapmamalıdır. Keymaster 3 veya daha düşük sürümleri uygulayan cihazlarda, satıcıların Keymaster uygulamasını doğrulama adımını atlayacak şekilde değiştirmesi (veya Keymaster 4'e yükseltmesi) gerekir. Keymaster ile ilgili ayrıntılar için Donanım Destekli Anahtar Deposu başlıklı makaleyi inceleyin.
GSI'ları 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 oluşturma hakkında ayrıntılı bilgi edinmek üzere 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 dalı vardır (örneğin, android12-gsi
, Android 12'deki GSI dalıdır). GSI dalları, Android'in içeriğini içerir. Bu içerikte tüm güvenlik yamaları ve GSI yamaları uygulanmıştır.
GSI oluşturmak için Android kaynak ağacını bir GSI dalından indirerek ve GSI derleme hedefi seçerek ayarlayın. 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ü (yani system.img
) olur ve çıkış klasöründe out/target/product/generic_arm64
görünür.
Örneğin, GSI dalında android12-gsi
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 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 | Binder arayüzü bit sayısı | System-as-root | Hedef oluşturma |
---|---|---|---|---|
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 yükleme koşulları
Android cihazlar farklı tasarımlara sahip olabilir. Bu nedenle, GSI'yi tüm cihazlara uygulamak için genel bir komut veya talimat seti yoktur. Açıkça belirtilen flaşlama talimatları için Android cihazın üreticisine danışın. Genel bir kılavuz olarak aşağıdaki adımları kullanın:
- Cihazın aşağıdakilere sahip olduğundan emin olun:
- Treblized
- Cihazların kilidini açma yöntemi (böylece
fastboot
kullanılarak flashlanabilirler) fastboot
üzerinden flaşlanabilmesi için kilidi açılmış durum (fastboot
'ın en son sürümüne sahip olduğunuzdan emin olmak için Android kaynak ağacından oluşturun.)
- Mevcut sistem bölümünü silin ve GSI'yi sistem bölümüne yükleyin.
- Kullanıcı verilerini silin ve diğer gerekli bölümlerdeki (örneğin, kullanıcı verileri ve sistem bölümleri) verileri temizleyin.
- Cihazı yeniden başlatın.
Örneğin, herhangi bir Pixel cihaza GSI yüklemek için:
fastboot
modunda başlatın ve bootloader'ın kilidini açın.fastbootd
'ı destekleyen cihazlarınfastbootd
'a da önyüklenmesi gerekir. Bunun için:$ fastboot reboot fastboot
- GSI'yi silip sistem bölümüne yükleyin:
$ fastboot erase system $ fastboot flash system system.img
- Cihazınız Android Virtual Framework'ü destekliyorsa Protected Virtual Machine Firmware'i yükleyin:
$ fastboot flash pvmfw pvmfw.img
- 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
- Bootloader'a geri dönmek için yeniden başlatın:
$ fastboot reboot-bootloader
- Sağlanan vbmeta'yı yüklerken Doğrulanmış Başlatma doğrulamasını devre dışı bırakın:
$ fastboot --disable-verification flash vbmeta vbmeta.img
- Reboot:
$ fastboot reboot
Resizing 'system_a' FAILED (remote: 'Not enough space to resize partition') fastboot: error: Command failed
$ fastboot delete-logical-partition product_a
_a
soneki, sistem bölümünün yuva kimliğiyle eşleşmelidir. Örneğin, bu örnekte system_a
ile eşleşir.
GSI'lere katkıda bulunma
Android, GSI geliştirmeye katkılarınızı bekliyor. Aşağıdaki yöntemlerle GSI'nin iyileştirilmesine yardımcı olabilirsiniz:
- GSI yaması oluşturma.
DESSERT-gsi
bir geliştirme dalı değildir ve yalnızca AOSP'nin en son sürüm dalından (android16-release
) seçilenleri kabul eder. Bu nedenle, bir GSI yaması göndermek için:- Yama dosyasını AOSP
android16-release
dalına gönderin. - Yamayı
DESSERT-gsi
'ya uygulayın. - Cherrypick'in incelenmesi için hata bildirin.
- Yama dosyasını AOSP
- GSI hatalarını bildirme veya başka önerilerde bulunma Hata bildirme başlıklı makaledeki talimatları inceleyin, ardından GSI hatalarına göz atın veya bu hataları bildirin.
İpuçları
adb'yi kullanarak gezinme çubuğu modunu değiştirme
GSI ile başlatma sırasında gezinme çubuğu modu, tedarikçi 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.