8

में क्लास और विधि नाम दिखा रहा है मेरे पास प्रोगार्ड सक्षम (minifyenabled true) के साथ एक ऐप है और हाल ही में Google Play Dev Console में एक क्रैश रिपोर्ट मिली है। जब मैं इसे देखा है, मैं देखा निम्नलिखित:Google Play Dev Console Stacktrace

enter image description here

मैं पंक्ति 1 में पूर्ण वर्ग और विधि के नाम देख कर हैरान था, के रूप में Proguard सक्षम है।

com.myname.myapp.cf पर (अज्ञात स्रोत)

मैं भी उत्सुक कैसे लाइन नंबर के रूप में मैं नहीं कर रहा हूँ दिखाई दे रहा है कर रहा हूँ: मैं हमेशा पूर्व में इस तरह बातें देखा है मेरे प्रोगार्ड कॉन्फ़िगरेशन फ़ाइल में लाइन नंबरों को संरक्षित करना (इसलिए, मैं आमतौर पर अपने स्टैकट्रैस में 'अज्ञात स्रोत' क्यों देखता हूं)।

मैंने कक्षाओं .ex फ़ाइल पर peeked मेरे .apk decompiled और यह सब ठीक लग रहा था। मैं स्टैकट्रस के लाइन 1 में संदर्भित कक्षा में स्थित हूं और क्लास नाम वास्तव में विधि नाम के रूप में obfuscated था।

अब, 'माईएक्टिविटी' (स्टैकट्रैक की लाइन 2) लॉन्च है मेरे ऐप की गतिविधि, और जैसा कि मैनिफेस्ट में घोषित किया गया है, इसलिए मैं समझता हूं कि इसका नाम क्यों खराब नहीं हुआ है, और 'ऑनकनेक्टेड' विधि है मेरा एक तरीका नहीं है (यह Google Play गेम्स सेवाओं से आता है), इसलिए, यह ठीक है।

'MyMethodName' से कहा जाता है के भीतर ऐसा तरह onConnected:

@Override 
public void onConnected(Bundle arg0) { 
    myClassObject.myMethodName();  //Where myClassObject is an instance of MyClassName 
} 

डीबग मेरी build.gradle फ़ाइल में अक्षम पर सेट किया जाता है।

मैं प्ले कंसोल में mapping.txt फ़ाइलों को अपलोड नहीं करता हूं, मैं अपने डी-ओबफस्केटेड स्टैकट्रैस को देखने के लिए मैन्युअल रूप से रीट्रेस चलाता हूं।

मैं सराहना करता हूं कि कोई मुझे समझने में मदद कर सकता है कि मैं यहां अपना पूर्ण वर्ग और विधि नाम क्यों देख रहा हूं? इसे रोकने के लिए मैं क्या कर सकता/सकती हूं?

+0

क्या 'MyClassName' एक 'गतिविधि' कक्षा है? क्या आप डिफ़ॉल्ट 'ProGuard' नियमों का उपयोग कर रहे हैं? –

उत्तर

3

इस पर agonizing के सप्ताह के बाद, मैं अंत में कारण की खोज की ...

पर्याप्त कहने के लिए है, मेरी जारी किया गया अनुप्रयोग पूरी तरह से समझ से परे है - इन डी-समझ से परे स्टैक ट्रेस मेरे अपने परीक्षण उपकरण से आ रहे हैं !!

हाँ, मेरे अपने परीक्षण उपकरण सीधे एप्लिकेशन चलाने वाले Android स्टूडियो के माध्यम से और अहस्ताक्षरित। (और स्पष्ट कारण के लिए, मैं अपने डीबग बिल्ड पर ProGuard सक्षम नहीं करता)।

डिवाइस जो मैं इस ऐप का परीक्षण करने के लिए उपयोग करता हूं वह 'मुख्यधारा' डिवाइस नहीं है और देव कंसोल में दिखाई देने वाला 'नाम' डिवाइस के वास्तविक नाम के समान नहीं है, इसलिए मैंने तुरंत ध्यान नहीं दिया।

मुझे यकीन है कि यह अतीत में कभी नहीं हुआ (मैंने निश्चित रूप से इसे अब तक नहीं देखा है) - क्यों कोई भी डेब कंसोल में क्रैश रिपोर्ट को उत्पादन निर्माण दुर्घटनाओं के साथ प्रकट करने के लिए बनाता है, मुझे नहीं पता।

तो, अगर कोई इस समस्या को देख रहा है, तो जांचें कि यह आपकी खुद की डीबग बिल्ड नहीं है जिससे किसी और चीज से पहले स्टैक निशान का प्रवाह हो जाता है!

-2

मैं प्ले कंसोल के लिए फ़ाइलों को mapping.txt अपलोड नहीं करते हैं, मैं मैन्युअल retrace चलाने मेरी de-समझ से परे stacktraces को देखने के लिए।

फिर आप mapping.txt को Google play में जोड़ना चाहेंगे जो सुनिश्चित करेगा कि आपके पैकेज और कक्षा के नाम obfuscated हैं।

+0

यह सही नहीं है - mappings.txt अपलोड किया गया है ताकि आप रीडर्रेस जैसे टूल का मैन्युअल रूप से उपयोग किए बिना सीधे डेवलपर कंसोल के भीतर डी-ओबफस्केटेड स्टैक निशान देख सकें। उन्हें अपमानित रखने के साथ इसका कोई लेना-देना नहीं है। काफी विपरीत। देखें: https://support.google.com/googleplay/android-developer/answer/6295281?hl=hi-GB – Zippy