Android डिवाइस पर, ऐप्लिकेशन बंद होने और ANRs की समस्याओं की वजह से स्टैक ट्रेस बनती है. स्टैक ट्रेस, नेस्ट किए हुए उन फ़ंक्शन के क्रम का स्नैपशॉट है जो ऐप्लिकेशन बंद होने के समय तक आपके प्रोग्राम में इस्तेमाल किए जा रहे थे. ये स्नैपशॉट, सोर्स कोड में मौजूद किसी भी समस्या का पता लगाने और उसे ठीक करने में आपकी मदद कर सकते हैं.
अगर आपका ऐप्लिकेशन या गेम, Java की मदद से बनाया गया है और आप अपने ऐप्लिकेशन को ऑप्टिमाइज़ करने और उसे उलझाने के लिए ProGuard का इस्तेमाल करते हैं, तो आप Play Console में अपने ऐप्लिकेशन के हर वर्शन के लिए, ProGuard मैपिंग फ़ाइल अपलोड कर सकते हैं. अगर आपके ऐप्लिकेशन या गेम को C++ जैसे नेटिव कोड का इस्तेमाल करके बनाया गया है, तो आप Play Console में अपने ऐप्लिकेशन के हर वर्शन के लिए डीबग सिंबल वाली फ़ाइल अपलोड कर सकते हैं. इससे, आपके ऐप्लिकेशन का बंद होना और ANRs जैसी समस्याओं का विश्लेषण करना और उन्हें ठीक करना आसान हो जाता है.
ज़रूरी: Java में कंपाइल किए गए ऐप्लिकेशन को डिकोड करने के लिए, सिर्फ़ ReTrace वाली मैपिंग फ़ाइलें ही काम करती हैं. यही फ़ॉर्मैट ProGuard या R8 में भी इस्तेमाल किया जाता है.
पहला चरण: डिकोड की गई फ़ाइल या सिम्बॉलिकेशन फ़ाइल जनरेट करना
अपने ऐप्लिकेशन के किसी वर्शन के लिए, ऐप्लिकेशन के बंद होने और ANRs की समस्याओं को डिकोड करने या सिम्बॉलिकेट करने के लिए, आपको सबसे पहले अपने ऐप्लिकेशन के उस वर्शन के लिए ज़रूरी फ़ाइलें जनरेट करनी होंगी. डिकोड करने या सिम्बॉलिकेशन के लिए, आपको अपने ऐप्लिकेशन के हर नए वर्शन के लिए फ़ाइल जनरेट और अपलोड करनी होगी.
Java: ProGuard मैपिंग फ़ाइल जनरेट करनाJava स्टैक ट्रेस को डिकोड करने के लिए, आपको सबसे पहले ProGuard मैपिंग फ़ाइल जनरेट करनी होगी. इसका तरीका जानने के लिए, Google Developers साइट पर जाएं.
'Android Gradle प्लग इन' 4.1 और इसके बाद वाले वर्शन
अगर आपके प्रोजेक्ट में Android ऐप्लिकेशन बंडल बनाया जाता है, तो आप इसमें डीबग सिंबल वाली फ़ाइल को अपने-आप शामिल होने के लिए सेट कर सकते हैं. इस फ़ाइल को शामिल करने के लिए, अपने ऐप्लिकेशन की build.gradle
फ़ाइल में इन चीज़ों को जोड़ें:
android.defaultConfig.ndk.debugSymbolLevel = 'FULL'
ध्यान दें: डीबग सिंबल वाली फ़ाइल की सीमा 300 एमबी है. अगर आपका डीबग सिंबल फ़ुटप्रिंट बहुत बड़ा है, तो फ़ाइल का साइज़ घटाने के लिए, FULL
के बजाय SYMBOL_TABLE
का इस्तेमाल करें.
अगर आपके प्रोजेक्ट में APK बनाया जाता है, तो अलग से डीबग सिंबल वाली फ़ाइल जनरेट करने के लिए ऊपर दी गई build.gradle बिल्ड सेटिंग का इस्तेमाल करें. Google Play Console में डीबग सिंबल वाली फ़ाइल को मैन्युअल तरीके से अपलोड करें, जैसा कि नीचे दूसरे चरण में बताया गया है. दूसरा चरण: डिकोड करने वाली या सिम्बॉलिकेशन फ़ाइल अपलोड करना. बिल्ड प्रोसेस का हिस्सा होने के चलते, 'Android Gradle प्लग इन' नीचे बताई गई प्रोजेक्ट की जगह पर इस फ़ाइल का आउटपुट देता है:
app/build/outputs/native-debug-symbols/variant-name/native-debug-symbols.zip
'Android Gradle प्लग इन' 4.0 और इससे पहले वाले वर्शन (और अन्य बिल्ड सिस्टम)
किसी ऐप्लिकेशन बंडल या APK की बिल्ड प्रोसेस का हिस्सा होने की वजह से 'Android Gradle प्लग इन', प्रोजेक्ट डायरेक्ट्री में ज़्यादा जानकारी वाली लाइब्रेरी की एक कॉपी रखता है. इस डायरेक्ट्री का स्ट्रक्चर इस तरह का है:
app/build/intermediates/cmake/universal/release/obj
├── armeabi-v7a/
│ ├── libgamenegine.so
│ ├── libothercode.so
│ └── libvideocodec.so
├── arm64-v8a/
│ ├── libgamenegine.so
│ ├── libothercode.so
│ └── libvideocodec.so
├── x86/
│ ├── libgamenegine.so
│ ├── libothercode.so
│ └── libvideocodec.so
└── x86_64/
├── libgameengine.so
├── libothercode.so
└── libvideocodec.so
ध्यान दें: अगर आप किसी दूसरे बिल्ड सिस्टम का इस्तेमाल करते हैं, तो आप ज़्यादा जानकारी वाली लाइब्रेरी को डायरेक्ट्री में स्टोर करने के लिए, ऊपर दिए गए स्ट्रक्चर के हिसाब से इसमें बदलाव कर सकते हैं.
- इस डायरेक्ट्री के कॉन्टेंट को ज़िप अप करें:
$ cd app/build/intermediates/cmake/universal/release/obj
$ zip -r symbols.zip .
- Play Console में symbols.zip फ़ाइल को मैन्युअल तरीके से अपलोड करें, जैसा कि नीचे दूसरे चरण में बताया गया है. दूसरा चरण: डिकोड करना या सिम्बॉलिकेशन फ़ाइल को अपलोड करना.
डीबग सिंबल वाली फ़ाइल का साइज़ ज़्यादा से ज़्यादा 300 एमबी हो सकता है. अगर आपकी फ़ाइल का साइज़ बहुत बड़ा है, तो ऐसा हो सकता है कि आपकी .so फ़ाइलों में सिंबल टेबल (फ़ंक्शन के नाम) और DWARF डीबग की जानकारी (फ़ाइलों के नाम और कोड की लाइनें) शामिल हो. आपको अपने कोड को सिम्बॉलिकेट करने के लिए इन चीज़ों की ज़रूरत नहीं है. इस निर्देश की मदद से इन्हें हटाया जा सकता है:
$OBJCOPY --strip-debug lib.so lib.so.sym
ध्यान दें: $OBJCOPY
उस खास एबीआई वर्शन की ओर इशारा करता है जिसे आप अलग कर रहे हैं, उदाहरण के लिए:ndk-bundle/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-objcopy
दूसरा चरण: डिकोड की गई या सिम्बॉलिकेशन फ़ाइल अपलोड करना
अपने ऐप्लिकेशन के किसी वर्शन के लिए, ऐप्लिकेशन के बंद होने या ANRs को डिकोड करने या सिम्बॉलिकेट करने के लिए, आपको अपने ऐप्लिकेशन के हर वर्शन के लिए डिकोड की गई या सिम्बॉलिकेशन फ़ाइलें अपलोड करनी होंगी.
ज़रूरी जानकारी: यह चरण सिर्फ़ उन डेवलपर के लिए ज़रूरी है जो APKs का इस्तेमाल करते हैं. अगर आप किसी ऐप्लिकेशन बंडल और 'Android Gradle प्लग इन' के 4.1 या उसके बाद वाले वर्शन का इस्तेमाल कर रहे हैं, तो आपको कुछ भी करने की ज़रूरत नहीं है. हम बंडल में से डिकोड करने वाली फ़ाइल अपने-आप निकाल लेंगे और आप तीसरे चरण पर जा सकते हैं. तीसरा चरण: डिकोड की जा चुकी क्रैश स्टैक ट्रेस देखना. आप Android डेवलपर साइट पर ऐप्लिकेशन बंडल के बारे में ज़्यादा जान सकते हैं.
Play Console का इस्तेमाल करके फ़ाइलें अपलोड करनाडिकोड करने वाली या सिम्बॉलिकेशन फ़ाइल अपलोड करने के लिए:
- Play Console खोलें.
- कोई ऐप्लिकेशन चुनें.
- बाएं मेन्यू पर, रिलीज़ > ऐप्लिकेशन बंडल एक्सप्लोरर चुनें.
- सबसे ऊपर दाएं कोने पर दिए गए पिकर की मदद से, ज़रूरी आर्टफ़ैक्ट चुनें.
- डाउनलोड टैब को चुनें और नीचे की ओर स्क्रोल करके “एसेट” सेक्शन पर जाएं.
- मैपिंग फ़ाइल या डीबग सिंबल के लिए, अपलोड वाले ऐरो पर क्लिक करें. इससे आपके ऐप्लिकेशन के वर्शन के लिए, डिकोड की गई या सिम्बॉलिकेशन फ़ाइल अपलोड हो जाएगी.
Google Play डेवलपर API (एपीआई) का इस्तेमाल करके फ़ाइलें अपलोड करने के लिए, Google Developers साइट पर जाएं.
तीसरा चरण: डिकोड करने वाली क्रैश स्टैक ट्रेस देखना
जब आप अपने ऐप्लिकेशन के किसी वर्शन के लिए ProGuard मैपिंग फ़ाइल या डीबग सिंबल फ़ाइल अपलोड कर देते हैं, तो उसके बाद ऐप्लिकेशन के बंद होने और ANRs की समस्याएं डिकोड हो जाती हैं. आप ऐप्लिकेशन बंद होने और ANRs से जुड़ी हर समस्या के लिए, अपने ऐप्लिकेशन के ऐप्लिकेशन बंद होना और ANRs की समस्याएं पेज पर जाकर, डिकोड करने वाली स्टैक ट्रेस देख सकते हैं.
- Play Console खोलें.
- कोई ऐप्लिकेशन चुनें.
- बाएं मेन्यू पर, क्वालिटी > Android की ज़रूरी जानकारी > ऐप्लिकेशन बंद होने और ANR की गड़बड़ियां चुनें.
- ऐप्लिकेशन जिस वजह से बंद हुआ वह चुनें.
- "स्टैक ट्रेस" सेक्शन में, आपको डिकोड की गई और सिम्बॉलिकेट की हुई स्टैक ट्रेस दिखेंगी.
ज़रूरी: अपने ऐप्लिकेशन के किसी वर्शन के लिए मैपिंग फ़ाइल अपलोड करने के बाद, उस वर्शन की आने वाली, ऐप्लिकेशन बंद होने और ANRs से जुड़ी समस्याओं को डिकोड किया जाएगा. मैपिंग फ़ाइल अपलोड करने से पहले, उस वर्शन में आ चुकीं ऐप्लिकेशन बंद होने या ANRs की समस्याओं को डिकोड नहीं किया जाएगा.
अक्सर पूछे जाने वाले सवाल
मैं Play Console को डिकोड करने या सिम्बॉलिकेट करने की सुविधा का इस्तेमाल नहीं करना चाहता/चाहती हूं. क्या मैं इसे ऑफ़लाइन इस्तेमाल कर सकता/सकती हूं?Play Console किसी खास ऐप्लिकेशन में स्टैक ट्रेस दिखाने के लिए, ndk-stack का इस्तेमाल करता है और Java में ऐप्लिकेशन बंद होने की समस्याओं को दिखाने के लिए, ReTrace का इस्तेमाल करता है. अगर आप डिकोड करने वाली फ़ाइलों को शेयर नहीं करना चाहते हैं, तो आप ऐप्लिकेशन बंद होने से जुड़े उलझे हुए स्टैक को Play Console से कॉपी कर सकते हैं. इसके बाद, उन्हें सिम्बॉलिकेट करने के लिए सही ऑफ़लाइन टूल का इस्तेमाल कर सकते हैं. हालांकि, यह प्रोसेस ऐप्लिकेशन बंद होने से जुड़े हर स्टैक के लिए मैन्युअल तरीके से पूरी की जानी चाहिए. इस वजह से यह प्रोसेस धीमी हो जाती है और इसमें ज़्यादा समय लगता है. डिकोड की गई आपकी फ़ाइलें उपलब्ध कराकर, Play Console आपके लिए इसे मैनेज कर देगा.
जब आप अपने ऐप्लिकेशन के किसी वर्शन के लिए ProGuard मैपिंग फ़ाइल या डीबग सिंबल वाली फ़ाइल अपलोड कर देते हैं, तो सिर्फ़ उसके बाद आने वाली, ऐप्लिकेशन बंद होने और ANRs की समस्याएं डिकोड की जाएंगी. उपयोगकर्ता के डिवाइस से, ऐप्लिकेशन के बंद होने और ANRs की नई समस्याओं की शिकायत होने में कुछ समय लगता है. इसके बाद ही, आपको ऐप्लिकेशन के बंद होने और ANRs की डिकोड की गई समस्याएं Play Console में दिखती हैं.
डिकोड की गई/सिम्बॉलिकेशन वाली अधूरी फ़ाइल अपलोड करने से ऐसा होता है. पक्का करें कि आपने अपने पूरे ऐप्लिकेशन के लिए सिम्बॉलिकेशन वाली फ़ाइलें अपलोड की हों. खास तौर पर, अगर आप किसी मुश्किल या एक से ज़्यादा स्टेज वाले बिल्ड प्रोसेस पर काम कर रहे हैं. पूरी तरह से डिकोड न होने की सबसे सामान्य वजहों में से एक वजह, तीसरे पक्ष की लाइब्रेरी का इस्तेमाल करना है. ऐसी स्थिति में, आप लाइब्रेरी की सेवा देने वाली कंपनी से डिकोड करने वाली फ़ाइलें पा सकते हैं.
डिकोड करने वाली फ़ाइलों के बिना, 32-बिट और 64-बिट के डिवाइस पर या फिर ARM और Intel डिवाइस पर, ऐप्लिकेशन बंद होने और ANR की एक ही समस्या अलग-अलग दिखेगी. डिकोड की गई फ़ाइलें उपलब्ध कराकर, हम ऐप्लिकेशन बंद होने की इन समस्याओं को एक साथ इकट्ठा कर सकते हैं. इससे आपको अपने ऐप्लिकेशन के बंद होने और ANRs की मुख्य समस्याओं के बारे में पता चलेगा.
अगर आप अपने ऐप्लिकेशन के नए वर्शन के लिए फ़ाइल अपलोड करना भूल जाते हैं, तो ऐप्लिकेशन बंद होने और ANRs की समस्याएं, फिर से कोड वाले वर्शन में बदल जाएंगी. इसे अभी अपलोड करने के लिए, ऊपर दिए गए निर्देशों का पालन करें. जब आप अपने ऐप्लिकेशन के किसी वर्शन के लिए ProGuard मैपिंग फ़ाइल या डीबग सिंबल वाली फ़ाइल अपलोड कर देते हैं, तो सिर्फ़ उसके बाद आने वाली, ऐप्लिकेशन बंद होने और ANRs की समस्याएं डिकोड की जाएंगी. Play Console में, ऐप्लिकेशन बंद होने और ANRs की डिकोड की गई समस्याएं दिखने में कुछ समय लगता है. यह समय इसलिए लगता है, ताकि डिवाइस इस्तेमाल करने वाले लोग, ऐप्लिकेशन बंद होने और ANRs की नई समस्याओं की शिकायत दर्ज करा सकें.
फ़ाइल अपलोड करना भूल जाने के जोखिम से बचने के लिए, अपनी बिल्ड प्रोसेस बदलें. ऐसा करके आप 'Android Gradle प्लग इन' के 4.1 या उसके बाद वाले वर्शन की मदद से, ऐप्लिकेशन बंडल इस्तेमाल कर सकते हैं. इस स्थिति में, आप Android डेवलपर साइट पर दिए गए निर्देशों का पालन करके, ऐप्लिकेशन बंडल में डीबग सिंबल फ़ाइल को अपने-आप शामिल कर सकते हैं.
अगर आप अपने ऐप्लिकेशन के किसी वर्शन के लिए गलत फ़ाइल अपलोड कर देते हैं, तो उस वर्शन में ऐप्लिकेशन बंद होने और ANRs की समस्याएं फिर से उलझ जाएंगी. सही किया गया वर्शन अपलोड करने के लिए:
- Play Console खोलें.
- कोई ऐप्लिकेशन चुनें.
- बाएं मेन्यू पर, रिलीज़ > ऐप्लिकेशन बंडल एक्सप्लोरर चुनें.
- सबसे ऊपर दाएं कोने पर दिए गए पिकर की मदद से, ज़रूरी आर्टफ़ैक्ट चुनें.
- डाउनलोड टैब को चुनें और नीचे की ओर स्क्रोल करके “एसेट” सेक्शन पर जाएं.
- डिकोड करने वाली या सिम्बॉलिकेशन की गलत फ़ाइल के बगल में, मिटाएं आइकॉन पर क्लिक करें.
- गलत वर्शन को मिटाने के बाद, अपलोड आइकॉन पर क्लिक करें और अपने ऐप्लिकेशन के वर्शन के लिए सही फ़ाइल अपलोड करें.
जब आप अपने ऐप्लिकेशन के किसी वर्शन के लिए सही ProGuard मैपिंग फ़ाइल या डीबग सिंबल वाली फ़ाइल अपलोड कर देते हैं, तो सिर्फ़ उसके बाद आने वाली, ऐप्लिकेशन बंद होने और ANRs की समस्याएं डिकोड की जाएंगी. Play Console में, ऐप्लिकेशन बंद होने और ANRs की डिकोड की गई समस्याएं दिखने में कुछ समय लगता है. यह समय इसलिए लगता है, ताकि डिवाइस इस्तेमाल करने वाले लोग, ऐप्लिकेशन बंद होने और ANRs की नई समस्याओं की शिकायत दर्ज करा सकें.
सलाह: फ़ाइल का गलत वर्शन अपलोड करने के जोखिम से बचने के लिए, अपनी बिल्ड प्रोसेस बदलें. ऐसा करके आप 'Android Gradle प्लग इन' के 4.1 या उसके बाद वाले वर्शन की मदद से, ऐप्लिकेशन बंडल इस्तेमाल कर सकते हैं. इस स्थिति में, आप Android डेवलपर साइट पर दिए गए निर्देशों का पालन करके, ऐप्लिकेशन बंडल में डीबग सिंबल फ़ाइल को अपने-आप शामिल कर सकते हैं.
शुरू करने के लिए Android डेवलपर साइट पर जाएं.
हां.
कभी-कभी ऐसा होता है कि सिस्टम को ANR की गड़बड़ी से जुड़ी जानकारी तो मिल जाती है, लेकिन वह स्टैक ट्रेस इकट्ठा नहीं कर पाता. इस इवेंट में, ANR की गड़बड़ी इसलिए दिखती है, ताकि आपको अपने ऐप्लिकेशन की स्थिरता से जुड़ी पूरी जानकारी मिल सके. हालांकि, स्टैक ट्रेस अपने-आप नहीं दिखती. बिना स्टैक ट्रेस वाली ANR की गड़बड़ियों को उनके टाइप और गतिविधि के हिसाब से अलग-अलग ग्रुप में बांटा जाता है, ताकि आप ANR की मिलती-जुलती गड़बड़ियों की समीक्षा करके उन्हें ठीक कर सकें. ऐसा करने से, बिना स्टैक ट्रेस वाली ANR की गड़बड़ियों की संख्या को कम करने में मदद मिल सकती है.