एंड्रॉइड स्टूडियो प्रोगार्ड मैपिंग फ़ाइल को कहां बचाता है?


182

एंड्रॉइड स्टूडियो में, एक हस्ताक्षरित एपीके को संकलित करने के बाद प्रोगार्ड मैपिंग फाइलें कहां से उत्पन्न होती हैं?

मुझे यकीन नहीं है कि यह काम नहीं कर रहा है या अगर मैं सिर्फ फ़ाइल पथ भूल गया हूं, और मेरी अनिवार्य Google / स्टैक ओवरफ़्लो खोज ने इसका जवाब नहीं दिया है


1
इसे यहां आधिकारिक तौर पर firebase.google.com/docs/crash/…
Jayakrishnan PM

3
@JayakrishnanPM को यह देखकर खुशी हुई कि 3 साल बाद Google को यह मिला।
सीक्यूएम

जवाबों:


272

यह build/outputs/proguard/release/mapping.txtआपके एप्लिकेशन मॉड्यूल की निर्देशिका में स्थित होना चाहिए ।

ProGuard और Android Studio के नवीनतम संस्करण में, फ़ाइल में स्थित है build/outputs/mapping/release/mapping.txt


5
उत्पन्न फ़ाइलों और पथ के बारे में अधिक जानकारी: developer.android.com/studio/build/shrink-code.html
Helton Isac

यदि आपका त्वरित रन सक्षम है, तो आप मैपिंग फ़ाइल को देखने में सक्षम नहीं हो सकते हैं। इंस्टेंट रन को अक्षम करें और फिर से निर्माण करें।
फैजान मुबाशेर

1
ग्रैडल 6.2.2 / ग्रेडल प्लगिन 3.6.1 के अपडेट के बाद हमारे लिए रास्ते बदल गए। /app/build/outputs/mapping/brandExampleEnvProductionRelease/mapping.txt /app/build/outputs/mapping/brandExampleEnvIntegrationBeta/mapping.txtनए रास्ते हैं।
कार्सट हेजमैन

75

मेरे लिए वे पर हैं 'build/outputs/mapping/release'


16
apping बिल्ड / आउटपुट / मैपिंग / रिलीज / मैपिंग.टेक्स्ट ’
aleb

1
हां, जो कि एंड्रॉइड स्टूडियो 2.3.2 के लिए एकदम सही है
सुभो

1
ऐप / बिल्ड / आउटपुट / मैपिंग / रिलीज़ / मैपिंग। txt वहाँ एक अलग बिल्ड फ़ोल्डर था जिसमें मैपिंग फ़ाइल नहीं थी ...
NukeouT

39

मुझे यह पता चला कि मैपिंग को लिखने के लिए प्रोफ़ेसर को कॉन्फ़िगर करना है। फ़ाइल को बाहर किसी स्थान पर लिखना है build/ निर्देशिका ट्री के , ताकि संस्करण नियंत्रण में इसे और अधिक आसानी से जांचा जा सके।

इसे प्राप्त करने के लिए, इसे अपनी proguard-rules.proफ़ाइल में रखें:

-printmapping mapping.txt

यह (सबसे अधिक संभावना है) इसे आपकी उसी निर्देशिका में रखेगा proguard-rules.pro फ़ाइल । अंततः, आप शायद इसे उसी एपीके के रूप में लिखना चाहते हैं जैसे कि आपकी एपीके फ़ाइल और समतुल्य नाम के साथ (जिसमें स्वाद, बिल्ड प्रकार आदि शामिल हो सकते हैं)।

नोट: मेरे अनुभव में, यह प्रोगार्ड टेम्प्लेट फ़ाइल (जो एक टिप्पणीकार द्वारा दूसरे उत्तर के लिए सुझाई गई थी) द्वारा अधिभूत नहीं है यहां )।

अद्यतन: यदि आपके पास कई उत्पाद फ्लेवर हैं, तो यह एक बेहतर समाधान है: https://stackoverflow.com/a/31116608/444761


1
यह मेरे समाधान से बेहतर है, जैसा कि आप कहते हैं कि आप इसे संस्करण नियंत्रण में रख सकते हैं।
क्लाइव जेफरीज

आप इस संस्करण को क्यों नियंत्रित करना चाहेंगे? आपको हर एपीके के लिए इसकी आवश्यकता है जिसे आप अलग-अलग जारी करते हैं क्योंकि यह निर्भर है। जैसा कि आपको स्रोत से ऐसे APK को अपलोड / चेक करना होगा, वास्तव में इसे स्रोत VCS में जांचने की कोई आवश्यकता नहीं है !?
डेनी

@ Denny1989 यकीन नहीं है कि तुम क्या मतलब है। मैं एक एपीके का निर्माण करता हूं और इसे संस्करण नियंत्रण के बाहर संग्रहीत करता हूं। मुझे मैपिंग फाइल कहीं रखनी है। मैं इसे एपीके के साथ स्टोर कर सकता था , लेकिन मुझे इसे नियंत्रित करने के लिए संस्करण क्लीनर मिल गया। हालाँकि, मेरे पास केवल एक रिलीज़ है एपीके प्रति प्रोजेक्ट इसलिए YMMV।
मार्क

