एंड्रॉइड 12 का फैब्रिकेटेड ओवरले एपीआई रूटलेस थीम को वापस लाता है

याद रखें कि एंड्रॉइड 8 ने आपके डिवाइस को थीम बनाना कैसे आसान बना दिया? याद रखें वह कितना मज़ेदार था? खैर, यह एंड्रॉइड 12 में एक बदलाव के साथ वापस आ गया है।

पूर्ण स्थिर एंड्रॉइड 12 रिलीज़ बिल्कुल नजदीक है, और Google के पास भी है स्रोत कोड पोस्ट किया इसके AOSP रेपो के लिए। वहाँ है Android 12 में बहुत कुछ नया है, जिसमें फैब्रिकेटेड ओवरले नामक संसाधन ओवरले का एक अतिरिक्त शामिल है। सिस्टम में उपयोग किए जाने वाले गतिशील परिवर्तनों को प्रबंधित करने में मदद करने के लिए एपीआई का क्या मतलब था सामग्री आप और मोनेट बहुत बड़ी चीज़ में बदल सकता है - कम से कम Android 13 रिलीज़ होने तक।

पृष्ठभूमि

मिशाल रहमान ने इस नई एपीआई की खोज की और इसे मेरे ध्यान में लाया। वह बिना एंड्रॉइड 12 में विभिन्न संसाधन मूल्यों का परीक्षण करने के लिए शेल कमांड का उपयोग कर रहा था ओवरले एपीके को मैन्युअल रूप से संकलित करने के लिए, और उन्होंने सोचा कि यह रूट किए गए उपकरणों के लिए एक दिलचस्प ऐप विचार बन सकता है। जब उन्होंने इसे मेरे ध्यान में लाया, तो मैंने एंड्रॉइड 12 के स्रोत कोड पर बहुत ध्यान दिया और कुछ ऐसा देखा जो मुझे लगा कि काफी दिलचस्प था। मैंने जो पाया उसका परीक्षण किया, और अब हम यहाँ हैं - जैसा कि यह पता चला है, फैब्रिकेटेड ओवरले एपीआई का उपयोग रूटलेस थीम को वापस लाने के लिए किया जा सकता है। इससे पहले कि मैं यहां जो कुछ हो रहा है, उसमें बहुत आगे बढ़ूं, मैं समझाऊंगा कि फैब्रिकेटेड ओवरले वास्तव में क्या हैं।

फैब्रिकेटेड ओवरले क्या हैं?

फैब्रिकेटेड ओवरले एंड्रॉइड 12 में पेश किया गया एक नया फीचर है। वे क्लासिक रनटाइम रिसोर्स ओवरले (आरआरओ) के समान हैं जो एंड्रॉइड के पास पिछले कुछ वर्षों से मौजूद हैं। आरआरओ और फैब्रिकेटेड ओवरले दोनों अलग-अलग अनुप्रयोगों के लिए अलग-अलग संसाधनों को ओवरराइड कर सकते हैं। आप बूलियन को असत्य से सत्य (या इसके विपरीत) में बदल सकते हैं, सेट कर सकते हैं कि आप स्टेटस बार को कितना बड़ा बनाना चाहते हैं, इत्यादि।

हालाँकि, फैब्रिकेटेड ओवरले में आरआरओ से कुछ उल्लेखनीय अंतर हैं। एक के लिए, आपको एक ओवरले एपीके जेनरेट करने और फिर उसे इंस्टॉल करने की आवश्यकता नहीं है। इसके बजाय, आप बस एंड्रॉइड को बताएं कि आप किस एप्लिकेशन के लिए कौन से मान बदलना चाहते हैं और यह आपके परिवर्तनों को एक ओवरले के रूप में पंजीकृत करने का ख्याल रखता है जिसे आप सक्षम कर सकते हैं।

वे आरआरओ की तुलना में कुछ अधिक सीमित भी हैं। एंड्रॉइड 11 से पहले, आरआरओ लगभग किसी भी संसाधन को ओवरराइड कर सकते थे: बूलियन, पूर्णांक, आयाम, विशेषताएँ, लेआउट और यहां तक ​​​​कि कच्ची डेटा फ़ाइलें। एंड्रॉइड 11 ने आरआरओ के काम करने के तरीके में कुछ बदलाव किए हैं, जिससे ओवरराइडिंग लेआउट अब वास्तव में संभव नहीं है, हालांकि इसने आरआरओ को समग्र रूप से अधिक स्थिर बना दिया है।

