Mam aplikację z włączoną funkcją Proguard (minifyenabled true), a ostatnio otrzymałem raport o awariach w Google Play Dev Console. Kiedy spojrzałem na nią, widziałem następujące:Konsola programisty Google Play z nazwami klas i metod w Stacktrace
Byłem zaskoczony, aby zobaczyć pełen nazw klas i metod w linii 1, ponieważ jest włączona Proguard. Zawsze wcześniej widział takie rzeczy:
na com.myname.myapp.cf (Unknown Source)
Jestem również ciekawy jak numer linii pojawia się jak nie jestem zachowanie numerów linii w moim pliku konfiguracyjnym Proguard (stąd dlaczego zazwyczaj widzę "Unknown Source" w moich śladach stacktraces).
Zdekompilowałem mój plik .apk, zaglądałem do pliku classes.dex i wszystko wyglądało OK. Zlokalizowałem klasę przywołaną w wierszu 1 stosu, a nazwa klasy została faktycznie zaciemniona, podobnie jak nazwa metody.
Teraz "MojaAktywność" (wiersz 2 stosu) jest początkową aktywnością mojej aplikacji i jako taka jest zadeklarowana w Manifeście, więc rozumiem, dlaczego nazwa nie jest zaciemniona, a metoda "onConnected" jest nie jest to moja metoda (pochodzi z Google Play Games Services), więc znowu jest OK.
'MyMethodName' jest wywoływana z ciągu onConnected tak:
@Override
public void onConnected(Bundle arg0) {
myClassObject.myMethodName(); //Where myClassObject is an instance of MyClassName
}
Debug ustawiony jest wyłączone w moim pliku build.gradle.
Nie przesyłaję plików mapping.txt do Konsoli Play, uruchamiam ręczne śledzenie, aby zobaczyć moje pozbawione zaciemnienia stosy stosu.
Byłbym wdzięczny, gdyby ktoś pomógł mi zrozumieć, dlaczego widzę tutaj moją pełną nazwę klasy i metody? Co mogę/powinienem zrobić, aby temu zapobiec?
Czy "MyClassName" jest klasą "Activity"? Czy korzystasz z domyślnych reguł 'ProGuard'? –