ऐप्लिकेशन बंद होने से जुड़ी स्टैक ट्रेस की उलझन कम करना या उसे सिम्बॉलिकेट करना

Android डिवाइस पर ऐप्लिकेशन बंद होने और ANR की समस्याओं की वजह से स्टैक ट्रेस बनती है. स्टैक ट्रेस, नेस्ट किए हुए उन फंक्शन के क्रम का स्नैपशॉट है जो ऐप्लिकेशन बंद होने के समय तक आपके प्रोग्राम में इस्तेमाल किए जा रहे थे. ये स्नैपशॉट, सोर्स कोड में मौजूद किसी भी समस्या का पता लगाने और उसे ठीक करने में आपकी मदद कर सकते हैं.

अगर आपका ऐप्लिकेशन या गेम Java की मदद से बनाया गया है और आप अपनी APK फ़ाइलों को ऑप्टिमाइज़ करने और उन्हें उलझाने के लिए ProGuard का इस्तेमाल करते हैं, तो आप 'Play कंसोल' पर अपने ऐप्लिकेशन के हर वर्शन के लिए ProGuard मैपिंग फ़ाइल अपलोड कर सकते हैं. अगर आपका ऐप्लिकेशन या गेम C++ जैसे नेटिव कोड की मदद से बनाया गया है, तो आप 'Play कंसोल' पर अपने ऐप्लिकेशन के हर वर्शन के लिए एक डीबग सिंबल फ़ाइल अपलोड कर सकते हैं. इससे, आपके ऐप्लिकेशन बंद होने और ANR जैसी समस्याओं का विश्लेषण करना और उन्हें ठीक करना आसान हो जाता है.

ज़रूरी: Java में कंपाइल किए गए ऐप्लिकेशन की उलझन को कम करने के लिए, सिर्फ़ ReTrace वाली मैपिंग फ़ाइलें ही काम करती हैं. यही फ़ॉर्मैट ProGuard या R8 में भी इस्तेमाल किया जाता है.

पहला चरण: उलझन कम करने वाली या सिम्बॉलिकेशन फ़ाइल जनरेट करना

अपने ऐप्लिकेशन के किसी वर्शन के लिए, ऐप्लिकेशन के बंद होने और ANR की उलझनों को कम करने या सिम्बॉलिकेट करने के लिए, आपको सबसे पहले अपने ऐप्लिकेशन के उस वर्शन के लिए ज़रूरी फ़ाइलें जनरेट करनी होंगी. उलझन कम करने या सिम्बॉलिकेशन के लिए, आपको अपने ऐप्लिकेशन के हर नए वर्शन के लिए फ़ाइल जनरेट और अपलोड करनी होगी.

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 ऐप्लिकेशन बंडल' के लिए बिल्ड प्रोसेस का हिस्सा होने के चलते, '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

ध्यान दें: अगर आप किसी दूसरे बिल्ड सिस्टम का इस्तेमाल करते हैं, तो आप ज़्यादा जानकारी वाली लाइब्रेरी को डायरेक्ट्री में स्टोर करने के लिए ऊपर दी गई ज़रूरी संरचना की मदद से इसमें बदलाव कर सकते हैं.

  1. इस डायरेक्ट्री के कॉन्टेंट को ज़िप अप करें:
    • $ cd app/build/intermediates/cmake/universal/release/obj
    • $ zip -r symbols.zip .
  2. 'Play कंसोल' पर symbols.zip file को मैन्युअल तरीके से अपलोड करें, जैसा कि नीचे दूसरे चरण में बताया गया है दूसरा चरण: उलझन कम करने वाली या सिम्बॉलिकेशन फ़ाइल अपलोड करना.

डीबग सिंबल फ़ाइल की सीमा 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

दूसरा चरण: उलझन कम करने वाली या सिम्बॉलिकेशन फ़ाइल अपलोड करना

अपने ऐप्लिकेशन के किसी वर्शन के लिए, ऐप्लिकेशन के बंद होने या ANR की उलझनों को कम करने या सिम्बॉलिकेट करने के लिए, आपको अपने ऐप्लिकेशन के हर वर्शन के लिए उलझन कम करने वाली या सिम्बॉलिकेशन फ़ाइलें अपलोड करनी होंगी.

