2010-10-12 12 views
65

Kiedy mam coś takiegoJak debugować z zaciemnionymi (z ProGuard) aplikacjami na Androida?

ERROR/AndroidRuntime(18677): Caused by: java.lang.NullPointerException 
ERROR/AndroidRuntime(18677):  at com.companyname.a.a.a(Unknown Source) 

Skąd mogę wiedzieć, gdzie jest problem i debugowania ten problem? Mam tylko dane wyjściowe mapowania z ProGuard i nie znam numeru wiersza. Dzięki.

Odpowiedz

109

Dodaj następujące linie do konfiguracji proguard.

-renamesourcefileattribute SourceFile  
-keepattributes SourceFile,LineNumberTable 

Teraz twoje ślady stosu będzie zawierać numery linii, a za pomocą funkcji retrace że statki z PROGUARD (wliczone w Android SDK), jesteś w stanie do debugowania jak normalne.

Należy pamiętać, że nawet jeśli nie korzystano z tych dwóch opcji konfiguracji, funkcja odtwarzania nadal może wyświetlać przydatne informacje, pod warunkiem, że istnieje plik mapowań, chociaż nie jest on całkowicie jednoznaczny.

Uwaga: plik z odwzorowań jest produkowany przez opcję konfiguracji PROGUARD:

-printmapping outputfile.txt 

W pliku ant dostarczany z Android SDK, jest ona ustawiona na mapping.txt.

Powodzenia.

15

Aby użyć dowolnych śladów stosu z konta Android Market, można użyć pliku mapy, utworzonego za pomocą opcji -printmapping w konfiguracji ProGuard, przy użyciu narzędzia ReTrace (narzędzie towarzyszące ProGuard) do dekodowania śledzenia stosu. Można również dekodować ręcznie przy użyciu zawartości pliku mapy, ale jest to uciążliwe.

W podręczniku ProGuard pod przykładami znajduje się rozdział poświęcony tworzeniu przydatnych, zaciemnionych śladów stosu, w tym sposób utrzymywania numerów linii.

Niestety, jeśli nie skonfigurowałeś ProGuard, aby zachować numery linii, będziesz w stanie zidentyfikować tylko metodę, która zgłasza wyjątek.

+4

Ten proces jest również wyjaśniony na stronie http://developer.android.com/guide/developing/tools/proguard.html #decoding –

+0

Pojawienie się w ADT 17 (obecnie wersja podglądu) to kolejne zmiany w sposobie skonfigurowania PorGuard dla Androi re. http://tools.android.com/recent/proguardimprovements Nie zmienia sposobu debugowania przy użyciu odwzorowania wydruku, ale zmieni sposób początkowego skonfigurowania ProGuarda. – cistearns

+0

@cistearns Próbowałem tego samego, ale na zewnątrz jest tak samo jak zakodowana wartość :(jakiejkolwiek pomocy? –

4

Wklej ślad stosu w stack_trace.txt

Uruchom następujące polecenie: java -jar retrace.jar classes-processed.map stack_trace.txt

retrace.jar jest w sdk \ tools \ \ PROGUARD lib \ retrace.jar classes-processed.map to plik wyjściowy generowany przez program proguard, gdy wykonałeś obfuskację