दूसरी ओर, फैब्रिकेटेड ओवरले, केवल उन मानों को ओवरराइड कर सकते हैं जिन्हें पूर्णांक के रूप में दर्शाया जा सकता है। इसमें पूर्णांक (डुह), आयाम, बूलियन और रंग शामिल हैं। आप उनका उपयोग कच्चे डेटा संसाधनों, लेआउट, स्ट्रिंग्स या सरणियों को ओवरराइड करने के लिए नहीं कर सकते - कम से कम आसानी से नहीं। यह एपीआई में कुछ हद तक एक मनमानी सीमा है: यह केवल टाइप्डवैल्यू क्लास द्वारा परिभाषित पूर्णांक मान और संसाधन श्रेणियों को स्वीकार करता है। टाइप्डवैल्यू करता है सहायता स्ट्रिंग्स और अन्य संसाधन प्रकार, लेकिन केवल उनके संसाधन को संदर्भित करने के लिए, उनके वास्तविक डेटा को रखने के लिए नहीं।

हालाँकि, वे सीमाएँ फैब्रिकेटेड ओवरले: मटेरियल यू और मोनेट इफेक्ट्स के इच्छित उद्देश्य के लिए बहुत बड़ी बात नहीं हैं। फैब्रिकेटेड ओवरले सिस्टम के लिए रीबूट किए बिना या एपीके संकलित होने की प्रतीक्षा किए बिना, तुरंत रंग और आयाम ओवरले उत्पन्न करना और लागू करना आसान बनाते हैं।

अब, आम तौर पर, यह रूट किए गए डिवाइस वाले लोगों के लिए लाभ उठाने के लिए एक और साफ-सुथरी एपीआई होगी। जब तक कोई निर्माता-निर्मित खामी न हो (जैसे कि सैमसंग उपकरणों पर सिनर्जी लाभ उठाती है), ओवरले केवल रूट एक्सेस वाले तीसरे पक्ष द्वारा स्थापित किए जा सकते हैं। हालाँकि, यह सबसे अच्छा हिस्सा है - Google एंड्रॉइड 12 में एक छेद को पैच करना भूल गया।

बिना रूट के निर्मित ओवरले

एंड्रॉइड 8 ने नई ओवरले मैनेजर सर्विस (या ओएमएस) एपीआई पेश की, और लोगों को बहुत जल्दी पता चला कि ओवरले एपीके को सामान्य ऐप्स के रूप में इंस्टॉल किया जा सकता है और फिर एडीबी का उपयोग करके सक्षम किया जा सकता है। अफसोस की बात है कि Google ने इसे एंड्रॉइड 9 में पैच कर दिया, और तब से, सिस्टम में केवल उसी कुंजी के साथ हस्ताक्षरित ओवरले को गतिशील रूप से इंस्टॉल किया जा सकता है।

जैसा कि यह पता चला है, एंड्रॉइड 12 के फैब्रिकेटेड ओवरले में एक खामी है जो एंड्रॉइड 8 में मौजूद एक की याद दिलाती है: उन्हें रूट एक्सेस या हस्ताक्षर-स्तरीय अनुमतियों की आवश्यकता नहीं है। उन्हें पंजीकृत करने के लिए बस शेल उपयोगकर्ता (यानी, एडीबी) के रूप में चलने वाली किसी चीज़ की आवश्यकता है।

यह बिल्कुल स्पष्ट है कि Google का इरादा फैब्रिकेटेड ओवरले को केवल रूट और सिस्टम उपयोगकर्ताओं के लिए सुलभ बनाना है। इन्हें बनाने के लिए ADB कमांड कार्यान्वयन है, और यदि निष्पादित उपयोगकर्ता रूट नहीं है तो यह नहीं चलेगा। खामी यह है कि चेक केवल कमांड में है, वास्तविक एपीआई में नहीं, जिसका अर्थ है कि हम थोड़े से काम से इसका लाभ उठा सकते हैं।

एडीबी ऑन-डिवाइस

अब काफी समय से, एंड्रॉइड में वायरलेस ADB सुविधा मौजूद है। यह एक कंप्यूटर (या ADB बाइनरी और नेटवर्क एक्सेस वाली कोई भी चीज़) को किसी डिवाइस से वायरलेस तरीके से कनेक्ट होने देता है। यह अधिकतर उन एंड्रॉइड डिवाइसों के लिए है जिनमें उपयोगकर्ता-सुलभ यूएसबी कनेक्शन नहीं हैं, जैसे स्मार्टवॉच और टीवी। इसके अलावा, एंड्रॉइड 11 से पहले, आपको सक्रिय करने के लिए एक वायर्ड एडीबी कनेक्शन की आवश्यकता होती थी वायरलेस मोड।

