सामान्य सिस्टम इमेज

सामान्य सिस्टम इमेज (जीएसआई) एक सिस्टम इमेज है. इसे Android डिवाइसों के लिए, कॉन्फ़िगरेशन में बदलाव करके तैयार किया जाता है. इसे प्योर Android माना जाता है. इसमें Android ओपन सोर्स प्रोजेक्ट (AOSP) का ऐसा कोड होता है जिसमें कोई बदलाव नहीं किया गया होता. इसे Android 9 या इसके बाद के वर्शन पर काम करने वाला कोई भी Android डिवाइस आसानी से रन कर सकता है.

जीएसआई का इस्तेमाल, VTS और CTS-on-GSI टेस्ट रन करने के लिए किया जाता है. Android डिवाइस की सिस्टम इमेज को जीएसआई से बदलकर, Vendor Test Suite (VTS) और Compatibility Test Suite (CTS) की मदद से टेस्ट किया जाता है. इससे यह पक्का किया जाता है कि डिवाइस, Android के नए वर्शन के साथ वेंडर इंटरफ़ेस को सही तरीके से लागू करता है.

जीएसआई का इस्तेमाल शुरू करने के लिए, जीएसआई के कॉन्फ़िगरेशन (और अनुमति वाले अंतर) और टाइप के बारे में जानने के लिए, यहां दिए गए सेक्शन देखें. जीएसआई का इस्तेमाल करने के लिए, अपने डिवाइस के टारगेट के लिए जीएसआई डाउनलोड करें और बनाएं. इसके बाद, जीएसआई को Android डिवाइस पर फ़्लैश करें.

जीएसआई का कॉन्फ़िगरेशन और अंतर

मौजूदा Android जीएसआई का कॉन्फ़िगरेशन यहां दिया गया है:

मौजूदा 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-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 डिवाइसों के डिज़ाइन अलग-अलग हो सकते हैं. इसलिए, सभी डिवाइसों पर जीएसआई फ़्लैश करने के लिए, कोई सामान्य कमांड या निर्देशों का सेट नहीं होता. जीएसआई फ़्लैश करने के निर्देशों के लिए, Android डिवाइस के मैन्युफ़ैक्चरर से संपर्क करें. सामान्य दिशा-निर्देश के तौर पर, यह तरीका अपनाएं:

  1. पक्का करें कि डिवाइस में ये चीज़ें हों:
    • ट्रेबल की सुविधा
    • डिवाइसों को अनलॉक करने का तरीका, ताकि उन्हें फ़्लैश किया जा सके fastboot
    • अनलॉक की गई स्थिति, ताकि इसे fastboot के ज़रिए फ़्लैश किया जा सके. यह पक्का करने के लिए कि आपके पास fastboot का नया वर्शन है, इसे Android सोर्स ट्री से बनाएं.
  2. मौजूदा सिस्टम पार्टिशन को मिटाएं. इसके बाद, जीएसआई को सिस्टम पार्टिशन पर फ़्लैश करें.
  3. उपयोगकर्ता का डेटा मिटाएं और अन्य ज़रूरी पार्टिशन (जैसे, उपयोगकर्ता का डेटा और सिस्टम पार्टिशन) से डेटा मिटाएं.
  4. डिवाइस को रीबूट करें.

उदाहरण के लिए, किसी भी Pixel डिवाइस पर जीएसआई फ़्लैश करने के लिए:

  1. मोड में बूट करें और बूटलोडर को अनलॉक करें.fastboot
  2. की सुविधा के साथ काम करने वाले डिवाइसों को भी fastbootd में बूट करना होगा. इसके लिए:fastbootd
    $ fastboot reboot fastboot
  3. सिस्टम पार्टिशन पर जीएसआई मिटाएं और फ़्लैश करें:
    $ fastboot erase system
    $ fastboot flash system system.img
  4. अगर आपका डिवाइस, Android Virtual Framework के साथ काम करता है, तो Protected Virtual Machine Firmware को फ़्लैश करें:
    $ fastboot flash pvmfw pvmfw.img
    
  5. उपयोगकर्ता का डेटा मिटाएं और अन्य ज़रूरी पार्टिशन (जैसे, उपयोगकर्ता का डेटा और सिस्टम पार्टिशन) से डेटा मिटाएं:
    $ fastboot -w
  6. बूटलोडर में वापस रीबूट करें:
    $ fastboot reboot-bootloader
  7. दिए गए vbmeta को फ़्लैश करते समय, वेरिफ़ाइड बूट की पुष्टि करने की सुविधा बंद करें:
    $ fastboot --disable-verification flash vbmeta vbmeta.img
  8. Reboot:
    $ fastboot reboot
Android 10 या इसके बाद के वर्शन वाले उन डिवाइसों पर, जिनमें सिस्टम पार्टिशन छोटे होते हैं, जीएसआई फ़्लैश करते समय गड़बड़ी का यह मैसेज दिख सकता है:
    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, जीएसआई के डेवलपमेंट में आपके योगदान का स्वागत करता है. जीएसआई को बेहतर बनाने में मदद करने के लिए, ये काम किए जा सकते हैं:

सलाह

adb का इस्तेमाल करके, नेविगेशन बार का मोड बदलना

जीएसआई के साथ बूट करने पर, वेंडर ओवरराइडिंग की मदद से, नेविगेशन बार का मोड कॉन्फ़िगर किया जाता है. रनटाइम के दौरान, adb का यह कमांड रन करके, नेविगेशन बार का मोड बदला जा सकता है.

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

यहां mode की वैल्यू threebutton, twobutton, gestural, वगैरह हो सकती है.