ज़रूरी: यह चरण सिर्फ़ उन डेवलपर के लिए ज़रूरी है जो APK का इस्तेमाल करते हैं. अगर आप 'Android ऐप्लिकेशन बंडल' और 'Android Gradle प्लग इन' का 4.1 या उससे बाद वाला वर्शन इस्तेमाल कर रहे हैं, तो आपको कुछ भी करने की ज़रूरत नहीं है. हम बंडल में से उलझन कम करने वाली फ़ाइल अपने-आप निकाल लेंगे और आप अगले चरण पर जा सकते हैं. तीसरा चरण: ऐप्लिकेशन बंद होने से जुड़ी कम उलझन वाली स्टैक ट्रेस देखें. आप Android डेवलपर साइट पर ऐप्लिकेशन बंडल के बारे में और ज़्यादा जान सकते हैं.

'Play कंसोल' का इस्तेमाल करके फ़ाइलें अपलोड करना

उलझन कम करने वाली या सिम्बॉलिकेशन फ़ाइल अपलोड करने के लिए:

  1. Play कंसोल खोलें.
  2. कोई ऐप्लिकेशन चुनें.
  3. बाईं ओर मेन्यू पर, रिलीज़ > डिवाइस और वर्शन> ऐप्लिकेशन बंडल एक्सप्लोरर चुनें.
  4. सबसे ऊपर दाएं कोने पर दिए गए पिकर की मदद से, ज़रूरी आर्टफ़ैक्ट चुनें.
  5. डाउनलोड टैब को चुनें और नीचे की ओर स्क्रोल करके “एसेट” सेक्शन पर जाएं.
  6. मैपिंग फ़ाइल या डीबग सिंबल के लिए अपलोड वाले तीर के निशान पर क्लिक करें. इससे आपके ऐप्लिकेशन के वर्शन के लिए, उलझन कम करने वाली या सिम्बॉलिकेशन फ़ाइल अपलोड हो जाएगी.
Google Play डेवलपर API (एपीआई) का इस्तेमाल करके फ़ाइलें अपलोड करना

Google Play डेवलपर API (एपीआई) का इस्तेमाल करके फ़ाइलें अपलोड करने के लिए, Google डेवलपर साइट पर जाएं.

तीसरा चरण: ऐप्लिकेशन बंद होने से जुड़ी कम उलझन वाली स्टैक ट्रेस देखना

जब आप अपने ऐप्लिकेशन के किसी वर्शन के लिए ProGuard मैपिंग फ़ाइल या डीबग सिंबल फ़ाइल अपलोड कर देते हैं, तो उसके बाद आने वाली, ऐप्लिकेशन बंद होने और ANR की उलझनें कम हो जाएंगी. आप ऐप्लिकेशन बंद होने और ANR से जुड़ी हर समस्या के लिए, अपने ऐप्लिकेशन के ऐप्लिकेशन बंद होना और ANR की समस्या पेज पर जाकर, कम उलझन वाली स्टैक ट्रेस देख सकते हैं.

  1. Play कंसोल खोलें.
  2. कोई ऐप्लिकेशन चुनें.
  3. बाईं ओर मेन्यू पर, क्वालिटी > Android की ज़रूरी जानकारी > ऐप्लिकेशन बंद होना और ANR चुनें.
  4. ऐप्लिकेशन बंद होने की कोई समस्या चुनें.
  5. "स्टैक ट्रेस" सेक्शन में, आपको कम उलझन वाली और सिम्बॉलिकेट की हुई स्टैक ट्रेस दिखेंगी.

ज़रूरी: अपने ऐप्लिकेशन के किसी वर्शन के लिए मैपिंग फ़ाइल अपलोड करने के बाद, उस वर्शन के लिए सिर्फ़ भविष्य में होने वाली, ऐप्लिकेशन बंद होने और ANR की उलझनों को कम किया जाएगा. आपके ऐप्लिकेशन के किसी वर्शन के लिए मैपिंग फ़ाइल अपलोड करने से पहले उस वर्शन में आ चुकीं, ऐप्लिकेशन बंद होने या ANR की उलझनों को कम नहीं किया जाएगा.

अक्सर पूछे जाने वाले सवाल

मैं 'Play कंसोल' की उलझन को कम करने या सिम्बॉलिकेट करने की सुविधा का इस्तेमाल नहीं करना चाहता / चाहती हूं. क्या मैं इसे ऑफ़लाइन कर सकता/सकती हूं?