36

मैंने पाया कि यह उत्पन्न नहीं हो रहा था, इसलिए मैंने इसे नियम फ़ाइल में जोड़ा

-printmapping build/outputs/mapping/release/mapping.txt

1
मैंने पाया कि प्रिंटमैपिंग को एक टेम्पलेट प्रोगार्ड फ़ाइल द्वारा अधिलेखित किया गया था जिसका मैं उपयोग कर रहा था!
लड़का '

1
यह काम किया और मेरे लिए सभी प्रॉपर आउटपुट फ़ाइलों को जेनरेट किया।
j2emanue

16

इस सवाल का जवाब देने के लिए काफी देर हो चुकी है लेकिन अगर किसी को मेरे जवाब की जरूरत है।

मानचित्रण फ़ाइल का स्थान deobfuscate में:

ProGuard ऐप ऐप में फाइल सेव / बिल्ड / आउटपुट / मैपिंग / FLAVOR / रिलीज़ / mapping.txt

आम तौर पर डिबग मोड में आपको मैपिंग फ़ाइल की आवश्यकता नहीं होती है क्योंकि आमतौर पर ऑबफ्यूजन अक्षम होता है। यदि यह ऐसा नहीं है तो बिल्ड.ग्रेड फ़ाइल में यह सुनिश्चित कर लें कि आपके पास डिबग वेरिएंट के लिए कोड नीचे है।

debug {
    minifyEnabled false
    debuggable true
}

कुछ गोत्र:

हर बार जब आप ProGuard के साथ रिलीज़ बिल्ड बनाते हैं, तो mapping.txt फ़ाइल अधिलेखित हो जाती है, इसलिए नया रिलीज़ बनाने से पहले पहले उस फ़ाइल का बैकअप लें। यह आपके ऐप के पुराने संस्करण से स्टैक ट्रेस को बाधित करने में मदद करेगा।

इसके अलावा आपके कोड को बाधित करने के दो तरीके हैं:

1. अपनी mapping.txt फ़ाइल को Google Play कंसोल पर अपलोड करें:

Google Play पर अपना ऐप प्रकाशित करते समय, आप अपने एपीके के प्रत्येक संस्करण के लिए मैपिंग.टेक्स्ट फ़ाइल अपलोड कर सकते हैं। तब Google Play उपयोगकर्ता-रिपोर्ट किए गए मुद्दों से आने वाले स्टैक के निशान को हटा देगा ताकि आप Google Play कंसोल में उनकी समीक्षा कर सकें।

2. स्थानीय एसडीके टूल का उपयोग करें।

कुछ बार आप अपने ऐप के रिलीज़ वर्ज़न (बिल्ड वेरिएंट को रिलीज़ करने और इसे चलाने के लिए बदलकर) को क्रॉस चेक करना चाहते हैं और त्रुटियों को ठीक करना चाहते हैं ताकि यह उत्पादन में न हो (जब प्ले-स्टोर में रिलीज़ हो)।

एक पठनीय स्टैक-ट्रेस को स्वयं पढ़ने योग्य में बदलने के लिए, पुन: स्क्रिप्ट का उपयोग करें ।)।

यह <sdk-root>/tools/proguard/bin/निर्देशिका में स्थित है ।

<sdk-root> वह स्थान है जहां आपके सभी Android लाइब्रेरी और sdks इंस्टॉल किए गए थे।

स्क्रिप्ट mapping.txt फ़ाइल और आपके स्टैक ट्रेस लेता है, एक नया, पठनीय स्टैक ट्रेस का निर्माण करता है।

कमांड सिंटैक्स:

retrace.bat|retrace.sh [-verbose] mapping.txt [<stacktrace_file>]

उदाहरण के लिए:

retrace.bat -verbose mapping.txt obfuscated_trace.txt

मैं ऑबफस्कैटिंग के स्थानीय संस्करण को पसंद करता हूं क्योंकि उत्पादन त्रुटियों की पूर्व जांच करना काफी आसान है।

मुझे उम्मीद है यह मदद करेगा।


12

मैं एंड्रॉइड स्टूडियो 2.2.2 संस्करण का उपयोग कर रहा हूं । मेरे लिए यह निम्न स्थानों में स्थित है:

डिबग के लिए: \app\build\outputs\mapping\debug\mapping.txt

रिलीज के लिए: \app\build\outputs\mapping\release\mapping.txt


11

यहां छवि विवरण दर्ज करें

यहाँ यह एक तस्वीर में है - आप इसे मैपिंग फ़ोल्डर में पाएंगे:


2

क्योंकि मैं गूंगा हूं और तब भी खो जाता हूं जब कोई मुझे बताता है कि फाइल कहां है:

cd StudioProjects/fooProject
find . -name "mapping.txt" | xargs less
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.