2016-06-25 15 views
5

के बजाय (अज्ञात स्रोत) क्यों है मेरे ऐप जिसे मैंने कभी भी अपनी मशीन पर क्रैश प्रकाशित करने के लिए बनाया और हस्ताक्षर किए, लॉगकट में मैं एक नल पॉइंटर अपवाद के लिए स्टैकट्रैक खोलता हूं .. लेकिन मैं हूं सटीक रेखा संख्या का पता लगाने में सक्षम नहीं है? क्योंकि यह कहते हैं कि (अज्ञात स्रोत) उदाहरण के लिए कुछ पंक्तियां इसएंड्रॉइड ऐप क्रैश: लाइन नंबर

Caused by: java.lang.NullPointerException 
    at me.com.myapplication.a.i.d(Unknown Source) 
    at me.com.myapplication.MainActivity.onResume(Unknown Source) 
    at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1210) 

की तरह लग रहे जैसा कि आप देख जहां-कभी वहाँ अपने आवेदन पैकेज मुझे कोई लाइन नंबर देखना है बजाय इसे अज्ञात स्रोत कहते हैं।

यहां इस परियोजना के लिए मेरी ग्रेडल कॉन्फ़िगरेशन है।

apply plugin: 'com.android.application' 
android { 
compileSdkVersion 23 
buildToolsVersion "23.0.2" 

defaultConfig { 
    applicationId "me.com.myappliaction" 
    minSdkVersion 8 
    targetSdkVersion 21 
    versionCode 6 
    versionName "2.0" 
} 

signingConfigs { 
    signed { 
     storeFile file('../keystore/my.keystore') 
     storePassword 'xxxxxx' 
     keyAlias 'xxxxx' 
     keyPassword 'xxxxxx' 
    } 
} 
buildTypes { 
    release { 
     minifyEnabled false 
     proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
    } 

    signed { 
     debuggable false 
     minifyEnabled true 
     proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     signingConfig signingConfigs.signed 
    } 

} 
} 
dependencies { 
compile fileTree(dir: 'libs', include: ['*.jar']) 
testCompile 'junit:junit:4.12' 
compile 'com.android.support:appcompat-v7:23.1.1' 
compile project(':mycomponent') 
} 

ऐप हस्ताक्षरित निर्माण संस्करण का उपयोग कर रहा था। मैं ProGuard आदेश इस्तेमाल किया वाक्य रचना

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

के बाद इस वर्ग के नाम बेहतर दिखाए जाते हैं, लेकिन अभी भी कोई लाइन नंबर निम्नलिखित का उपयोग कर ठीक से पता लगाने को पढ़ने के लिए? मैं सोच रहा हूं कि यहां वास्तव में क्या गलत है जिससे रेखा संख्या गायब हो जाती है ?? मैं ट्रेस कैसे प्राप्त कर सकता हूं जो मेरे कोड में लाइन नंबर दिखाता है और फिर भी इसे प्रकाशित करने के लिए तैयार कर सकता है?

+1

क्या आपने डीबग मोड में ऐप चलाने की कोशिश की है और त्रुटि को दोहराने के लिए जो कुछ भी किया है? आपको अज्ञात स्रोत मिलता है क्योंकि कोड obfuscated और कम से कम –

+0

डिबग में पुन: उत्पन्न नहीं कर सकता है, लेकिन क्या रिट्रेस कमांड है जिसका उपयोग मैंने विपरीत करने के लिए नहीं किया था और सटीक रेखाएं दिखाने के लिए नहीं किया था? – Ahmed

+0

यह है कि आप कैसे deobfuscate, हाँ, हालांकि, मुझे यकीन नहीं है कि लाइन संख्या उठाता है क्योंकि कोड अभी भी छोटा है। क्या आप डेवलपर कंसोल से यह निशान प्राप्त कर रहे हैं? https://support.google.com/googleplay/android-developer/answer/6295281 –

उत्तर

5

आदेश ProGuard बनाता है के बाद डिबग जानकारी बनाए रखने के लिए, आप (अपने proguard-rules.pro फाइल करने के लिए) निम्नलिखित विन्यास जोड़ने की जरूरत:

-keepattributes SourceFile,LineNumberTable 
# rename the source files to something meaningless, but it must be retained 
-renamesourcefileattribute '' 
+1

खाली स्ट्रिंग के बजाय, फ़ाइल का नाम बनाए रखने के लिए, केवल 'SourceFile' का उपयोग कर सकते हैं: ' -renamesourcefileattribute SourceFile ' – verybadalloc

0

यह त्रुटि जब आप में कम करें सक्षम किया है, हो जाएगा build.gradle। ProGuard का उपयोग करते समय

minifyEnabled true 

लाइन नंबर पाने के लिए आपको अंदर proguard-rules.pro

-keepattributes *Annotation*,SourceFile,LineNumberTable 

निम्नलिखित लाइन लिखने के लिए है और आप कर रहे हैं।

1

आप अपने Google Play डेवलपर कंसोल पर mapping.txt फ़ाइल भी अपलोड कर सकते हैं। कंसोल पर बस उस ऐप पर क्लिक करें जिसे आप deobfuscate करना चाहते हैं। फिर "एंड्रॉयड नब्ज"> "ANR की & क्रैश" पर जाएँ:

https://play.google.com/apps/publish/?dev_acc=[YOUR-DEV_ID]#DeobfuscationMappingFilesPlace:p=[your.app.package]

और mapping.txt फ़ाइल, जो आपके ऐप्लिकेशन के वर्तमान संस्करण फिट बैठता है अपलोड करें। mapping.txt की

स्थान:

एंड्रॉयड स्टूडियो:

\ [YOUR-परियोजना-निर्देशिका] \ अनुप्रयोग \ \ आउटपुट \ मानचित्रण \ रिहाई \ mapping.txt निर्माण

ग्रहण:

\ [ईसीएलआईपीएसई-वर्कस्पेस] \ [आपका-परियोजना-डीआईआर] \ proguard \ mapping।txt

सावधान रहें: mapping.txt के अपलोड के बाद ही त्रुटियां deobfuscated हैं। Google Play डेवलपर कंसोल में पहले से ही रिपोर्ट किए गए क्रैश का कोई डिबफुसेशन नहीं है।

संबंधित मुद्दे