Android Studio में APK Analyzer शामिल होता है. यह बिल्ड प्रोसेस पूरी होने के बाद, आपके APK या Android ऐप्लिकेशन बंडल की कंपोज़िशन के बारे में तुरंत जानकारी देता है.
APK Analyzer का इस्तेमाल करके, अपने ऐप्लिकेशन में मौजूद DEX फ़ाइलों और संसाधनों से जुड़ी समस्याओं को डीबग करने में लगने वाला समय कम किया जा सकता है. इससे आपके APK का साइज़ भी कम हो सकता है. APK ऐनालाइज़र, कमांड लाइन से भी ऐक्सेस किया जा सकता है. इसके लिए, apkanalyzer
का इस्तेमाल करें.
APK Analyzer की मदद से, ये काम किए जा सकते हैं:
- ऐप्लिकेशन में मौजूद फ़ाइलों का साइज़ देखें. जैसे, DEX और Android रिसॉर्स फ़ाइलें.
- DEX फ़ाइलों की संरचना को समझें.
- ऐप्लिकेशन में मौजूद फ़ाइलों के फ़ाइनल वर्शन को तुरंत देखा जा सकता है. जैसे,
AndroidManifest.xml
फ़ाइल. - दो APK या ऐप्लिकेशन बंडल की एक-दूसरे से तुलना करें.
प्रोजेक्ट खुला होने पर, APK Analyzer को तीन तरीकों से ऐक्सेस किया जा सकता है:
- किसी APK या ऐप्लिकेशन बंडल को Android Studio की एडिटर विंडो में खींचें और छोड़ें.
- प्रोजेक्ट विंडो में, प्रोजेक्ट व्यू पर जाएं. इसके बाद, डिफ़ॉल्ट
build/output/apks/
डायरेक्ट्री में मौजूद APK पर दो बार क्लिक करें. - मेन्यू बार में, बनाएं > APK का विश्लेषण करें को चुनें. इसके बाद, अपना APK या ऐप्लिकेशन बंडल चुनें.
फ़ाइल और उसके साइज़ की जानकारी देखना
APK ऐसी फ़ाइलें होती हैं जो ZIP फ़ाइल फ़ॉर्मैट के मुताबिक होती हैं. APK Analyzer, हर फ़ाइल या फ़ोल्डर को एक इकाई के तौर पर दिखाता है. फ़ोल्डर में नेविगेट करने के लिए, इसे बड़ा किया जा सकता है. इकाइयों का क्रम, APK फ़ाइल में मौजूद फ़ाइलों और फ़ोल्डर के स्ट्रक्चर के जैसा होता है.
APK ऐनलिसिस टूल, हर इकाई के लिए ZIP की गई फ़ाइल का साइज़ (या "रॉ फ़ाइल का साइज़") और डाउनलोड की गई फ़ाइल के साइज़ की वैल्यू दिखाता है. जैसा कि पहली इमेज में दिखाया गया है. रॉ फ़ाइल का साइज़ से पता चलता है कि किसी इकाई का कुल APK साइज़ में कितना योगदान है. डाउनलोड साइज़ से, Google Play पर डिलीवर की जाने वाली इकाई के कंप्रेस किए गए साइज़ का अनुमान लगाया जाता है. कुल डाउनलोड साइज़ का%, यह दिखाता है कि इकाई, APK के कुल डाउनलोड साइज़ का कितना प्रतिशत है.

AndroidManifest.xml देखना
अगर आपके प्रोजेक्ट में एक से ज़्यादा AndroidManifest.xml
फ़ाइलें शामिल हैं, जैसे कि प्रॉडक्ट फ़्लेवर के लिए या ऐसी लाइब्रेरी शामिल हैं जो मेनिफ़ेस्ट फ़ाइल भी उपलब्ध कराती हैं, तो उन्हें आपके ऐप्लिकेशन में एक ही फ़ाइल में मर्ज कर दिया जाता है. यह मेनिफ़ेस्ट फ़ाइल आम तौर पर APK या ऐप्लिकेशन बंडल में बाइनरी फ़ाइल होती है. हालांकि, APK Analyzer में चुने जाने पर, इस इकाई का एक्सएमएल फ़ॉर्म फिर से बनाया जाता है और दिखाया जाता है.
इस व्यूअर की मदद से, आपको उन बदलावों के बारे में पता चलता है जो बिल्ड के दौरान आपके ऐप्लिकेशन में किए गए हो सकते हैं. उदाहरण के लिए, आपको यह दिखेगा कि आपका ऐप्लिकेशन जिस लाइब्रेरी पर निर्भर करता है उसकी AndroidManifest.xml
फ़ाइल, फ़ाइनल AndroidManifest.xml
फ़ाइल में कैसे मर्ज की जाती है.
इसके अलावा, यह व्यूअर कुछ लिंटिंग सुविधाएं भी देता है. चेतावनी या गड़बड़ियां, सबसे ऊपर दाएं कोने में दिखती हैं. दूसरी इमेज में, चुनी गई मेनिफ़ेस्ट फ़ाइल के लिए गड़बड़ी की सूचना दिखाई गई है.

