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

सामान्य सिस्टम इमेज (जीएसआई), Android डिवाइसों के लिए कॉन्फ़िगरेशन में बदलाव करके बनाई गई सिस्टम इमेज होती है. इसे प्योर Android माना जाता है. इसमें Android Open Source Project (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 बिट) के साथ काम करता है.

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

  • टारगेट का नाम. कंप्लायंस टेस्ट के लिए, जीएसआई के टारगेट का नाम बदलकर gsi_$arch कर दिया गया है. Android ऐप्लिकेशन डेवलपर के लिए, टारगेट नाम aosp_$arch वाला GSI रखा गया है. वेंडर इंटरफ़ेस की टेस्टिंग के लिए, टेस्ट प्लान CTS-on-GSI को भी कम कर दिया जाता है.
  • लेगसी जीएसआई की सुविधा बंद कर दी गई है. GSI 12 Android 8.0 या 8.1 वर्शन वाले उन डिवाइसों के लिए उपलब्ध समाधानों को हटा देता है जो पूरी तरह से Treblized नहीं हैं.
  • Userdebug SEPolicy. जीएसआई gsi_$arch में userdebug_plat_sepolicy.cil शामिल हैं. OEM के हिसाब से तय किए गए vendor_boot-debug.img या boot-debug.img को फ़्लैश करते समय, /system/bin/init, GSI system.img से userdebug_plat_sepolicy.cil को लोड करेगा. ज़्यादा जानकारी के लिए, VTS Testing with Debug Ramdisk देखें.

Android 11 के जीएसआई में हुए बदलाव

Android 11 के साथ लॉन्च किए जा रहे या Android 11 पर अपडेट किए जा रहे डिवाइसों को कंप्लायंस टेस्टिंग के लिए, Android 11 जीएसआई का इस्तेमाल करना होगा. इसमें, जीएसआई के पिछले वर्शन के मुकाबले ये मुख्य बदलाव शामिल हैं:

  • system_ext का कॉन्टेंट. Android 11 में, एक नया पार्टिशन system_ext तय किया गया है. जीएसआई, सिस्टम एक्सटेंशन के कॉन्टेंट को system/system_ext फ़ोल्डर में रखता है.
  • APEXes. GSI में फ़्लैट किए गए और कंप्रेस किए गए, दोनों तरह के APEX शामिल होते हैं. इनमें से कौनसी प्रॉपर्टी इस्तेमाल करनी है, यह रन टाइम के दौरान वेंडर पार्टीशन में मौजूद सिस्टम प्रॉपर्टी ro.apex.updatable तय करती है. ज़्यादा जानकारी के लिए, APEX अपडेट के लिए सिस्टम को कॉन्फ़िगर करना लेख पढ़ें.

Android 10 के जीएसआई में हुए बदलाव

Android 10 के साथ लॉन्च होने वाले या Android 10 पर अपडेट किए गए डिवाइसों को कंप्लायंस टेस्टिंग के लिए, Android 10 के जीएसआई का इस्तेमाल करना होगा. इसमें, जीएसआई के पिछले वर्शन के मुकाबले ये मुख्य बदलाव शामिल हैं:

  • उपयोगकर्ता की संख्या बढ़ाना. जीएसआई में Android 10 का यूज़र बिल्ड है. Android 10 में, CTS-on-GSI/VTS के कंप्लायंस टेस्ट में, यूज़र बिल्ड जीएसआई का इस्तेमाल किया जा सकता है. ज़्यादा जानकारी के लिए, डिबग रैमडिस्क के साथ वीटीएस टेस्टिंग देखें.
  • अनस्पार्स फ़ॉर्मैट. टारगेट वाले GSI aosp_$arch, अनस्पार्स फ़ॉर्मैट में बनाए जाते हैं. अगर ज़रूरत हो, तो बिना स्पार्स किए गए जीएसआई को स्पार्स फ़ॉर्मैट में बदलने के लिए, img2simg का इस्तेमाल किया जा सकता है.
  • सिस्टम-ऐज़-रूट. लेगसी जीएसआई बिल्ड टारगेट aosp_$arch_a को बंद कर दिया गया है. जिन डिवाइसों को रैमडिस्क और नॉन-सिस्टम-ऐज़-रूट के साथ Android 8 या 8.1 से Android 10 पर अपग्रेड किया गया है उनके लिए, लेगसी जीएसआई aosp_$arch_ab का इस्तेमाल करें. अपग्रेड किए गए init में, ramdisk, OEM system.img को सपोर्ट करता है. इसमें सिस्टम-ऐज़-रूट लेआउट होता है.
  • बूट की पुष्टि करें. GSI का इस्तेमाल करने के लिए, आपको सिर्फ़ डिवाइस को अनलॉक करना होगा. वेरीफ़ाइड बूट की सुविधा बंद करना ज़रूरी नहीं है.

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 में, 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 के बारे में जानकारी के लिए, हार्डवेयर की मदद से सुरक्षित की गई कीस्टोर पर जाएं.

