सामान्य सिस्टम इमेज (जीएसआई) एक सिस्टम इमेज है. इसे Android डिवाइसों के लिए, कॉन्फ़िगरेशन में बदलाव करके तैयार किया जाता है. इसे प्योर Android माना जाता है. इसमें Android ओपन सोर्स प्रोजेक्ट (AOSP) का ऐसा कोड होता है जिसमें कोई बदलाव नहीं किया गया होता. इसे Android 9 या इसके बाद के वर्शन पर काम करने वाला कोई भी Android डिवाइस आसानी से रन कर सकता है.
जीएसआई का इस्तेमाल, VTS और CTS-on-GSI टेस्ट रन करने के लिए किया जाता है. Android डिवाइस की सिस्टम इमेज को जीएसआई से बदलकर, Vendor Test Suite (VTS) और Compatibility Test Suite (CTS) की मदद से टेस्ट किया जाता है. इससे यह पक्का किया जाता है कि डिवाइस, Android के नए वर्शन के साथ वेंडर इंटरफ़ेस को सही तरीके से लागू करता है.
जीएसआई का इस्तेमाल शुरू करने के लिए, जीएसआई के कॉन्फ़िगरेशन (और अनुमति वाले अंतर) और टाइप के बारे में जानने के लिए, यहां दिए गए सेक्शन देखें. जीएसआई का इस्तेमाल करने के लिए, अपने डिवाइस के टारगेट के लिए जीएसआई डाउनलोड करें और बनाएं. इसके बाद, जीएसआई को Android डिवाइस पर फ़्लैश करें.
जीएसआई का कॉन्फ़िगरेशन और अंतर
मौजूदा Android जीएसआई का कॉन्फ़िगरेशन यहां दिया गया है:
- ट्रेबल. जीएसआई में, AIDL/HIDL पर आधारित आर्किटेक्चर में किए गए बदलावों (इन्हें ट्रेबल भी कहा जाता है) के लिए पूरी तरह से सहायता उपलब्ध है. इसमें AIDL इंटरफ़ेस और HIDL इंटरफ़ेस के लिए सहायता भी शामिल है. AIDL/HIDL वेंडर इंटरफ़ेस का इस्तेमाल करने वाले किसी भी Android डिवाइस पर, जीएसआई का इस्तेमाल किया जा सकता है. (ज़्यादा जानकारी के लिए, आर्किटेक्चर के संसाधन देखें.)
- फ़ाइल सिस्टम. जीएसआई, ext4 फ़ाइल सिस्टम का इस्तेमाल करता है.
मौजूदा Android जीएसआई में, ये मुख्य अंतर शामिल हैं:
- सीपीयू का आर्किटेक्चर. अलग-अलग सीपीयू निर्देशों (ARM, x86 वगैरह) और सीपीयू बिटनेस (32 बिट या 64 बिट) के लिए सहायता.
ट्रेबल के कंप्लायंस टेस्ट के लिए जीएसआई टारगेट
कंप्लायंस टेस्टिंग के लिए इस्तेमाल किया जाने वाला जीएसआई, उस 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 पर अपडेट किए गए डिवाइसों के लिए, Android 12 के जीएसआई का इस्तेमाल करना ज़रूरी है. इसमें, पहले के जीएसआई के मुकाबले ये मुख्य बदलाव शामिल हैं:
- टारगेट का नाम. कंप्लायंस
टेस्ट के लिए, जीएसआई के टारगेट का नाम बदलकर
gsi_$archकर दिया गया है. Android ऐप्लिकेशन डेवलपर के लिए, टारगेट नेमaosp_$archवाला जीएसआई रखा गया है. वेंडर इंटरफ़ेस की टेस्टिंग के लिए, टेस्ट प्लानCTS-on-GSIको भी कम कर दिया गया है. - लेगसी जीएसआई को चरणबद्ध तरीके से बंद किया जा रहा है. जीएसआई 12 में, Android 8.0 या 8.1 वाले उन डिवाइसों के लिए वर्कअराउंड हटा दिए गए हैं जो पूरी तरह से ट्रेबल वाले नहीं हैं.
- यूज़रडीबग SEPolicy. जीएसआई
gsi_$archमेंuserdebug_plat_sepolicy.cilशामिल है. OEM के लिए खासvendor_boot-debug.imgयाboot-debug.imgको फ़्लैश करने पर,/system/bin/init, जीएसआईsystem.imgसेuserdebug_plat_sepolicy.cilलोड करेगा. ज़्यादा जानकारी के लिए, डीबग रैमडिस्क के साथ VTS टेस्टिंग रेफ़रंस देखें.
Android 11 के जीएसआई में किए गए बदलाव
कंप्लायंस टेस्टिंग के लिए, Android 11 के साथ लॉन्च होने वाले या Android 11 पर अपडेट किए गए डिवाइसों के लिए, Android 11 के जीएसआई का इस्तेमाल करना ज़रूरी है. इसमें, पहले के जीएसआई के मुकाबले ये मुख्य बदलाव शामिल हैं:
- system_ext का कॉन्टेंट. Android
11 में, नया पार्टिशन
system_extतय किया गया है. जीएसआई, सिस्टम एक्सटेंशन के कॉन्टेंट को फ़ोल्डर के अंतर्गत रखता हैsystem/system_ext. - APEX. जीएसआई में, फ़्लैटन और कंप्रेस किए गए, दोनों तरह के APEX शामिल हैं.
रन टाइम के दौरान, वेंडर पार्टिशन में मौजूद सिस्टम प्रॉपर्टी
ro.apex.updatableसे यह तय किया जाता है कि कौनसे APEX का इस्तेमाल करना है. ज़्यादा जानकारी के लिए, APEX अपडेट की सुविधा के लिए सिस्टम को कॉन्फ़िगर करना लेख देखें.
Android 10 के जीएसआई में किए गए बदलाव
कंप्लायंस टेस्टिंग के लिए, Android 10 के साथ लॉन्च होने वाले या Android 10 पर अपडेट किए गए डिवाइसों के लिए, Android 10 के जीएसआई का इस्तेमाल करना ज़रूरी है. इसमें, पहले के जीएसआई के मुकाबले ये मुख्य बदलाव शामिल हैं:
- यूज़र बिल्ड. जीएसआई में, Android 10 का यूज़र बिल्ड शामिल है. Android 10 में, the यूज़र बिल्ड जीएसआई का इस्तेमाल, CTS-on-GSI/VTS कंप्लायंस टेस्टिंग में किया जा सकता है. ज़्यादा जानकारी के लिए, डीबग रैमडिस्क के साथ VTS टेस्टिंग रेफ़रंस देखें.
- अनस्पार्स फ़ॉर्मैट. टारगेट वाले जीएसआई, अनस्पार्स फ़ॉर्मैट में बनाए जाते हैं.
aosp_$archज़रूरत पड़ने पर, अनस्पार्स जीएसआई को स्पार्स फ़ॉर्मैट में बदलने के लिए,img2simgका इस्तेमाल किया जा सकता है. - सिस्टम-ऐज़-रूट. लेगसी जीएसआई बिल्ड टारगेट नाम वाले
aosp_$arch_aको चरणबद्ध तरीके से बंद कर दिया गया है. Android 8 या 8.1 से Android 10 पर अपग्रेड किए गए उन डिवाइसों के लिए, जिनमें रैमडिस्क और नॉन-सिस्टम-ऐज़-रूट की सुविधा है, लेगसी जीएसआईaosp_$arch_abका इस्तेमाल करें. रैमडिस्क में अपग्रेड किया गयाinitसिस्टम-ऐज़-रूट लेआउट वाले OEM system.img के साथ काम करता है. - वेरिफ़ाई बूट. जीएसआई का इस्तेमाल करने के लिए, आपको सिर्फ़ डिवाइस को अनलॉक करना होगा. वेरिफ़ाई बूट की सुविधा बंद करना ज़रूरी नहीं है.
Android 9 के जीएसआई में किए गए बदलाव
कंप्लायंस टेस्टिंग के लिए, Android 9 के साथ लॉन्च होने वाले या Android 9 पर अपडेट किए गए डिवाइसों के लिए, Android 9 के जीएसआई का इस्तेमाल करना ज़रूरी है. इसमें, पहले के जीएसआई के मुकाबले ये मुख्य बदलाव शामिल हैं:
- जीएसआई और एम्युलेटर को मर्ज करना. जीएसआई, एम्युलेटर प्रॉडक्ट की सिस्टम
इमेज से बनाए जाते हैं. जैसे,
aosp_arm64औरaosp_x86. - सिस्टम-ऐज़-रूट. Android के पिछले वर्शन में, A/B अपडेट की सुविधा के साथ काम न करने वाले डिवाइस, सिस्टम इमेज को
/systemडायरेक्ट्री में माउंट कर सकते थे. Android 9 में, सिस्टम इमेज के रूट को डिवाइस के रूट के तौर पर माउंट किया जाता है. - 64-बिट बाइंडर इंटरफ़ेस. Android 8.x में, 32-बिट जीएसआई 32-बिट बाइंडर इंटरफ़ेस का इस्तेमाल करते थे. Android 9 32-बिट बाइंडर इंटरफ़ेस के साथ काम नहीं करता. इसलिए, 32-बिट और 64-बिट, दोनों तरह के जीएसआई, 64-बिट बाइंडर इंटरफ़ेस का इस्तेमाल करते हैं.
- वीएनडीके एनफ़ोर्समेंट. Android 8.1 में, वीएनडीके का इस्तेमाल करना ज़रूरी नहीं था.
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 और इसके बाद के वर्शन में, इस ज़रूरत को बदल दिया गया है, ताकि वेंडर, जीएसआई को बूट कर सकें. खास तौर पर, Keymaster को पुष्टि नहीं करनी चाहिए क्योंकि जीएसआई के वर्शन की जानकारी, वेंडर के बूटलोडर के वर्शन की जानकारी से मेल नहीं खा सकती. Keymaster 3 या इससे पहले के वर्शन को लागू करने वाले डिवाइसों के लिए, वेंडर को Keymaster के लागू करने के तरीके में बदलाव करना होगा, ताकि पुष्टि की सुविधा को छोड़ा जा सके . इसके अलावा, वे Keymaster 4 पर अपग्रेड कर सकते हैं. Keymaster के बारे में ज़्यादा जानने के लिए, हार्डवेयर-बैकड कीस्टोर देखें.
जीएसआई डाउनलोड करना
तैयार किए गए जीएसआई, AOSP के कंटीन्यूअस इंटिग्रेशन (सीआई) वेबसाइट ci.android.com से डाउनलोड किए जा सकते हैं. अगर आपके हार्डवेयर प्लैटफ़ॉर्म के लिए, जीएसआई का टाइप डाउनलोड के लिए उपलब्ध नहीं है, तो खास टारगेट के लिए जीएसआई बनाने के बारे में जानने के लिए, अगला सेक्शन देखें.
जीएसआई बनाना
Android 9 से, हर Android वर्शन के लिए, AOSP पर
DESSERT-gsi नाम की एक जीएसआई ब्रांच होती है. उदाहरण के लिए,
android12-gsi Android
12 पर जीएसआई ब्रांच है. जीएसआई ब्रांच में, Android का कॉन्टेंट शामिल होता है. इसमें
सभी सुरक्षा पैच और
जीएसआई पैच लागू होते हैं.
जीएसआई बनाने के लिए, Android सोर्स ट्री सेट अप करें. इसके लिए,
जीएसआई ब्रांच से डाउनलोड करें और
जीएसआई बिल्ड
टारगेट चुनें. अपने डिवाइस के लिए, जीएसआई
का सही वर्शन तय करने के लिए, नीचे दी गई बिल्ड टारगेट टेबल का इस्तेमाल करें. बिल्ड पूरा होने के बाद, जीएसआई, सिस्टम
इमेज (यानी, system.img) बन जाता है. यह आउटपुट फ़ोल्डर
out/target/product/generic_arm64 में दिखता है.
उदाहरण के लिए, जीएसआई ब्रांच android12-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 जीएसआई बिल्ड टारगेट
यहां दिए गए जीएसआई बिल्ड टारगेट, Android 9 या इसके बाद के वर्शन पर लॉन्च होने वाले डिवाइसों के लिए हैं.
| जीएसआई का नाम | सीपीयू आर्किटेक्चर | बाइंडर इंटरफ़ेस बिटनेस | सिस्टम-ऐज़-रूट | बिल्ड टारगेट |
|---|---|---|---|---|
gsi_arm |
सेट करें | 32 | Y | gsi_arm-usergsi_arm-userdebug |
gsi_arm64 |
ARM64 | 64 | Y | gsi_arm64-usergsi_arm64-userdebug |
gsi_x86 |
x86 | 32 | Y | gsi_x86-usergsi_x86-userdebug |
gsi_x86_64 |
X86-64 | 64 | Y | gsi_x86_64-usergsi_x86_64-userdebug |
जीएसआई फ़्लैश करने की ज़रूरी शर्तें
Android डिवाइसों के डिज़ाइन अलग-अलग हो सकते हैं. इसलिए, सभी डिवाइसों पर जीएसआई फ़्लैश करने के लिए, कोई सामान्य कमांड या निर्देशों का सेट नहीं होता. जीएसआई फ़्लैश करने के निर्देशों के लिए, Android डिवाइस के मैन्युफ़ैक्चरर से संपर्क करें. सामान्य दिशा-निर्देश के तौर पर, यह तरीका अपनाएं:
- पक्का करें कि डिवाइस में ये चीज़ें हों:
- ट्रेबल की सुविधा
- डिवाइसों को अनलॉक करने का तरीका, ताकि उन्हें फ़्लैश किया जा सके
fastboot - अनलॉक की गई स्थिति, ताकि इसे
fastbootके ज़रिए फ़्लैश किया जा सके. यह पक्का करने के लिए कि आपके पासfastbootका नया वर्शन है, इसे Android सोर्स ट्री से बनाएं.
- मौजूदा सिस्टम पार्टिशन को मिटाएं. इसके बाद, जीएसआई को सिस्टम पार्टिशन पर फ़्लैश करें.
- उपयोगकर्ता का डेटा मिटाएं और अन्य ज़रूरी पार्टिशन (जैसे, उपयोगकर्ता का डेटा और सिस्टम पार्टिशन) से डेटा मिटाएं.
- डिवाइस को रीबूट करें.
उदाहरण के लिए, किसी भी Pixel डिवाइस पर जीएसआई फ़्लैश करने के लिए:
- मोड में बूट करें और
बूटलोडर को अनलॉक करें.
fastboot - की सुविधा के साथ काम करने वाले डिवाइसों को भी
fastbootdमें बूट करना होगा. इसके लिए:fastbootd$ fastboot reboot fastboot
- सिस्टम पार्टिशन पर जीएसआई मिटाएं और फ़्लैश करें:
$ fastboot erase system $ fastboot flash system system.img
- अगर आपका डिवाइस, Android Virtual Framework के साथ काम करता है, तो Protected Virtual Machine Firmware को फ़्लैश करें:
$ 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, जीएसआई के डेवलपमेंट में आपके योगदान का स्वागत करता है. जीएसआई को बेहतर बनाने में मदद करने के लिए, ये काम किए जा सकते हैं:
- जीएसआई पैच बनाना.
DESSERT-gsiडेवलपमेंट ब्रांच नहीं है. यह सिर्फ़ AOSP की नई रिलीज़ ब्रांच (android17-release) से चेरीपिक स्वीकार करती है. इसलिए, जीएसआई पैच सबमिट करने के लिए, यह तरीका अपनाएं:- AOSP की
AOSP
android17-releaseब्रांच पर पैच सबमिट करें. DESSERT-gsiपर पैच को चेरीपिक करें.- चेरीपिक की समीक्षा कराने के लिए, गड़बड़ी की शिकायत करें.
- AOSP की
AOSP
- जीएसआई में मौजूद गड़बड़ियों की शिकायत करना या अन्य सुझाव देना. गड़बड़ियों की शिकायत करना में दिए गए निर्देश देखें. इसके बाद, जीएसआई में मौजूद गड़बड़ियों को ब्राउज़ करें या उनकी शिकायत करें.
सलाह
adb का इस्तेमाल करके, नेविगेशन बार का मोड बदलना
जीएसआई के साथ बूट करने पर, वेंडर ओवरराइडिंग की मदद से, नेविगेशन बार का मोड कॉन्फ़िगर किया जाता है. रनटाइम के दौरान, adb का यह कमांड रन करके, नेविगेशन बार का मोड बदला जा सकता है.
adb exec-out cmd overlay enable-exclusive com.android.internal.systemui.navbar.mode
यहां mode की वैल्यू threebutton, twobutton,
gestural, वगैरह हो सकती है.