एंड्रॉइड 11 आधिकारिक तौर पर फोन और टैबलेट में वायरलेस एडीबी लाया है। यह युग्मन और प्रमाणीकरण कोड के साथ क्लासिक वायरलेस एडीबी की तुलना में थोड़ा अधिक जटिल है, लेकिन इसे उपयोगकर्ता द्वारा पूरी तरह से डिवाइस पर सक्रिय किया जा सकता है, जब तक डिवाइस वाईफाई से कनेक्ट है। इसका मतलब है कि आपके डिवाइस से एडीबी के माध्यम से आपके डिवाइस से कनेक्ट करना संभव है, और आपको बस एक वाईफाई की आवश्यकता है कनेक्शन.

किसी ऐप में एलिवेटेड एपीआई का उपयोग करना

ऐसे कई कारण हैं जिनकी वजह से आप अपने ऐप में प्रतिबंधित एपीआई का उपयोग करना चाहेंगे। आमतौर पर, ऐसा इसलिए होता है क्योंकि वे आपको आवश्यक कुछ विशेष कार्यक्षमता प्रदान करते हैं। जब तक आपके लिए आवश्यक एपीआई में शेल कमांड कार्यान्वयन है, तब तक किसी ऐप से इसका उपयोग करना बहुत आसान है। आपको बस रूट (या एडीबी) के रूप में एक शेल प्रक्रिया बनानी है, सही कमांड चलाना है, और परिणाम, यदि कोई हो, को पार्स करना है।

यदि एपीआई में शेल कार्यान्वयन नहीं है, या शेल कार्यान्वयन में आपकी ज़रूरत की कोई चीज़ गायब है तो क्या होगा? यदि आप रूट किए गए डिवाइस पर हैं, तो आप कुछ इस तरह का उपयोग कर सकते हैं libRootJava. libRootJava आपको एंड्रॉइड फ्रेमवर्क एपीआई के साथ इंटरैक्ट करने की सुविधा देता है जैसे कि आपका ऐप रूट उपयोगकर्ता के रूप में चल रहा हो। यह शेल कमांड चलाने की तुलना में अधिक सुविधाजनक और तेज़ दोनों है, क्योंकि यह सभी एक ही भाषा में है, और आपको स्ट्रिंग्स को मैन्युअल रूप से पार्स करने के बारे में चिंता करने की ज़रूरत नहीं है। इसकी कुछ सीमाएँ हैं, लेकिन अधिकांश भाग के लिए, यह बढ़िया काम करता है।

libRootJava API काफी लचीला है। आप इसे रूट के बजाय शेल उपयोगकर्ता के रूप में चलाने के लिए अनुकूलित कर सकते हैं। शुक्र है, आपको ऐसा करने की ज़रूरत नहीं है, क्योंकि किसी ने इसे पहले ही बना लिया है, और इसे कहा जाता है शिज़ुकु. शिज़ुकु लगभग मैजिक मैनेजर और लिबरूटजावा के संयोजन जैसा है।

शिज़ुकु प्रबंधक ऐप आपको शेल उपयोगकर्ता के रूप में चलने वाली एक प्रक्रिया स्थापित करने में मार्गदर्शन करता है जिसे शिज़ुकु एक्सेस कर सकता है। शिज़ुकु एपीआई लाइब्रेरी को ऐप्स में लागू किया जा सकता है ताकि उन्हें सिस्टम एपीआई तक पहुंच मिल सके जैसे कि वे शेल उपयोगकर्ता थे। यह libRootJava की तुलना में बहुत अधिक केंद्रीकृत प्रक्रिया है, क्योंकि शिज़ुकु एपीआई लाइब्रेरी को लागू करने वाले प्रत्येक ऐप द्वारा इसका उपयोग करने से पहले शिज़ुकु को केवल एक बार स्थापित करने की आवश्यकता होती है। यदि आप रुचि रखते हैं कि शिज़ुकु कैसे काम करता है और आप इसे अपने ऐप में कैसे एकीकृत कर सकते हैं, मेरे पास इसके लिए यहां एक मार्गदर्शिका है.

शिज़ुकु और फैब्रिकेटेड ओवरले

अब तक, आप संभवतः देख सकते हैं कि यह कहाँ जा रहा है। हम शेल उपयोगकर्ता के रूप में फैब्रिकेटेड ओवरले एपीआई तक पहुंचने के लिए शिज़ुकु जैसी सेवा का उपयोग कर सकते हैं, और हम सभी डिवाइस पर शेल-स्तरीय एक्सेस प्राप्त करने के लिए एंड्रॉइड 11 के वायरलेस एडीबी सुविधा का उपयोग कर सकते हैं। चूंकि रूट उपयोगकर्ता प्रतिबंध केवल फैब्रिकेटेड ओवरले शेल कमांड में मौजूद है, न कि वास्तविक एपीआई में, शेल उपयोगकर्ता के रूप में चलना इसे सीधे उपयोग करने के लिए पर्याप्त है।