नेटिव ऐप्लिकेशन में स्टैक ट्रेस दिखाने के लिए, 'Play कंसोल' ndk-stack का इस्तेमाल करता है और Java में ऐप्लिकेशन बंद होने की समस्याओं को दिखाने के लिए ReTrace का इस्तेमाल करता है. अगर आप उलझन कम करने वाली अपनी फ़ाइलों को शेयर नहीं करना चाहते हैं, तो आप ऐप्लिकेशन बंद होने से जुड़े उलझे हुए स्टैक को 'Play कंसोल' से कॉपी कर सकते हैं. इसके बाद, उन्हें सिम्बॉलिकेट करने के लिए सही ऑफ़लाइन टूल का इस्तेमाल कर सकते हैं. हालांकि, यह प्रोसेस ऐप्लिकेशन बंद होने से जुड़े हर स्टैक के लिए मैन्युअल तरीके से पूरी की जानी चाहिए. इस वजह से यह प्रोसेस धीमी हो जाती है और इसमें ज़्यादा समय लगता है. उलझन कम करने वाली आपकी फ़ाइलें उपलब्ध कराकर, 'Play कंसोल' आपके लिए इसे प्रबंधित कर देगा.

मैंने उलझन कम करने वाली या सिम्बॉलिकेशन फ़ाइल अपलोड कर दी है, फिर भी ऐप्लिकेशन बंद होने और ANR से जुड़ी उलझनें अब तक कम क्यों नहीं हुईं?

जब आप अपने ऐप्लिकेशन के किसी वर्शन के लिए ProGuard मैपिंग फ़ाइल या डीबग सिंबल फ़ाइल अपलोड कर देते हैं, तो उसके बाद आने वाली, ऐप्लिकेशन बंद होने और ANR की उलझनें कम हो जाएंगी. 'Play कंसोल' में, ऐप्लिकेशन बंद होने और ANR की कम उलझन वाली समस्याएं देखने से पहले आपको समय देना होगा, ताकि डिवाइस इस्तेमाल करने वाले लोग, ऐप्लिकेशन बंद होने और ANR की नई समस्याओं की शिकायत दर्ज करा सकें.

उलझन कम करने वाली / सिम्बॉलिकेशन फ़ाइल अपलोड करने के बाद भी, ऐप्लिकेशन बंद होने और ANR की उलझनें आंशिक रूप से ही क्यों कम हुई हैं?

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

उलझन कम करने वाली / सिम्बॉलिकेशन फ़ाइल अपलोड करने के बाद, मुझे ऐप्लिकेशन बंद होने और ANR से जुड़ी कम, लेकिन ज़्यादा गंभीर समस्याएं क्यों मिलती हैं?

उलझन को कम करने वाली फ़ाइलों के बिना, 32-बिट और 64-बिट के डिवाइस पर या फिर ARM और Intel डिवाइस पर, ऐप्लिकेशन बंद होने और ANR की एक ही समस्या अलग-अलग दिखेगी. उलझन को कम करने वाली फ़ाइलें उपलब्ध कराकर, हम ऐप्लिकेशन बंद होने की इन समस्याओं को एक साथ इकट्ठा कर सकते हैं. इससे आपको अपने ऐप्लिकेशन में, बंद होने और ANR की सबसे असरदार समस्याओं के बारे में पता चलेगा.

अगर मैं फ़ाइल अपलोड करना भूल जाऊं, तो क्या होगा?

अगर आप अपने ऐप्लिकेशन के नए वर्शन के लिए फ़ाइल अपलोड करना भूल जाते हैं, तो उस वर्शन में ऐप्लिकेशन बंद होने और ANR की समस्याएं फिर से उलझ जाएंगी. इसे अभी अपलोड करने के लिए ऊपर दिए गए निर्देशों का पालन करें. जब आप अपने ऐप्लिकेशन के किसी वर्शन के लिए ProGuard मैपिंग फ़ाइल या डीबग सिंबल फ़ाइल अपलोड कर देते हैं, तो उसके बाद आने वाली, ऐप्लिकेशन बंद होने और ANR की उलझनें कम हो जाएंगी. Play Console में, ऐप्लिकेशन बंद होने और ANR की कम उलझन वाली समस्याएं देखने से पहले आपको कुछ समय देना होगा, ताकि डिवाइस इस्तेमाल करने वाले लोग ऐप्लिकेशन बंद होने और ANR की नई समस्याओं की शिकायत दर्ज कर सकें.

