2016-06-25 15 views
5

La mia app che ho creato e firmata per pubblicare si arresta in modo anomalo sul mio computer, nel logcat apro lo stacktrace per un'eccezione di puntatore nullo. Ma io sono non è in grado di individuare i numeri di riga esatti? perché dire (fonte sconosciuta) ad esempio alcune linee simile a questaArresto anomalo dell'app Android: Perché c'è (Fonte sconosciuta) invece del numero di linea

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) 

Come potete vedere dove mai c'è il mio pacchetto di applicazioni non vedo i numeri di riga, invece si dice fonte sconosciuta.

Ecco la configurazione del mio gradle per questo progetto.

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') 
} 

L'app utilizzava la versione build firmata. comando Proguard leggevo la traccia correttamente utilizzando seguente sintassi

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

dopo questo i nomi delle classi sono mostrati meglio, ma ancora non ha i numeri di riga? Mi chiedo cosa c'è di sbagliato qui che causa la mancanza dei numeri di riga ?? Come posso ottenere traccia che mostri i numeri di riga nel mio codice ed essere ancora in grado di renderlo pronto per la pubblicazione?

+1

Hai provato a eseguire l'app in modalità di debug e fare qualsiasi cosa per ripetere l'errore? Ottieni sorgente sconosciuta perché il codice è offuscato e minimizzato –

+0

Non riesco ancora a riprodurre in debug, Ma il comando di ritraccia che ho usato non intendeva fare il contrario e mostrare le linee esatte? – Ahmed

+0

È così che si deoffuscate, sì, tuttavia, non sono sicuro che raccolga numeri di linea perché il codice è ancora limitato. Stai ricevendo questa traccia dalla console degli sviluppatori? https://support.google.com/googleplay/android-developer/answer/6295281 –

risposta

5

Al fine di conservare le informazioni di debug dopo ProGuard costruisce, è necessario aggiungere la seguente configurazione (al file proguard-rules.pro):

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

Invece della stringa vuota, si può semplicemente usare 'SourceFile', per mantenere il nome del file: ' -renamesourcefileattribute SourceFile' – verybadalloc

0

si verificherà questo errore quando è stata attivata la Minify in build.gradle.

minifyEnabled true 

Per ottenere il numero della linea durante l'utilizzo di Proguard, si deve scrivere seguente riga all'interno proguard-rules.pro

-keepattributes *Annotation*,SourceFile,LineNumberTable 

e si è fatto.

1

È anche possibile caricare il file mapping.txt nella Console per gli sviluppatori di Google Play. Sulla console, fai clic sull'app che vuoi deobfuscare. Poi vai a "segni vitali"> "Android ANRS & blocco":

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

e caricare il file mapping.txt che si inserisce la versione corrente della vostra applicazione.

Location di mapping.txt:

Android Studio:

\ [YOUR-PROJECT-DIR] \ app \ costruire \ uscite \ mappatura \ release \ mapping.txt

Eclipse:

\ [ECLIPSE-WORKSPACE] \ [YOUR-PROJECT-DIR] \ proguard \ mapping.txt

Attenzione: gli errori vengono deoffuscati solo DOPO l'upload del mapping.txt. Non esiste alcuna deoffuscamento degli arresti anomali già segnalati nella Console per gli sviluppatori di Google Play.