DEX फ़ाइलें देखना
APK Analyzer में मौजूद DEX फ़ाइल व्यूअर की मदद से, आपको अपने ऐप्लिकेशन में मौजूद DEX फ़ाइलों की बुनियादी जानकारी तुरंत मिलती है. व्यूअर, क्लास, पैकेज, कुल रेफ़रंस, और एलान की संख्या दिखाता है. इससे यह तय करने में मदद मिलती है कि मल्टीडेक्स का इस्तेमाल करना है या 64K DEX की सीमा से कम करने के लिए, डिपेंडेंसी को कैसे हटाया जाए.
तीसरी इमेज में, मीडियम साइज़ का एक ऐसा ऐप्लिकेशन दिखाया गया है जो 64 हज़ार DEX फ़ाइल की सीमा से कम है. DEX फ़ाइल में मौजूद हर पैकेज, क्लास, और मेथड के लिए, डिफ़ाइन किए गए मेथड और रेफ़र किए गए मेथड कॉलम में संख्याएं दी गई हैं.
रेफ़र किए गए तरीके कॉलम में, उन सभी तरीकों की संख्या होती है जिन्हें DEX फ़ाइल रेफ़र करती है. इसमें आम तौर पर, आपके कोड में तय किए गए तरीके, डिपेंडेंसी लाइब्रेरी, और स्टैंडर्ड Java और Android पैकेज में तय किए गए तरीके शामिल होते हैं. ये तरीके, कोड इस्तेमाल करता है. ये ऐसे तरीके हैं जिन्हें हर DEX फ़ाइल में, 64 हज़ार तरीकों की सीमा में शामिल करके गिना जाता है.
तय किए गए तरीके कॉलम में, सिर्फ़ उन तरीकों को गिना जाता है जो आपकी किसी DEX फ़ाइल में तय किए गए हैं. इसलिए, यह संख्या रेफ़र किए गए तरीके का सबसेट है.

डीईएक्स फ़ाइल ट्री व्यू को फ़िल्टर करना
क्लास की सूची के ठीक ऊपर, APK Analyzer में फ़िल्टर दिए गए हैं. इनकी मदद से, चुने गए DEX फ़ाइल का कॉन्टेंट देखा जा सकता है. इसे इमेज 4 में दिखाया गया है.

BuildConfig
के फ़ील्ड और तरीके दिखाने के लिए सेट किए गए हैं.किसी क्लास में मौजूद सभी तरीकों और फ़ील्ड को दिखाने के लिए, फ़िल्टर का इस्तेमाल करने के लिए यह तरीका अपनाएं:
- फ़ाइल सूची में,
classes.dex
फ़ाइल चुनें. - क्लास सूची में, किसी क्लास पर जाएं और उसे चुनें.
- चुनी गई क्लास को बड़ा करें.
- क्लास के फ़ील्ड दिखाने या छिपाने के लिए, फ़ील्ड दिखाएं
को टॉगल करें.
- क्लास के तरीके दिखाने या छिपाने के लिए, तरीके दिखाएं
को टॉगल करें.
रेफ़र किए गए पैकेज, क्लास, मेथड, और फ़ील्ड को दिखाने या छिपाने के लिए, रेफ़र किए गए सभी मेथड या फ़ील्ड दिखाएं
को टॉगल करें.
ट्री व्यू में, इटैलिक किए गए नोड ऐसे रेफ़रंस होते हैं जिनकी परिभाषा, चुनी गई DEX फ़ाइल में नहीं होती. DEX फ़ाइल, किसी दूसरी फ़ाइल में तय किए गए तरीकों और फ़ील्ड का रेफ़रंस दे सकती है. उदाहरण के लिए
System.out.println()
, Android फ़्रेमवर्क मेंprintln()
तरीके का रेफ़रंस है.
ProGuard मैपिंग लोड करें
फ़िल्टर करने वाले आइकॉन के बगल में, ProGuard मैपिंग आइकॉन मौजूद होते हैं. ProGuard के आइकॉन तब तक धूसर दिखते हैं, जब तक ProGuard मैपिंग फ़ाइलों का कोई सेट लोड नहीं किया जाता. ये फ़ाइलें, DEX व्यूअर में कई फ़ंक्शन जोड़ती हैं. जैसे, नामों को डीऑब्फ़स्केट करना (mapping.txt
), हटाए गए नोड दिखाना (usage.txt
), और ऐसे नोड दिखाना जिन्हें हटाया नहीं जा सकता (seeds.txt
).
आपको ProGuard की ऐसी मैपिंग फ़ाइल इंपोर्ट करनी होगी जो उसी बिल्ड से बनी हो जिसने कोड श्रिंकिंग की सुविधा चालू करके DEX फ़ाइलें बनाई हों.