फ़ाइल अपलोड करना भूल जाने के जोखिम से बचने के लिए, अपनी बिल्ड प्रोसेस बदलें. ऐसा करके आप 'Android Gradle प्लग इन' के 4.1 या उसके बाद वाले वर्शन की मदद से, ऐप्लिकेशन बंडल इस्तेमाल कर सकते हैं. इस स्थिति में, आप Android डेवलपर साइट पर दिए गए निर्देशों का पालन करके ऐप्लिकेशन बंडल में डीबग सिंबल फ़ाइल को अपने-आप शामिल कर सकते हैं.

अगर मैं गलत फ़ाइल अपलोड कर दूं, तो क्या होगा?

अगर आप अपने ऐप्लिकेशन के किसी वर्शन के लिए गलत फ़ाइल अपलोड कर देते हैं, तो उस वर्शन में ऐप्लिकेशन बंद होने और ANR की समस्याएं फिर से उलझ जाएंगी. सही किया गया वर्शन अपलोड करने के लिए:

  1. Play कंसोल खोलें.
  2. कोई ऐप्लिकेशन चुनें.
  3. बाईं ओर मेन्यू पर, रिलीज़ > डिवाइस और वर्शन> ऐप्लिकेशन बंडल एक्सप्लोरर चुनें.
  4. सबसे ऊपर दाएं कोने पर दिए गए पिकर की मदद से, ज़रूरी आर्टफ़ैक्ट चुनें.
  5. डाउनलोड टैब को चुनें और नीचे की ओर स्क्रोल करके “एसेट” सेक्शन पर जाएं.
  6. उलझन कम करने वाली या सिम्बॉलिकेशन की गलत फ़ाइल के आगे, 'मिटाएं' आइकॉन पर क्लिक करें.
  7. गलत वर्शन को मिटाने के बाद, अपलोड आइकॉन पर क्लिक करें और अपने ऐप्लिकेशन के वर्शन के लिए सही फ़ाइल अपलोड करें.

जब आप अपने ऐप्लिकेशन के किसी वर्शन के लिए सही ProGuard मैपिंग फ़ाइल या डीबग सिंबल फ़ाइल अपलोड कर देते हैं, तो उसके बाद आने वाली, ऐप्लिकेशन बंद होने और ANR की उलझनें कम हो जाएंगी. Play Console में, ऐप्लिकेशन बंद होने और ANR की कम उलझन वाली समस्याएं देखने से पहले आपको कुछ समय देना होगा, ताकि डिवाइस इस्तेमाल करने वाले लोग ऐप्लिकेशन बंद होने और ANR की नई समस्याओं की शिकायत दर्ज कर सकें.

सलाह: फ़ाइल का गलत वर्शन अपलोड करने के जोखिम से बचने के लिए, अपनी बिल्ड प्रोसेस बदलें. ऐसा करके आप 'Android Gradle प्लग इन' के 4.1 या उसके बाद वाले वर्शन की मदद से, ऐप्लिकेशन बंडल इस्तेमाल कर सकते हैं. इस स्थिति में, आप Android डेवलपर साइट पर दिए गए निर्देशों का पालन करके ऐप्लिकेशन बंडल में डीबग सिंबल फ़ाइल को अपने-आप शामिल कर सकते हैं.

मैं अभी APK का इस्तेमाल कर रहा / रही हूं. मैं ऐप्लिकेशन बंडल का इस्तेमाल करने के लिए क्या करूं?

शुरू करने के लिए Android डेवलपर साइट पर जाएं.

मेरे ऐप्लिकेशन में नेटिव और Java कोड, दोनों हैं. क्या मैं नेटिव सिम्बॉलिकेशन फ़ाइल और Java की उलझन कम करने वाली फ़ाइल, दोनों अपलोड कर सकता / सकती हूं?

हां.

क्या यह उपयोगी था?
हम उसे किस तरह बेहतर बना सकते हैं?

और मदद चाहिए?

मदद के दूसरे तरीकों के लिए साइन इन करें ताकि आपकी समस्या झटपट सुलझ सके