जीएसआई डाउनलोड करना

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

जीएसआई बनाना

Android 9 से, हर Android वर्शन की एक जीएसआई ब्रांच होती है. इसे AOSP पर DESSERT-gsi कहा जाता है. उदाहरण के लिए, DESSERT-gsi Android 12 पर जीएसआई ब्रांच है.android12-gsi जीएसआई ब्रांच में, 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 जीएसआई बिल्ड टारगेट

नीचे दिए गए जीएसआई बिल्ड टारगेट, Android 9 या इसके बाद के वर्शन पर लॉन्च होने वाले डिवाइसों के लिए हैं.

जीएसआई का नाम सीपीयू का आर्किटेक्चर Binder इंटरफ़ेस बिटनेस 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

GSIs को फ़्लैश करने से जुड़ी ज़रूरी शर्तें

Android डिवाइसों के डिज़ाइन अलग-अलग हो सकते हैं. इसलिए, सभी डिवाइसों पर जीएसआई फ़्लैश करने के लिए, कोई सामान्य कमांड या निर्देशों का सेट नहीं होता. फ़्लैश करने के बारे में साफ़ तौर पर दिए गए निर्देशों के लिए, Android डिवाइस बनाने वाली कंपनी से संपर्क करें. सामान्य दिशा-निर्देश के तौर पर, यह तरीका अपनाएं:

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

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

  1. fastboot मोड में बूट करें और बूटलोडर अनलॉक करें.
  2. fastbootd की सुविधा वाले डिवाइसों को fastbootd में बूट करने के लिए, यह तरीका अपनाना होगा:
    $ fastboot reboot fastboot
  3. सिस्टम पार्टिशन में GSI को मिटाएं और फ़्लैश करें:
    $ 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 या उसके बाद के वर्शन वाले ऐसे डिवाइसों पर जिनमें सिस्टम के छोटे पार्टीशन होते हैं, GSI फ़्लैश करते समय गड़बड़ी का यह मैसेज दिख सकता है:
    Resizing 'system_a'    FAILED (remote: 'Not enough space to resize partition')
    fastboot: error: Command failed
प्रॉडक्ट पार्टिशन को मिटाने और सिस्टम पार्टिशन के लिए जगह खाली करने के लिए, इस कमांड का इस्तेमाल करें. इससे GSI को फ़्लैश करने के लिए ज़्यादा जगह मिलती है:
$ fastboot delete-logical-partition product_a
पोस्टफ़िक्स _a, सिस्टम पार्टीशन के स्लॉट आईडी से मेल खाना चाहिए. उदाहरण के लिए, इस उदाहरण में system_a.

जीएसआई में योगदान देना

Android, GSI को बेहतर बनाने के लिए आपके योगदान का स्वागत करता है. इन तरीकों से, GSI को बेहतर बनाने में मदद की जा सकती है:

  • GSI पैच बनाना. DESSERT-gsi डेवलपमेंट ब्रांच नहीं है. यह सिर्फ़ AOSP के नए वर्शन की रिलीज़ ब्रांच (android16-release) से चेरीपिक स्वीकार करती है. इसलिए, GSI पैच सबमिट करने के लिए, आपको यह करना होगा:
    1. पैच को AOSP android16-release ब्रांच में सबमिट करें.
    2. पैच को DESSERT-gsi में चेरीपिक करें.
    3. चेरीपिक की समीक्षा कराने के लिए, गड़बड़ी की शिकायत करें.
  • GSI की गड़बड़ियों की शिकायत करना या अन्य सुझाव देना. गड़बड़ियों की रिपोर्ट करना में दिए गए निर्देशों को पढ़ें. इसके बाद, GSI गड़बड़ियों को ब्राउज़ करें या उनकी रिपोर्ट करें.

सलाह

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

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

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

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