2016-06-25 3 views
5

Moja aplikacja, którą zbudowałem i podpisałem, by czasami publikować awarie na moim komputerze, w logcatie otwieram stos stosu dla wyjątku wskaźnika pustego. Ale ja jestem nie jesteś w stanie zlokalizować dokładnych numerów linii? bo to powiedzieć (Unknown Source) na przykład niektóre linie wyglądają jak tegoAwaria aplikacji na Androida: dlaczego jest (Nieznane źródło) zamiast numeru wiersza

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) 

Jak można zobaczyć, gdzie jak dotąd nie jest mój pakiet aplikacji nie widzę numery linii zamiast mówi nieznanego źródła.

Oto moja konfiguracja gradle dla tego projektu.

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

Aplikacja korzystała z podpisanego wariantu budowy. użyłem komendy PROGUARD czytać ślad prawidłowo używając następującej składni

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

po to nazwy klas są pokazane lepiej, ale nadal nie ma numerów wierszy? Zastanawiam się, co dokładnie jest tutaj nie tak, co powoduje, że brakuje numerów linii? Jak mogę uzyskać ślad, który pokazuje numery linii w moim kodzie, a mimo to mogę przygotować go do opublikowania?

+1

Czy próbowałeś uruchomić aplikację w trybie debugowania i zrobić wszystko, aby powtórzyć błąd? Otrzymasz nieznane źródło, ponieważ kod jest zaciemniany i minimalizowany. –

+0

Nie można odtworzyć w debugowaniu, ale czy polecenie powrotu, którego użyłem, nie miało na celu odwrotności i pokazania dokładnych linii? – Ahmed

+0

W ten sposób rozjaśniasz, tak, jednak nie jestem pewien, że odbiera numery linii, ponieważ kod jest nadal zminimalizowany. Czy otrzymujesz ten ślad z konsoli programisty? https://support.google.com/googleplay/android-developer/answer/6295281 –

Odpowiedz

5

W celu zachowania informacji debugowania po buduje ProGuard, trzeba dodać następującą konfigurację (do pliku proguard-rules.pro):

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

Zamiast pustego łańcucha, można po prostu użyć 'SourceFile', aby zachować nazwę pliku: ' -renamesourcefileattribute SourceFile' – verybadalloc

0

Błąd ten występuje, gdy masz włączone Minify w build.gradle.

minifyEnabled true 

Aby uzyskać numer wiersza podczas korzystania ProGuard, trzeba napisać następującą linię wewnątrz proguard-rules.pro

-keepattributes *Annotation*,SourceFile,LineNumberTable 

i gotowe.

1

Możesz również przesłać plik mapping.txt do swojej Konsoli programisty Google Play. Na konsoli kliknij aplikację, którą chcesz rozjaśnić. Następnie przejdź do „Android wnętrzności”> „ANRS & wywala”:

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

i przesłać plik mapping.txt który pasuje do bieżącej wersji aplikacji.

Położenie mapping.txt:

Android Studio:

\ [TWÓJ-PROJEKT-DIR] \ app \ budować \ wyjścia \ odwzorowanie \ release \ mapping.txt

Eclipse:

\ [ECLIPSE-WORKSPACE] \ [TWÓJ-PROJEKT-DIR] \ proguard \ mapping.txt

Uwaga: błędy są rozjaśniane tylko PO załadowaniu pliku mapping.txt. Nie ma dezfumacji z powodu zgłoszonych już awarii w Konsoli programisty Google Play.

Powiązane problemy