सामान्य सिस्टम इमेज (जीएसआई), Android डिवाइसों के लिए अडजस्ट किए गए कॉन्फ़िगरेशन वाली सिस्टम इमेज होती है. इसे शुद्ध Android के तौर पर माना जाता है. इसमें, बिना बदलाव किए Android Open Source Project (AOSP) कोड का इस्तेमाल किया जाता है. यह Android 9 या इसके बाद के वर्शन पर चलने वाले किसी भी Android डिवाइस पर काम कर सकता है.
जीएसआई का इस्तेमाल, VTS और CTS-on-GSI टेस्ट चलाने के लिए किया जाता है. किसी Android डिवाइस की सिस्टम इमेज को GSI से बदल दिया जाता है. इसके बाद, Vendor Test Suite (VTS) और Compatibility Test Suite (CTS) की मदद से इसकी जांच की जाती है. इससे यह पक्का किया जाता है कि डिवाइस, Android के नए वर्शन के साथ वेंडर इंटरफ़ेस को सही तरीके से लागू करता है.
जीएसआई का इस्तेमाल शुरू करने के लिए, जीएसआई कॉन्फ़िगरेशन (और अनुमति वाले वैरिएंस) और टाइप के बारे में जानकारी पाने के लिए, नीचे दिए गए सेक्शन देखें. जीएसआई का इस्तेमाल करने के लिए, अपने डिवाइस टारगेट के लिए जीएसआई डाउनलोड और बनाएं. इसके बाद, किसी Android डिवाइस पर जीएसआई को फ़्लैश करें.
जीएसआई कॉन्फ़िगरेशन और वैरिएंस
मौजूदा Android GSI का यह कॉन्फ़िगरेशन है:
- ट्रेबल. जीएसआई में, एआईडीएल/एचआईडीएल पर आधारित आर्किटेक्चर में हुए बदलावों (जिन्हें ट्रेबल भी कहा जाता है) के लिए पूरी सहायता शामिल है. इसमें एआईडीएल इंटरफ़ेस और एचआईडीएल इंटरफ़ेस के लिए सहायता भी शामिल है. GSI का इस्तेमाल, ऐसे किसी भी Android डिवाइस पर किया जा सकता है जो AIDL/HIDL वेंडर इंटरफ़ेस का इस्तेमाल करता है. (ज़्यादा जानकारी के लिए, आर्किटेक्चर से जुड़े संसाधन देखें.)
- फ़ाइल सिस्टम. जीएसआई, ext4 फ़ाइल सिस्टम का इस्तेमाल करता है.
मौजूदा Android GSI में ये मुख्य अंतर शामिल हैं:
- सीपीयू का आर्किटेक्चर. सीपीयू के अलग-अलग निर्देशों (ARM, x86 वगैरह) और सीपीयू बिटनेस (32 बिट या 64 बिट) के साथ काम करना.
Treble के कंप्लायंस टेस्ट के लिए जीएसआई टारगेट
कंप्लायंस टेस्ट के लिए इस्तेमाल किए जाने वाले जीएसआई का पता, उस Android वर्शन से चलता है जिस पर डिवाइस लॉन्च होता है.
डिवाइस किस तरह का है | टारगेट बनाना |
---|---|
Android 15 के साथ लॉन्च होने वाले डिवाइस | gsi_$arch-user (साइन किया गया) |
Android 14 के साथ लॉन्च होने वाले डिवाइस | gsi_$arch-user (साइन किया गया) |
Android 13 के साथ लॉन्च होने वाले डिवाइस | gsi_$arch-user (साइन किया गया) |
Android 12L के साथ लॉन्च होने वाले डिवाइस | gsi_$arch-user (साइन किया गया) |
Android 12 वर्शन के साथ लॉन्च होने वाले डिवाइस | gsi_$arch-user (साइन किया गया) |
Android 11 वर्शन के साथ लॉन्च होने वाले डिवाइस | gsi_$arch-user (साइन किया गया) |
सभी जीएसआई, Android 12 कोडबेस से बनाए जाते हैं. साथ ही, हर सीपीयू आर्किटेक्चर के लिए एक जीएसआई बाइनरी होती है. जीएसआई बनाना में, बिल्ड टारगेट की सूची देखें.
Android 12 के जीएसआई में हुए बदलाव
Android 12 के साथ लॉन्च होने वाले या उस पर अपडेट किए गए डिवाइसों को, नीति का पालन करने से जुड़ी जांच के लिए, Android 12 GSI का इस्तेमाल करना होगा. इसमें, पहले के जीएसआई की तुलना में ये मुख्य बदलाव शामिल हैं:
- टारगेट का नाम. कंप्लायंस टेस्ट के लिए, जीएसआई टारगेट का नाम बदलकर
gsi_$arch
कर दिया गया है. टारगेट के नामaosp_$arch
वाले जीएसआई को Android ऐप्लिकेशन डेवलपर के लिए रखा जाता है. वेंडर इंटरफ़ेस की जांच के लिए, जांच के प्लानCTS-on-GSI
को भी छोटा किया गया है. - लेगसी जीएसआई को बंद कर दिया गया है. GSI 12, Android 8.0 या 8.1 वाले उन डिवाइसों के लिए, काम करने के तरीकों को हटा देता है जो पूरी तरह से Treble के साथ काम नहीं करते.
- Userdebug SEPolicy. जीएसआई
gsi_$arch
मेंuserdebug_plat_sepolicy.cil
शामिल है. OEM के हिसाब से तय किए गएvendor_boot-debug.img
याboot-debug.img
को फ़्लैश करने पर,/system/bin/init
, GSIsystem.img
सेuserdebug_plat_sepolicy.cil
लोड करेगा. ज़्यादा जानकारी के लिए, डबग रैमडिस्क की मदद से, वर्चुअल टेस्टिंग सिस्टम (वीटीएस) की जांच करना लेख पढ़ें.
Android 11 के जीएसआई में हुए बदलाव
Android 11 के साथ लॉन्च होने वाले या उस पर अपडेट किए गए डिवाइसों को, कंप्लायंस टेस्टिंग के लिए Android 11 जीएसआई का इस्तेमाल करना होगा. इसमें, पहले के जीएसआई की तुलना में ये मुख्य बदलाव शामिल हैं:
- system_ext कॉन्टेंट. Android
11 में एक नया पार्टिशन
system_ext
जोड़ा गया है. जीएसआई, सिस्टम एक्सटेंशन के कॉन्टेंट कोsystem/system_ext
फ़ोल्डर में डालता है. - APEX. जीएसआई में, फ़्लैट किए गए और कंप्रेस किए गए APEX, दोनों शामिल होते हैं.
रनटाइम के दौरान, वेंडर पार्टीशन में मौजूद सिस्टम प्रॉपर्टी
ro.apex.updatable
से यह तय होता है कि किसका इस्तेमाल करना है. ज़्यादा जानकारी के लिए, APEX अपडेट के साथ काम करने के लिए सिस्टम को कॉन्फ़िगर करना लेख पढ़ें.
Android 10 के जीएसआई में हुए बदलाव
Android 10 के साथ लॉन्च होने वाले या उस पर अपडेट किए गए डिवाइसों को, कंप्लायंस टेस्टिंग के लिए Android 10 के जीएसआई का इस्तेमाल करना होगा. इसमें, पहले के जीएसआई की तुलना में ये मुख्य बदलाव शामिल हैं:
- उपयोगकर्ताओं की संख्या. जीएसआई में, Android 10 का यूज़र बिल्ड है. Android 10 में, यूज़र बिल्ड जीएसआई का इस्तेमाल, CTS-on-GSI/VTS कंप्लायंस टेस्टिंग में किया जा सकता है. ज़्यादा जानकारी के लिए, डबग रॅमडिस्क की मदद से वीटीएस टेस्टिंग पर जाएं.
- बिना अलग किए गए फ़ॉर्मैट. टारगेट वाले जीएसआई
aosp_$arch
, बिना स्पैर्स किए गए फ़ॉर्मैट में बनाए जाते हैं. ज़रूरत पड़ने पर, बिना स्पैर्स किए गए GSI को स्पैर्स फ़ॉर्मैट में बदलने के लिए,img2simg
का इस्तेमाल किया जा सकता है. - सिस्टम-ऐज़-रूट.
aosp_$arch_a
नाम वाले लेगसी जीएसआई बिल्ड टारगेट को बंद कर दिया गया था. जिन डिवाइसों को Android 8 या 8.1 से Android 10 पर अपग्रेड किया गया है और जिनमें रैमडिस्क और नॉन-सिस्टम-ऐज़-रूट है उनके लिए, लेगसी GSIaosp_$arch_ab
का इस्तेमाल करें. रैमडिस्क में अपग्रेड किया गयाinit
, OEM system.img के साथ काम करता है. - बूट की पुष्टि करें. GSI का इस्तेमाल करने के लिए, आपको सिर्फ़ डिवाइस अनलॉक करना होगा. 'बूट की पुष्टि करें' सुविधा को बंद करना ज़रूरी नहीं है.
Android 9 के जीएसआई में हुए बदलाव
Android 9 के साथ लॉन्च होने वाले या उस पर अपडेट किए गए डिवाइसों को, कंप्लायंस टेस्टिंग के लिए Android 9 के जीएसआई का इस्तेमाल करना होगा. इसमें, पहले के जीएसआई की तुलना में ये मुख्य बदलाव शामिल हैं:
- जीएसआई और एम्युलेटर को मर्ज करता है. जीएसआई, एमुलेटर प्रॉडक्ट की सिस्टम इमेज से बनाए जाते हैं. उदाहरण के लिए,
aosp_arm64
औरaosp_x86
. - सिस्टम-ऐज़-रूट. Android के पिछले वर्शन में, ऐसे डिवाइसों पर सिस्टम इमेज को
/system
डायरेक्ट्री में माउंट किया जा सकता था जो A/B अपडेट के साथ काम नहीं करते थे. Android 9 में, सिस्टम इमेज का रूट, डिवाइस के रूट के तौर पर माउंट किया जाता है. - 64-बिट बाइंडर इंटरफ़ेस. Android 8.x में, 32-बिट जीएसआई ने 32-बिट बाइंडर इंटरफ़ेस का इस्तेमाल किया. Android 9, 32-बिट बाइंडर इंटरफ़ेस के साथ काम नहीं करता. इसलिए, 32-बिट जीएसआई और 64-बिट जीएसआई, दोनों 64-बिट बाइंडर इंटरफ़ेस का इस्तेमाल करते हैं.
- VNDK एनफ़ोर्समेंट. Android 8.1 में, VNDK का इस्तेमाल करना ज़रूरी नहीं था.
Android 9 से, वीएनडीके का इस्तेमाल करना ज़रूरी है. इसलिए,
BOARD_VNDK_VERSION
को सेट करना ज़रूरी है. - सिस्टम की ऐसी प्रॉपर्टी जिस पर यह सुविधा काम करती है. Android
9, काम करने वाली सिस्टम प्रॉपर्टी (
PRODUCT_COMPATIBLE_PROPERTY_OVERRIDE := true
) के लिए ऐक्सेस की जांच करने की सुविधा चालू करता है.
Android 9 में Keymaster से जुड़े बदलाव
Android के पुराने वर्शन में, Keymaster 3 या उससे पहले के वर्शन का इस्तेमाल करने वाले डिवाइसों के लिए, यह पुष्टि करना ज़रूरी था कि चल रहे सिस्टम से मिली वर्शन की जानकारी (ro.build.version.release
और ro.build.version.security_patch
), बूटलोडर से मिली वर्शन की जानकारी से मेल खाती है या नहीं. आम तौर पर, यह जानकारी बूट इमेज के हेडर से मिलती थी.
Android 9 और उसके बाद के वर्शन में, इस शर्त में बदलाव किया गया है, ताकि वेंडर GSI को बूट कर सकें. खास तौर पर, Keymaster को पुष्टि नहीं करनी चाहिए, क्योंकि हो सकता है कि GSI के वर्शन की जानकारी, वेंडर के बूटलोडर के वर्शन की जानकारी से मेल न खाए. Keymaster 3 या इससे पहले के वर्शन का इस्तेमाल करने वाले डिवाइसों के लिए, पुष्टि को छोड़ने के लिए वेंडर को Keymaster के लागू होने के तरीके में बदलाव करना होगा (या Keymaster 4 पर अपग्रेड करना होगा). Keymaster के बारे में ज़्यादा जानने के लिए, हार्डवेयर से सुरक्षित कीवर्डस्टोर लेख पढ़ें.
जीएसआई डाउनलोड करना
पहले से बने जीएसआई को ci.android.com पर मौजूद, AOSP के सीआई (कंटिन्यूअस इंटिग्रेशन) वाली वेबसाइट से डाउनलोड किया जा सकता है. अगर आपके हार्डवेयर प्लैटफ़ॉर्म के लिए जीएसआई टाइप डाउनलोड करने के लिए उपलब्ध नहीं है, तो खास टारगेट के लिए जीएसआई बनाने के बारे में जानने के लिए, नीचे दिए गए सेक्शन को पढ़ें.
जीएसआई बनाना
Android 9 से शुरू होकर, Android के हर वर्शन में AOSP पर DESSERT-gsi
नाम की एक जीएसआई शाखा होती है. उदाहरण के लिए, android12-gsi
, Android 12 पर जीएसआई शाखा है. जीएसआई शाखाओं में, Android का कॉन्टेंट शामिल होता है. इसमें सभी सुरक्षा पैच और जीएसआई पैच लागू होते हैं.
जीएसआई बनाने के लिए, Android सोर्स ट्री सेट अप करें. इसके लिए, जीएसआई की किसी शाखा से डाउनलोड करें और जीएसआई बिल्ड टारगेट चुनें. अपने डिवाइस के लिए सही GSI
वर्शन तय करने के लिए, नीचे दी गई बिल्ड टारगेट टेबल का इस्तेमाल करें. बिल्ड पूरा होने के बाद, जीएसआई सिस्टम इमेज (system.img
) बन जाती है और आउटपुट फ़ोल्डर out/target/product/generic_arm64
में दिखती है.
उदाहरण के लिए, GSI शाखा android12-gsi
पर GSI बिल्ड टारगेट
gsi_arm64-userdebug
बनाने के लिए,
नीचे दिए गए कमांड चलाएं.
$ 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 बिल्ड टारगेट
यहां दिए गए GSI बिल्ड टारगेट, Android 9 या इसके बाद के वर्शन पर लॉन्च होने वाले डिवाइसों के लिए हैं.
जीएसआई का नाम | सीपीयू आर्क | बाइंडर इंटरफ़ेस का बिटनेस | System-as-root | टारगेट बनाना |
---|---|---|---|---|
gsi_arm |
सेट करें | 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 |
जीएसआई फ़्लैश करने से जुड़ी ज़रूरी शर्तें
Android डिवाइसों के डिज़ाइन अलग-अलग हो सकते हैं. इसलिए, सभी डिवाइसों पर GSI फ़्लैश करने के लिए, कोई सामान्य कमांड या निर्देशों का सेट नहीं है. फ़्लैश करने के बारे में साफ़ तौर पर निर्देश पाने के लिए, Android डिवाइस बनाने वाली कंपनी से संपर्क करें. सामान्य दिशा-निर्देश के तौर पर, यह तरीका अपनाएं:
- पक्का करें कि डिवाइस में ये चीज़ें मौजूद हों:
- Treblized
- डिवाइसों को अनलॉक करने का तरीका, ताकि उन्हें
fastboot
का इस्तेमाल करके फ़्लैश किया जा सके fastboot
के ज़रिए फ़्लैश करने के लिए, अनलॉक की गई स्थिति (यह पक्का करने के लिए कि आपके पासfastboot
का सबसे नया वर्शन है, इसे Android सोर्स ट्री से बनाएं.)
- मौजूदा सिस्टम पार्टीशन मिटाएं. इसके बाद, सिस्टम पार्टीशन में GSI को फ़्लैश करें.
- उपयोगकर्ता का डेटा मिटाएं और ज़रूरी अन्य पार्टीशन से डेटा मिटाएं. उदाहरण के लिए, उपयोगकर्ता का डेटा और सिस्टम के पार्टीशन.
- डिवाइस को रीबूट करें.
उदाहरण के लिए, किसी भी Pixel डिवाइस पर GSI फ़्लैश करने के लिए:
fastboot
मोड में बूट करें और बूटलोडर को अनलॉक करें.fastbootd
के साथ काम करने वाले डिवाइसों को भीfastbootd
में बूट करना होगा. इसके लिए, उन्हें:$ fastboot reboot fastboot
- GSI को मिटाएं और सिस्टम पार्टीशन में फ़्लैश करें:
$ fastboot erase system $ fastboot flash system system.img
- अगर आपके डिवाइस पर Android Virtual Framework काम करता है, तो Protected Virtual Machine फ़र्मवेयर को फ़्लैश करें:
$ fastboot flash pvmfw pvmfw.img
- उपयोगकर्ता का डेटा मिटाएं और अन्य ज़रूरी पार्टीशन से डेटा मिटाएं. उदाहरण के लिए, उपयोगकर्ता का डेटा और सिस्टम के पार्टीशन:
$ fastboot -w
- डिवाइस को बूटलोडर मोड में फिर से रीबूट करने के लिए:
$ fastboot reboot-bootloader
- दिए गए vbmeta को फ़्लैश करते समय, वेरिफ़ाइड बूट की पुष्टि करने की सुविधा बंद करें:
$ 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
, सिस्टम पार्टीशन के स्लॉट आईडी से मेल खाना चाहिए. जैसे, इस उदाहरण में system_a
.
जीएसआई में योगदान देना
Android, जीएसआई के डेवलपमेंट में आपके योगदान का स्वागत करता है. जीएसआई को बेहतर बनाने में मदद करने के लिए, इन तरीकों का इस्तेमाल करें:
- GSI पैच बनाना.
DESSERT-gsi
डेवलपमेंट ब्रैंच नहीं है. यह सिर्फ़ AOSP के नए वर्शन की ब्रैंच (android15-qpr2-release
) से चुने गए बदलावों को स्वीकार करता है. इसलिए, GSI पैच सबमिट करने के लिए, आपको ये काम करने होंगे:- पैच को AOSP के
android15-qpr2-release
ब्रैंच पर सबमिट करें. DESSERT-gsi
में पैच को चुनें.- चुनिंदा डेटा की समीक्षा कराने के लिए, गड़बड़ी की शिकायत करें.
- पैच को AOSP के
- GSI में मौजूद गड़बड़ियों की शिकायत करना या अन्य सुझाव देना. बग की शिकायत करना में दिए गए निर्देशों को पढ़ें. इसके बाद, जीएसआई के बग ब्राउज़ करें या उन्हें दर्ज करें.
सलाह
adb का इस्तेमाल करके, नेविगेशन बार का मोड बदलना
GSI के साथ बूट करने पर, नेविगेशन बार मोड को वेंडर की ओर से बदलकर कॉन्फ़िगर किया जाता है. रनटाइम में, नीचे दिए गए adb निर्देश को चलाकर, नेविगेशन बार का मोड बदला जा सकता है.
adb exec-out cmd overlay enable-exclusive com.android.internal.systemui.navbar.mode
यहां mode की वैल्यू threebutton
, twobutton
,
gestural
वगैरह हो सकती है.