अपने रिलीज़ बिल्ड में नेटिव सिंबल शामिल करना

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

सिंबल वाली फ़ाइल अपलोड करना

Google Play Console, Android vitals में नेटिव क्रैश की रिपोर्ट दिखाता है. कुछ चरणों में, अपने ऐप्लिकेशन के लिए नेटिव डीबग सिंबल वाली फ़ाइल जनरेट और अपलोड की जा सकती है. इस फ़ाइल की मदद से, Android की ज़रूरी जानकारी में सिंबल वाले नेटिव क्रैश स्टैक ट्रेस (जिनमें क्लास और फ़ंक्शन के नाम शामिल होते हैं) देखे जा सकते हैं. इससे, प्रोडक्शन में अपने ऐप्लिकेशन को डीबग करने में मदद मिलती है. ये चरण, आपके प्रोजेक्ट में इस्तेमाल किए गए 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
  1. इस डायरेक्ट्री के कॉन्टेंट की ज़िप फ़ाइल बनाएं:

    cd app/build/intermediates/cmake/universal/release/obj
    zip -r symbols.zip .
    
  2. Google Play Console में, फ़ाइल को symbols.zip मैन्युअल तरीके से अपलोड करें.