ProGuard मैपिंग फ़ाइलें लोड करने के लिए, यह तरीका अपनाएं:
- Load Proguard mappings... पर क्लिक करें.
उस प्रोजेक्ट फ़ोल्डर पर जाएं जिसमें मैपिंग फ़ाइलें मौजूद हैं. इसके बाद, सभी फ़ाइलें, फ़ाइलों का कोई भी कॉम्बिनेशन या फ़ाइलों वाला फ़ोल्डर लोड करें.
आम तौर पर, मैपिंग फ़ाइलें
project/app/build/outputs/mappings/release/
में होती हैं. अगर फ़ाइल पिकर को इस प्रोजेक्ट का स्ट्रक्चर पता चलता है, तो वह डिफ़ॉल्ट रूप से release फ़ोल्डर पर चला जाता है.सबसे पहले, फ़ाइल पिकर उन फ़ाइलों के नाम की जांच करता है जो
mapping.txt
,seeds.txt
, औरusage.txt
से पूरी तरह मेल खाते हैं. इसके बाद, फ़ाइल पिकर उन फ़ाइलों के नाम की जांच करता है जिनमें कहीं न कहींmapping
,usage
याseeds
शामिल हो और जिनके नाम.txt
से खत्म होते हों. उदाहरण के लिए,release-seeds-1.10.15.txt
एक मैच है.
यहां दी गई सूची में, मैपिंग फ़ाइलों के बारे में बताया गया है:
seeds.txt
: ProGuard कॉन्फ़िगरेशन की वजह से, श्रिंकिंग के दौरान हटाए नहीं जा सकने वाले नोड को बोल्ड में दिखाया जाता है.mapping.txt
: नामों को डीऑब्फ़स्केट करेंको चालू करता है, ताकि R8 की मदद से अस्पष्ट किए गए नोड के ओरिजनल नाम वापस लाए जा सकें. उदाहरण के लिए,
a
,b
,c
जैसे अस्पष्ट किए गए नोड के नामों कोMyClass
,MainActivity
, औरmyMethod()
में बदला जा सकता है.usage.txt
: हटाए गए नोड दिखाएंको चालू करता है, ताकि आप उन क्लास, तरीकों, और फ़ील्ड को दिखा सकें जिन्हें R8 ने श्रिंक करने के दौरान हटा दिया था. वापस लाए गए नोड, स्ट्राइकथ्रू में दिखाए जाते हैं.
अपने कोड को उलझाने और छोटा करने के लिए R8 का इस्तेमाल करने के बारे में ज़्यादा जानने के लिए, अपने ऐप्लिकेशन को छोटा करें, उलझाएं, और ऑप्टिमाइज़ करें लेख पढ़ें.
बाइटकोड दिखाएं, इस्तेमाल के उदाहरण ढूंढें, और Keep का नियम जनरेट करें
क्लास की सूची वाले व्यू में मौजूद नोड में, कॉन्टेक्स्ट मेन्यू होता है. इसमें ये विकल्प होते हैं. इनकी मदद से, बाइटकोड देखा जा सकता है, इस्तेमाल की गई चीज़ों का पता लगाया जा सकता है, और एक ऐसा डायलॉग दिखाया जा सकता है जिसमें चुने गए नोड के लिए, कॉपी और चिपकाने के लिए ProGuard के नियम दिखते हैं. क्लास की सूची वाले व्यू में किसी भी नोड पर राइट क्लिक करके, उसका संदर्भ मेन्यू दिखाएं.
बाइटकोड दिखाएं: यह विकल्प, चुनी गई क्लास, तरीके या फ़ील्ड को डीकंपाइल करता है. साथ ही, smali बाइटकोड को डायलॉग बॉक्स में दिखाता है. यह इस तरह दिखता है:

