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

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

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

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

जीएसआई कॉन्फ़िगरेशन और वैरिएंस

मौजूदा Android GSI का यह कॉन्फ़िगरेशन है:

मौजूदा 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 टारगेट का नाम बदलकर 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, GSI system.img से userdebug_plat_sepolicy.cil को लोड करेगा. ज़्यादा जानकारी के लिए, डबग रैमडिस्क की मदद से, वर्चुअल टेस्टिंग सिस्टम (वीटीएस) की जांच करना लेख पढ़ें.

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

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

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

Android 10 के GSI में हुए बदलाव

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

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

Android 9 GSI में हुए बदलाव

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

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

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

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

  1. fastboot मोड में बूट करें और बूटलोडर को अनलॉक करें.
  2. fastbootd के साथ काम करने वाले डिवाइसों को भी fastbootd में बूट करना होगा. इसके लिए, उन्हें:
    $ fastboot reboot fastboot
  3. GSI को मिटाएं और सिस्टम पार्टीशन में फ़्लैश करें:
    $ fastboot erase system
    $ fastboot flash system system.img
  4. उपयोगकर्ता का डेटा मिटाएं और अन्य ज़रूरी पार्टीशन से डेटा मिटाएं. उदाहरण के लिए, उपयोगकर्ता का डेटा और सिस्टम के पार्टीशन:
    $ fastboot -w
  5. डिवाइस को बूटलोडर मोड में फिर से चालू करने के लिए:
    $ fastboot reboot-bootloader
  6. दिए गए vbmeta को फ़्लैश करते समय, वेरिफ़ाइड बूट की पुष्टि करने की सुविधा बंद करें:
    $ fastboot --disable-verification flash vbmeta vbmeta.img
  7. 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 पैच बनाना. DESSERT-gsi डेवलपमेंट ब्रैंच नहीं है और यह सिर्फ़ AOSP की मुख्य ब्रैंच से चुने गए बदलावों को स्वीकार करती है. इसलिए, GSI पैच सबमिट करने के लिए, आपको ये काम करने होंगे:
    1. पैच को AOSP main शाखा में सबमिट करें.
    2. DESSERT-gsi में पैच को चुनें.
    3. चुनिंदा डेटा की समीक्षा कराने के लिए, गड़बड़ी की शिकायत करें.
  • GSI में मौजूद गड़बड़ियों की शिकायत करना या अन्य सुझाव देना. बग की शिकायत करना में दिए गए निर्देशों को पढ़ें. इसके बाद, जीएसआई के बग ब्राउज़ करें या उन्हें दर्ज करें.

सलाह

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

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

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

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