8

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

enter image description here

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?

+0

Czy "MyClassName" jest klasą "Activity"? Czy korzystasz z domyślnych reguł 'ProGuard'? –

Odpowiedz

3

Po tygodniach dywagacje nad tym, w końcu odkrył przyczynę ...

wystarczyć to znaczy, moja wydana aplikacja jest całkowicie zamaskowany - te de-stack ukrywane ślady pochodzą własnego urządzenia testowego !!

Tak, moje własne urządzenie testowe działa bezpośrednio z poziomu aplikacji Android Studio i unsigned. (I z oczywistych powodów nie włączam ProGuarda na moich kompilacjach debugujących).

Urządzenie, którego używałem do testowania tej aplikacji, nie jest urządzeniem "głównego nurtu", a "nazwa", która pojawia się w konsoli Dev Consol, nie jest podobna do rzeczywistej nazwy urządzenia, więc nie zauważyłam tego od razu.

Jestem prawie pewien, że to nigdy nie miało miejsca w przeszłości (na pewno nie widziałem tego do tej pory) - dlaczego ktoś chciałby, aby raporty o awariach z ich kompilacji debugowania pojawiały się w Konsoli Dysku wraz z awariami podczas produkcji, Nie wiem

Tak więc, jeśli ktoś widzi ten problem, sprawdź, czy to nie są twoje własne kompilacje debugowania, które powodują napływ śladów stosu, zanim cokolwiek innego!

-2

Nie przesyłaję plików mapping.txt do Konsoli Play, uruchamiam ręcznie odwzorowanie , aby zobaczyć moje pozbawione zaciemnienia stosy stosów.

Następnie możesz dodać do gry Google Play grę w wersji mapping.txt, która zapewni, że twoje pakiety i nazwy klas zostaną zamaskowane.

+0

To nie jest poprawne - plik mappings.txt jest przesyłany, dzięki czemu możesz wyświetlać pozbawione ukrytych śladów stosu w konsoli programisty bezpośrednio, bez konieczności ręcznego używania narzędzia, takiego jak odtwarzanie. Nie ma to nic wspólnego z utrzymywaniem ich w ukryciu. Wręcz przeciwnie. Zobacz: https://support.google.com/googleplay/android-developer/answer/6295281?hl=en-GB – Zippy