init
तरीकेइस्तेमाल के उदाहरण ढूंढें: इससे पता चलता है कि DEX कोड के किन अन्य हिस्सों में, चुनी गई क्लास या तरीके के रेफ़रंस हैं. जैसा कि इमेज 7 में दिखाया गया है.
अगर आपने seeds.txt
लोड किया है, तो बोल्ड में दिखाए गए नोड से पता चलता है कि ProGuard कॉन्फ़िगरेशन की वजह से, उन्हें श्रिंक करने के दौरान हटाया नहीं जा सकता:

MyClass
के रेफ़रंस.
Proguard Keep नियम जनरेट करें: इसमें ProGuard के ऐसे नियम दिखते हैं जिन्हें कॉपी करके, अपने प्रोजेक्ट की ProGuard कॉन्फ़िगरेशन फ़ाइल में चिपकाया जा सकता है. जैसा कि इमेज 8 में दिखाया गया है. यह दिए गए पैकेज, क्लास, तरीके या फ़ील्ड को कोड छोटा करने के दौरान हटाए जाने से रोकता है. ज़्यादा जानकारी के लिए, यह तय करना कि कौनसे कोड को सेव रखना है लेख पढ़ें.

कोड और संसाधन इकाइयां देखना
बिल्ड करने से जुड़े अलग-अलग टास्क, ऐप्लिकेशन में मौजूद फ़ाइनल इकाइयों में बदलाव करते हैं. उदाहरण के लिए, ProGuard की संकुचन से जुड़ी सेटिंग, आपके फ़ाइनल कोड में बदलाव कर सकती हैं. साथ ही, इमेज रिसॉर्स को प्रोडक्ट फ़्लेवर में मौजूद रिसॉर्स से बदला जा सकता है.
APK Analyzer की मदद से, अपनी फ़ाइलों का फ़ाइनल वर्शन देखने के लिए, टेक्स्ट या इमेज इकाई की झलक देखने के लिए इकाई पर क्लिक करें. जैसा कि इमेज 9 में दिखाया गया है.

APK Analyzer, अलग-अलग टेक्स्ट और बाइनरी फ़ाइलें भी दिखा सकता है.
उदाहरण के लिए, resources.arsc
इकाई व्यूअर की मदद से, कॉन्फ़िगरेशन के हिसाब से वैल्यू देखी जा सकती हैं. जैसे, स्ट्रिंग रिसॉर्स के लिए भाषा अनुवाद. आंकड़े 10 में, हर स्ट्रिंग रिसॉर्स के लिए अनुवाद देखे जा सकते हैं.

फ़ाइलों की तुलना करना
APK Analyzer, दो अलग-अलग APK या ऐप्लिकेशन बंडल फ़ाइलों में मौजूद इकाइयों के साइज़ की तुलना कर सकता है. यह तब काम आता है, जब आपको यह जानना हो कि पिछली रिलीज़ की तुलना में आपके ऐप्लिकेशन का साइज़ क्यों बढ़ गया है.
अपडेट किए गए ऐप्लिकेशन को पब्लिश करने से पहले, ये काम करें:
- ऐप्लिकेशन के उस वर्शन को APK Analyzer में लोड करें जिसे आपको पब्लिश करना है.
- APK Analyzer के सबसे ऊपर दाएं कोने में, पिछले APK से तुलना करें... पर क्लिक करें.
चुनने के लिए उपलब्ध डायलॉग बॉक्स में, वह आर्टफ़ैक्ट ढूंढें जिसे आपके उपयोगकर्ताओं के लिए आखिरी बार पब्लिश किया गया था. इसके बाद, ठीक है पर क्लिक करें.
उपयोगकर्ताओं पर अपडेट के असर का आकलन करने में आपकी मदद करने के लिए, फ़िगर 11 में दिखाए गए डायलॉग जैसा एक डायलॉग दिखता है.
ग्यारहवीं इमेज में, किसी ऐप्लिकेशन के डीबग और रिलीज़ बिल्ड के बीच का अंतर दिखाया गया है. इन बिल्ड टाइप के बीच, अलग-अलग बिल्ड विकल्पों का इस्तेमाल किया जा रहा है. इससे, बुनियादी इकाइयों में अलग-अलग तरह से बदलाव होता है.
