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

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

  • टारगेट का नाम. नीतियों का पालन करने से जुड़ी जांच के लिए, 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, दोनों शामिल होते हैं. कौनसा तरीका इस्तेमाल करना है, इसे रन टाइम के समय वेंडर पार्टीशन में सिस्टम प्रॉपर्टी ro.apex.updatable से तय किया जाता है. ज़्यादा जानकारी के लिए, APEX अपडेट के साथ काम करने के लिए सिस्टम को कॉन्फ़िगर करना लेख पढ़ें.

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

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

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

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

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

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

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

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

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

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

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

सलाह

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

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

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

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