Android समुदाय के कुछ प्रतिभाशाली लोगों ने यह पता लगाया कि एनिमेटेड .gif को अपनी होम कुंजी के रूप में उपयोग करने के लिए अपने नेवबार को कैसे संशोधित किया जाए, और इसे करने के लिए Appuals के पास मार्गदर्शिका है!
चेतावनी:यह काफी शामिल प्रक्रिया है। आपको अपने SystemUI.apk को डीकंपाइल करना होगा, कुछ महत्वपूर्ण फाइलों के साथ गड़बड़ करनी होगी, और इसे वापस एक साथ फिर से कंपाइल करना होगा। कुछ गलत होने पर अपने SystemUI.apk का बैकअप लें!
संबंधित Appuals मार्गदर्शिकाएँ:
- Android सिस्टम UI को मैन्युअल रूप से थीम कैसे करें
- कैसे डिकंपाइल और थीम Android APKs
- स्टॉक रोम पर अपने APK को कैसे डिओडेक्स करें
आवश्यकताएं:
- रूट किया गया Android फ़ोन (Appuals में ढेर सारे Android रूट गाइड हैं!)
- एक एपीके डीकंपलिंग टूल (हम अनुशंसा करते हैं एपीके आसान टूल)
- नोटपैड++ जैसा एक अच्छा कोड संपादक
अपने SystemUI.apk को डीकंपाइल करना
सबसे पहले आपको अपने SystemUI.apk को deodex करने की आवश्यकता है - इसके लिए आप Tickle My Android जैसे टूल का उपयोग कर सकते हैं। इस प्रक्रिया पर एपीके को डीकोड करने के लिए एपुअल गाइड पढ़ें।
अगला कदम सिस्टमयूआई.एपीके को डीकंपाइल करना है, जिसके लिए खुद से एक गाइड की आवश्यकता होती है यदि आपने इसे पहले कभी नहीं किया है - सौभाग्य से, एपुअल्स में डीकंपलिंग निर्देशों के साथ "हाउ टू मैनुअल थीम एंड्रॉइड सिस्टम यूआई" है, इसलिए इसे पढ़ें यदि आप 'पहले कभी किसी APK को विघटित नहीं किया है।
जोड़ना SMALI फ़ाइलें
अब आपको नई स्माली फाइलें जोड़ने की जरूरत है - पहले से ही संशोधित .smali फाइलों का एक पैकेट है जो हमें यहां उपलब्ध कराने की जरूरत है। विशेष रूप से, आपको "SelfAnimatingImageView.smali" फ़ाइल को .zip से निकालने की आवश्यकता है, और इसे निर्देशिका में अपने विघटित APK में जोड़ें:
SystemUI.apk\smali\com\android\morningstar\
यदि ये फ़ोल्डर मौजूद नहीं हैं तो आपको ये फ़ोल्डर बनाने होंगे।
जीआईएफ को फ्रेम में विभाजित करना
अब आपको अपनी पसंद का एनिमेटेड .gif ढूंढना होगा और अपने नेवबार होम बटन के रूप में उपयोग करना चाहते हैं। आपको स्टिकर gif, . का उपयोग करना चाहिए जैसा कि आप Giphy.com/stickers पर पा सकते हैं - आप देखेंगे कि उनके पास PNG जैसी पारदर्शी पृष्ठभूमि है, लेकिन वे वास्तव में GIF हैं।
एक बार जब आप अपनी पसंद का स्टिकर GIF सहेज लेते हैं, तो आपको उसे PNG की एक श्रृंखला में बदलने की आवश्यकता होती है। ऐसा इसलिए है क्योंकि हमारा संशोधित सिस्टमयूआई वास्तव में एक देशी .gif फ़ाइल नहीं चलाएगा, यह अनुक्रमिक क्रम में पीएनजी चलाएगा। इसलिए हमें .gif को अनुक्रमिक PNG में विभाजित करने की आवश्यकता है, सौभाग्य से हम इसे EZGIF स्प्लिट जैसे ऑनलाइन कनवर्टर के साथ बहुत आसानी से कर सकते हैं।
बस अपने GIF को EZGIF स्प्लिट टूल पर अपलोड करें, स्प्लिट ऑप्शंस ड्रॉपडाउन मेनू से "पीएनजी फॉर्मेट में आउटपुट इमेज" चुनें, और यह क्रमिक क्रम में सभी फ्रेम को एक्सट्रेक्ट करेगा। फिर आप एक ज़िप फ़ाइल में फ़्रेम को एक साथ डाउनलोड कर सकते हैं।
अब आपको विभाजित GIF से PNG फ़्रेम को अपने उपयुक्त “drawable-xxxDPI में जोड़ना होगा। आपके विघटित सिस्टमयूआई एपीके फ़ोल्डर में फ़ोल्डर। आपके द्वारा उपयोग किया जाने वाला फ़ोल्डर आपके डिवाइस के DPI पर निर्भर करता है, इसलिए:
- एमडीपीआई =~160 डीपीआई
- एचडीपीआई =~240 डीपीआई
- XHDPI =~320 DPI
- XXHDPI =~480 DPI
- XXXHDPI =~640 डीपीआई
अब हमें एक एक्सएमएल फ़ाइल की आवश्यकता है जो एंड्रॉइड को निर्देश दे कि एनीमेशन के लिए कौन सी छवियों का उपयोग करना है, और उनके माध्यम से कितनी जल्दी साइकिल चलाना है। आपके द्वारा पहले डाउनलोड किए गए ज़िप पर वापस जाएं और "frame_anim.xml" को पकड़ें, और इसे विघटित एपीके के अंदर अपने "res\drawable" फ़ोल्डर में कॉपी करें।
अगर आप नोटपैड++ में फ्रेम_एनिम.एक्सएमएल खोलते हैं, तो यह इस तरह दिखना चाहिए:
<?xml version="1.0" encoding="utf-8"?> <animation-list android:oneshot="false" xmlns:android="https://schemas.android.com/apk/res/android"> <item android:duration="100" android:drawable="@drawable/frame_0" /> <item android:duration="100" android:drawable="@drawable/frame_1" /> <item android:duration="100" android:drawable="@drawable/frame_2" /> <item android:duration="100" android:drawable="@drawable/frame_3" /> </animation-list>
<आइटम से शुरू होने वाली प्रत्येक पंक्ति अनुक्रमिक क्रम में फ्रेम का प्रतिनिधित्व करती है, इसलिए आपको अलग-अलग पीएनजी में विभाजित जीआईएफ में कितने फ्रेम हैं, इस पर निर्भर करते हुए आपको आवश्यकतानुसार लाइनों को जोड़ने या हटाने की जरूरत है।
और अंत में, इससे पहले कि हम SystemUI.apk को फिर से कंपाइल कर सकें, हमें अपने एनिमेशन को नेवबार पर रखना होगा। यह थोड़ा मुश्किल है, क्योंकि हम लेआउट एक्सएमएल फाइल को संपादित करेंगे। अधिकांश स्टॉक रोम में, होम नेवबार सॉफ्टकी को नियंत्रित करने वाला कोड "लेआउट\नेविगेशन_बार.एक्सएमएल" में पाया जा सकता है, लेकिन यह "लेआउट\होम.एक्सएमएल" में भी पाया जा सकता है। इसके लिए आपको अपने ROM के आधार पर तलाश करनी होगी।
मूल रूप से, आप उस लेआउट की तलाश कर रहे हैं जिसमें XML फ़ाइल में ऐसा कोड हो:
<com.android.systemui.statusbar.policy.KeyButtonView android:layout_gravity="center" android:id="@id/home_button" android:layout_width="0.0dip" android:layout_height="0.0dip" android:scaleType="center" android:contentDescription="@string/accessibility_home" systemui:keyCode="3" />
जब आप home_button को संदर्भित करने वाली पंक्तियाँ देखेंगे तो आपको पता चल जाएगा कि आप सही XML फ़ाइल में हैं या इसी के समान। हमें क्या करना है छुपाएं यह होम कुंजी, और इसके स्थान पर एक नया डालें जो समान आकार का होगा, लेकिन अदृश्य होगा, और फिर हमारे एनिमेटेड फ्रेम इसके नीचे जाएंगे। यह वास्तव में काफी आसान है, हमें केवल एक फ़्रेमलेआउट . की आवश्यकता है कोड.
<FrameLayout android:layout_width="@dimen/navigation_key_width" android:layout_height="fill_parent"> <com.android.systemui.statusbar.policy.KeyButtonView android:layout_gravity="center" android:layout_width="@dimen/navigation_key_width" android:layout_height="fill_parent" android:src="@drawable/transparent" android:scaleType="center" android:contentDescription="@string/accessibility_home" systemui:keyCode="3" /> <com.android.systemui.statusbar.policy.KeyButtonView android:layout_gravity="center" android:id="@id/home_button" android:layout_width="0.0dip" android:layout_height="0.0dip" android:scaleType="center" android:contentDescription="@string/accessibility_home" systemui:keyCode="3" /> <com.android.systemui.morningstar.SelfAnimatingImageView android:layout_gravity="center" android:id="@+id/frame_animation" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/frame_anim" /> </FrameLayout>
यदि आप इस कोड की जांच करते हैं, तो आप देखेंगे कि हमारे पास तीन अलग-अलग चीजें एक दूसरे के ऊपर कैसे खड़ी हैं। लेकिन जब ऐप चल रहा हो, तो आप इसे नहीं देख पाएंगे - आप केवल अपने एनिमेटेड जीआईएफ देखेंगे जहां होम कुंजी नेवबार पर होनी चाहिए।
तो आपको बस इतना करना है कि कोड की होम सॉफ्टकी लाइन को ऊपर दिए गए FrameLayout कोड से बदल दें, लेकिन आपको इसे अपने विशेष ROM के लिए ट्विक करने की आवश्यकता हो सकती है। यहां थोड़ा परीक्षण और त्रुटि आवश्यक है।
पुन:संकलित करना एपीके और इसे फ्लैश करना
अब हम संशोधित एपीके को फिर से संकलित करने के लिए तैयार हैं। SystemUI.apk को फिर से कंपाइल करने के लिए बस एपीके ईज़ी टूल का उपयोग करें, और इसे अपने डिवाइस पर रिकवरी मोड में फ्लैश करें। पुनर्प्राप्ति मोड में ऐसा करना महत्वपूर्ण है, क्योंकि आपको Dalvik कैशे को पोंछने की आवश्यकता है अन्यथा हमारे द्वारा जोड़ी गई नई स्माली फ़ाइलें सक्रिय नहीं होंगी।
यदि सब कुछ ठीक रहा, तो आपको अपने एनिमेटेड GIF को अपनी नई नेवबार होम कुंजी के रूप में देखना चाहिए!