कार्यान्वयन: लाइब्रेरी और नमूना ऐप

कार्यान्वयन विवरण के बारे में क्या? खैर, मैंने आपको इसके लिए भी कवर कर लिया है।

इसकी तैयारी के लिए, मैंने दोनों को बनाया लाइब्रेरी और एक पूरी तरह कार्यात्मक नमूना ऐप उस लाइब्रेरी का उपयोग करना।

पुस्तकालय स्वयं अधिकतर सुविधा के लिए है। यह कुछ छिपे हुए सिस्टम एपीआई को लपेटता है और आपको शिज़ुकु अनुमतियों को संभालने के लिए कुछ सुविधाजनक तरीके देता है। यह लचीला भी है, इसलिए यदि आपके पास इसे पुनः प्राप्त करने का कोई अन्य तरीका है तो आप IOverlayManager API का अपना उदाहरण प्रदान कर सकते हैं।

नमूना ऐप दिखाता है कि आप शिज़ुकु का उपयोग करके लाइब्रेरी को कैसे कार्यान्वित कर सकते हैं। यह एक पूरी तरह कार्यात्मक और उपयोगी ऐप भी है। मुख्य पृष्ठ वर्तमान में पंजीकृत फैब्रिकेटेड ओवरले प्रदर्शित करता है जो इसके माध्यम से बनाए गए थे, लक्ष्य ऐप द्वारा समूहीकृत किए गए थे। आप उन्हें वहां से सक्षम, अक्षम और हटा भी सकते हैं।

नीचे दिए गए "ओवरले जोड़ें" बटन पर टैप करने से आप सभी ओवरले करने योग्य ऐप्स की सूची पर पहुंच जाते हैं। आपको जो चाहिए उसे ढूंढने के लिए खोजें या स्क्रॉल करें और उस पर टैप करें। फिर आप उन संसाधनों की सूची देखने के लिए स्क्रीन के नीचे "जोड़ें" बटन दबा सकते हैं जिन्हें उस ऐप में ओवरराइड किया जा सकता है। एक संसाधन का चयन करें, उसका मान निर्धारित करें और जितने मान आप बदलना चाहते हैं उतने मानों के लिए दोहराएं। "सहेजें" बटन दबाएं, एक नाम दर्ज करें, पुष्टि करें, और आपको मुख्य स्क्रीन पर वापस लाया जाएगा, अब नया ओवरले दिखाएगा, जो सक्षम होने के लिए तैयार है।

यहां ऐप से कुछ स्क्रीनशॉट हैं, मिशाल रहमान को धन्यवाद।

एक साइड नोट के रूप में, मेरे पास एक सामान्य ओवरले प्रबंधक ऐप भी है जिसे... ओवरले मैनेजर. पूर्व संकलित ऐप ही है केवल मेरे पैट्रियन पर उपलब्ध है, लेकिन स्रोत कोड निःशुल्क उपलब्ध है जो कोई भी इसे संकलित या संशोधित करना चाहता है।

निष्कर्ष

एंड्रॉइड 12 में नया फैब्रिकेटेड ओवरले एपीआई बहुत बढ़िया है, ज्यादातर इसलिए क्योंकि इसमें रूट की जरूरत नहीं है। यह फुल-ऑन आरआरओ एपीके जितना परिष्कृत नहीं हो सकता है, लेकिन यह आपको रूट एक्सेस के बिना बहुत अधिक लचीलापन देता है।

GitHub पर फैब्रिकेट ओवरले ऐप देखें

यदि आपके पास Android 12 चलाने वाला उपकरण है और आप इसे आज़माना चाहते हैं, तो ऊपर लिंक किए गए GitHub रिपॉजिटरी को देखें। रिलीज़ अनुभाग में डाउनलोड करने और उपयोग करने के लिए एक एपीके होगा। जितपैक का उपयोग करके लाइब्रेरी को आपके अपने एप्लिकेशन में शामिल करना आसान होना चाहिए।

बेशक, आपको इस सुविधा के लंबे समय तक बने रहने की उम्मीद नहीं करनी चाहिए। Google वास्तव में तृतीय-पक्ष ओवरले को पसंद नहीं करता है, इसलिए Android 13 रिलीज़ होने पर यह लगभग निश्चित रूप से ठीक हो जाएगा। हालाँकि, इस बीच, जब तक यह चले तब तक इसका आनंद लें!