डिफ़ॉल्ट रूप से, आपके ऐप्लिकेशन के रिलीज़ बिल्ड में नेटिव कोड लाइब्रेरी हटा दी जाती हैं. इन लाइब्रेरी को हटाने का मतलब है कि आपके ऐप्लिकेशन में इस्तेमाल की गई किसी भी नेटिव लाइब्रेरी में मौजूद सिंबल टेबल और डीबग करने से जुड़ी जानकारी को हटा दिया जाता है. नेटिव कोड लाइब्रेरी हटाने से, ऐप्लिकेशन का साइज़ काफ़ी कम हो जाता है. हालांकि, जानकारी मौजूद न होने की वजह से, Google Play Console पर क्रैश की समस्या का पता नहीं लगाया जा सकता. जैसे, क्लास और फ़ंक्शन के नाम. क्रैश की समस्या को ठीक करने के लिए, आपको Play Console में अपने ऐप्लिकेशन के साथ डीबग सिंबल फ़ाइल शामिल करनी होगी.
सिंबल फ़ाइल अपलोड करना
Google Play Console, Android वाइटल्स में नेटिव क्रैश की रिपोर्ट दिखाता है. कुछ ही चरणों में, अपने ऐप्लिकेशन के लिए नेटिव डीबग सिंबल वाली फ़ाइल जनरेट और अपलोड की जा सकती है. इस फ़ाइल की मदद से, Android vitals में सिम्बॉलिकेट किए गए नेटिव क्रैश स्टैक ट्रेस (इनमें क्लास और फ़ंक्शन के नाम शामिल होते हैं) दिखते हैं. इससे आपको प्रोडक्शन में अपने ऐप्लिकेशन को डीबग करने में मदद मिलती है. ये चरण, आपके प्रोजेक्ट में इस्तेमाल किए गए Android Gradle प्लगिन के वर्शन के हिसाब से अलग-अलग होते हैं. साथ ही, यह भी तय होता है कि आपको Android ऐप्लिकेशन बंडल (सुझाया गया) या APK का इस्तेमाल करना है.
Android Gradle प्लगिन 4.1 या इसके बाद का वर्शन
अगर आपके प्रोजेक्ट में Android ऐप्लिकेशन बंडल (AAB) बनाया जाता है, तो अपने बिल्ड को इस तरह कॉन्फ़िगर किया जा सकता है कि AAB में नेटिव डीबग सिंबल वाली फ़ाइल अपने-आप शामिल हो जाए. इससे, ऐप्लिकेशन पब्लिश करते समय यह फ़ाइल Play Console पर अपलोड हो जाती है. इस फ़ाइल को रिलीज़ बिल्ड में शामिल करने के लिए, अपने ऐप्लिकेशन की build.gradle.kts फ़ाइल में यह जोड़ें:
android.buildTypes.release.ndk.debugSymbolLevel = { SYMBOL_TABLE | FULL }
नीचे दिए गए विकल्पों में से, डीबग सिंबल का लेवल चुनें:
- Play Console में सिंबोलाइज्ड स्टैक ट्रेस में फ़ंक्शन के नाम पाने के लिए,
SYMBOL_TABLEका इस्तेमाल करें. इस लेवल पर टूंबस्टोन की सुविधा उपलब्ध है. - Play Console में सिंबल वाले स्टैक ट्रेस में फ़ंक्शन के नाम, फ़ाइलें, और लाइन नंबर पाने के लिए,
FULLका इस्तेमाल करें.
अगर आपके प्रोजेक्ट में APK बनाया जाता है, तो अलग से नेटिव डीबग सिंबल वाली फ़ाइल जनरेट करने के लिए, पहले दिखाई गई android.buildTypes.release.ndk.debugSymbolLevel सेटिंग का इस्तेमाल करें. Google Play Console में, नेटिव डीबग सिंबल वाली फ़ाइल को मैन्युअल तरीके से अपलोड करें. यह प्रोसेस, स्टैक ट्रेस को डिकोड करने के लिए मैपिंग फ़ाइल अपलोड करने की प्रोसेस जैसी ही होती है.
बिल्ड प्रोसेस का हिस्सा होने के तौर पर, Android Gradle प्लग इन, प्रोजेक्ट की यहां बताई गई जगह पर इस फ़ाइल का आउटपुट देता है:
app/build/outputs/native-debug-symbols/<var>variant-name</var>/native-debug-symbols.zip
अगर आपकी डिपेंडेंसी में नेटिव लाइब्रेरी शामिल हैं, तो साइज़ कम करने के लिए डीबग करने से जुड़ी जानकारी हटा दी जाती है. इसकी पुष्टि करने के लिए, info
लॉग लेवल के साथ बिल्ड चलाएं और debugSymbolLevel = { SYMBOL_TABLE | FULL } सेट करें.
इसके बाद, बिल्ड आउटपुट में यह लाइन ढूंढें:
Unable to extract native debug metadata from ... because the native debug metadata has already been stripped.
Android Gradle प्लगिन 4.0 या इससे पहले का वर्शन (और अन्य बिल्ड सिस्टम)
बिल्ड प्रोसेस का हिस्सा होने के तौर पर, Android Gradle प्लगिन प्रोजेक्ट डायरेक्ट्री में ज़्यादा जानकारी वाली लाइब्रेरी की एक कॉपी रखता है. इस डायरेक्ट्री का स्ट्रक्चर, यहां दिए गए स्ट्रक्चर जैसा होता है:
app/build/intermediates/cmake/universal/release/obj/
├── armeabi-v7a/
│ ├── libgameengine.so
│ ├── libothercode.so
│ └── libvideocodec.so
├── arm64-v8a/
│ ├── libgameengine.so
│ ├── libothercode.so
│ └── libvideocodec.so
├── x86/
│ ├── libgameengine.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 .Google Play Console में,
symbols.zipफ़ाइल को मैन्युअल तरीके से अपलोड करें.