सामान्य सिस्टम इमेज (जीएसआई) एक सिस्टम इमेज होती है, जिसमें Android डिवाइसों के लिए अडजस्ट किए गए कॉन्फ़िगरेशन होते हैं. इसे शुद्ध Android के तौर पर माना जाता है. इसमें, बिना बदलाव किए Android Open Source Project (AOSP) का कोड इस्तेमाल किया जाता है. यह कोड, Android 9 या इसके बाद के वर्शन पर चलने वाले किसी भी Android डिवाइस पर काम कर सकता है.
जीएसआई का इस्तेमाल, VTS और जीएसआई पर CTS टेस्ट चलाने के लिए किया जाता है. Android डिवाइस की सिस्टम इमेज को जीएसआई से बदल दिया जाता है. इसके बाद, इसे विक्रेता टेस्ट सुइट (वीटीएस) और कंपैटबिलिटी टेस्ट सुइट (सीटीएस) की मदद से टेस्ट किया जाता है. इससे यह पक्का किया जाता है कि डिवाइस, Android के सबसे नए वर्शन के साथ वेंडर इंटरफ़ेस को सही तरीके से लागू करता है.
जीएसआई का इस्तेमाल शुरू करने के लिए, जीएसआई कॉन्फ़िगरेशन (और अनुमति वाले वैरिएंस) और टाइप के बारे में जानकारी पाने के लिए, नीचे दिए गए सेक्शन देखें. जीएसआई का इस्तेमाल करने के लिए, अपने डिवाइस टारगेट के लिए जीएसआई डाउनलोड और बनाएं. इसके बाद, किसी Android डिवाइस पर जीएसआई को फ़्लैश करें.
जीएसआई कॉन्फ़िगरेशन और वैरिएंस
मौजूदा Android GSI का यह कॉन्फ़िगरेशन है:
- ट्रेबल. GSI में, AIDL/HIDL पर आधारित आर्किटेक्चर में हुए बदलावों (जिन्हें Treble भी कहा जाता है) के लिए पूरी मदद मिलती है. इसमें AIDL इंटरफ़ेस और HIDL इंटरफ़ेस के लिए भी मदद मिलती है. GSI का इस्तेमाल, ऐसे किसी भी Android डिवाइस पर किया जा सकता है जो AIDL/HIDL वेंडर इंटरफ़ेस का इस्तेमाल करता है. (ज़्यादा जानकारी के लिए, आर्किटेक्चर से जुड़े संसाधन देखें.)
- फ़ाइल सिस्टम. जीएसआई, ext4 फ़ाइल सिस्टम का इस्तेमाल करता है.
मौजूदा 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
, GSIsystem.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 डिवाइस बनाने वाली कंपनी से संपर्क करें. सामान्य दिशा-निर्देश के तौर पर, यह तरीका अपनाएं:
- पक्का करें कि डिवाइस में ये चीज़ें मौजूद हों:
- ट्रेब्लाइज्ड
- डिवाइसों को अनलॉक करने का तरीका, ताकि उन्हें
fastboot
का इस्तेमाल करके फ़्लैश किया जा सके fastboot
के ज़रिए फ़्लैश करने के लिए, अनलॉक की गई स्थिति (यह पक्का करने के लिए कि आपके पासfastboot
का सबसे नया वर्शन है, इसे Android सोर्स ट्री से बनाएं.)
- मौजूदा सिस्टम पार्टीशन मिटाएं. इसके बाद, सिस्टम पार्टीशन में GSI को फ़्लैश करें.
- उपयोगकर्ता का डेटा मिटाएं और अन्य ज़रूरी हिस्सों (उदाहरण के लिए, उपयोगकर्ता का डेटा और सिस्टम पार्टीशन) से डेटा मिटाएं.
- डिवाइस को फिर से चालू करें.
उदाहरण के लिए, किसी भी Pixel डिवाइस पर जीएसआई फ़्लैश करने के लिए:
fastboot
मोड में बूट करें और बूटलोडर को अनलॉक करें.fastbootd
के साथ काम करने वाले डिवाइसों को भी, इन तरीकों सेfastbootd
में चालू करना होगा:$ fastboot reboot fastboot
- GSI को मिटाएं और सिस्टम पार्टीशन में फ़्लैश करें:
$ fastboot erase system $ fastboot flash system system.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, GSI के डेवलपमेंट में आपके योगदान का स्वागत करता है. जीएसआई को बेहतर बनाने में मदद करने के लिए, इनमें से कोई एक तरीका अपनाएं:
- जीएसआई पैच बनाना.
DESSERT-gsi
डेवलपमेंट ब्रैंच नहीं है और यह सिर्फ़ AOSP की मुख्य ब्रैंच से चुने गए बदलावों को स्वीकार करती है. इसलिए, GSI पैच सबमिट करने के लिए, आपको ये काम करने होंगे:- पैच को
AOSP
main
शाखा में सबमिट करें. DESSERT-gsi
में पैच को चुनें.- चुनिंदा डेटा की समीक्षा कराने के लिए, गड़बड़ी की शिकायत करें.
- पैच को
AOSP
- GSI के बग की शिकायत करना या अन्य सुझाव देना. गड़बड़ियों की शिकायत करना में दिए गए निर्देशों को पढ़ें. इसके बाद, जीएसआई की गड़बड़ियां ब्राउज़ करें या दर्ज करें.
सलाह
adb का इस्तेमाल करके, नेविगेशन बार का मोड बदलना
जीएसआई की मदद से चालू करने पर, नेविगेशन बार मोड को वेंडर ओवरराइड करने के ज़रिए कॉन्फ़िगर किया जाता है. रनटाइम में, नीचे दिया गया adb निर्देश चलाकर, नेविगेशन बार का मोड बदला जा सकता है.
adb exec-out cmd overlay enable-exclusive com.android.internal.systemui.navbar.mode
जहां mode, threebutton
, twobutton
, gestural
वगैरह हो सकता है.