Gdzie Android Studio zapisuje plik mapowania ProGuard?


182

Gdzie w Android Studio są pliki mapowania ProGuard generowane po skompilowaniu podpisanego APK?

Nie jestem pewien, czy to nie działa, czy po prostu zapomniałem ścieżki pliku, a moje obowiązkowe wyszukiwanie w Google / Stack Overflow nie odpowiedziało na to


1
wyjaśniono to tutaj oficjalnie firebase.google.com/docs/crash/…
— Jayakrishnan PM

3
@JayakrishnanPM cieszę się, że Google zajęło się tym 3 lata później.
— CQM

Odpowiedzi:


272

Powinien znajdować się pod adresem build/outputs/proguard/release/mapping.txtw katalogu modułu aplikacji.

W najnowszej wersji ProGuard i Android Studio plik znajduje się pod adresem build/outputs/mapping/release/mapping.txt.


5
Więcej informacji o wygenerowanych plikach i ścieżce: developer.android.com/studio/build/shrink-code.html
— Helton Isac

Jeśli Twoje Instant Run jest włączone, możesz nie być w stanie zobaczyć pliku mapowania. Wyłącz natychmiastowe uruchamianie i buduj ponownie.
— Faizan Mubasher

1
Po aktualizacji do Gradle 6.2.2 / Gradle Plugin 3.6.1 ścieżki uległy zmianie. /app/build/outputs/mapping/brandExampleEnvProductionRelease/mapping.txt /app/build/outputs/mapping/brandExampleEnvIntegrationBeta/mapping.txtsą nowe ścieżki.
— Carsten Hagemann

75

Dla mnie są na 'build/outputs/mapping/release'


16
„build / output / mapping / release /
— mapping.txt

1
Tak, ten jest idealny dla Android Studio 2.3.2
— Subho

1
app / build / output / mapping / release / mapping.txt bc istniał oddzielny folder kompilacji, który nie zawierał pliku mapowania ...
— NukeouT

39

Zauważyłem, że łatwiejsze jest skonfigurowanie programu proguard do zapisywania pliku mapping.txt w lokalizacji poza build/drzewem katalogów, aby można go było wygodniej sprawdzić w kontroli wersji.

Aby to osiągnąć, umieść to w swoim proguard-rules.propliku:

-printmapping mapping.txt

Spowoduje to (najprawdopodobniej) umieszczenie go w tym samym katalogu, co proguard-rules.proplik. Ostatecznie prawdopodobnie chcesz zapisać go w tym samym katalogu, co plik APK i pod równoważną nazwą (która może obejmować smak, typ kompilacji itp.).

Uwaga: z mojego doświadczenia wynika, że nie jest to zastępowane przez plik szablonu proguard (co zasugerował komentator do innej odpowiedzi tutaj).

AKTUALIZACJA: Jeśli masz wiele smaków produktu, jest to znacznie lepsze rozwiązanie: https://stackoverflow.com/a/31116608/444761


1
Jest to lepsze niż moje rozwiązanie, ponieważ tak jak mówisz, możesz następnie umieścić je pod kontrolą wersji.
— Clive Jefferies

dlaczego chcesz kontrolować wersję tego? potrzebujesz go dla każdego wydawanego oddzielnie pakietu APK, ponieważ jest on zależny od kompilacji. ponieważ musisz przesłać / sprawdzić taki apk oddzielnie od źródła, w rzeczywistości nie ma potrzeby sprawdzania go w źródłowym VCS !?
— Denny1989,

@ Denny1989 nie wiem, co masz na myśli. Tworzę APK i przechowuję go poza kontrolą wersji. Muszę gdzieś przechowywać plik mapowania. I mógłby przechowywać go obok APK, ale uważam go czystsze go kontrolować wersji. Jednak mam tylko jeden pakiet APK na projekt, więc YMMV.
— Mark

36

Okazało się, że nie jest generowany, więc dodałem to do pliku reguł

-printmapping build/outputs/mapping/release/mapping.txt

1
Okazało się, że funkcja printmapping została zastąpiona przez plik proguard szablonu, którego używałem!
— Boy

1
to zadziałało i wygenerowało dla mnie wszystkie pliki wyjściowe proguard.
— j2emanue

16

Jest już dość późno, aby odpowiedzieć na to pytanie, ale na wypadek, gdyby ktoś potrzebował mojej odpowiedzi.

Lokalizacja pliku mapowania do odszyfrowania:

ProGuard zapisuje plik w aplikacji app / build / output / mapping / FLAVOR / release / mapping.txt

Generalnie w trybie debugowania nie potrzebujesz pliku mapowania, ponieważ generalnie zaciemnianie jest wyłączone. Jeśli tak nie jest, upewnij się, że w pliku build.gradle masz poniższy kod wariantu debugowania.

debug {
    minifyEnabled false
    debuggable true
}

Niektóre kłopoty:

Plik mapping.txt jest nadpisywany za każdym razem, gdy tworzysz kompilację wydania za pomocą ProGuard, więc najpierw wykonaj kopię zapasową tego pliku przed utworzeniem nowej wersji. Pomoże to w zaciemnieniu śladu stosu ze starszej wersji aplikacji.

Oprócz tego istnieją dwa sposoby zaciemnienia kodu:

1. Prześlij plik mapping.txt do Konsoli Google Play:

Publikując aplikację w Google Play, możesz przesłać plik mapping.txt dla każdej wersji swojego pakietu APK. Następnie Google Play odszyfuskuje przychodzące ślady stosu z problemów zgłaszanych przez użytkowników, aby można było je przejrzeć w Konsoli Google Play.

2. Użyj lokalnego narzędzia SDK retrace.sh/retrace.bat:

Czasami chcesz uruchomić wydaną wersję swojej aplikacji (zmieniając wariant kompilacji na wydanie i uruchamiając ją), aby sprawdzić krzyżowo i naprawić błędy, aby nie zdarzały się one w środowisku produkcyjnym (po wydaniu do sklepu Play).

Aby samodzielnie przekonwertować zaciemniony ślad stosu na czytelny, użyj skryptu retrace ( retrace.bat w systemie Windows; retrace.sh w systemie Mac / Linux ).

Znajduje się w <sdk-root>/tools/proguard/bin/katalogu.

<sdk-root> to miejsce, w którym zostały zainstalowane wszystkie biblioteki i pakiety SDK systemu Android.

Skrypt pobiera plik mapping.txt i ślad stosu, tworząc nowy, czytelny ślad stosu.

Składnia polecenia:

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

Na przykład:

retrace.bat -verbose mapping.txt obfuscated_trace.txt

Preferuję lokalną wersję zaciemniania, ponieważ jest to bardzo przydatne do wstępnego sprawdzania błędów produkcyjnych.

Mam nadzieję, że to pomoże.


12

Używam wersji Android Studio 2.2.2 . Dla mnie znajduje się w następujących lokalizacjach:

Do debugowania: \app\build\outputs\mapping\debug\mapping.txt

Do wypuszczenia: \app\build\outputs\mapping\release\mapping.txt


11

wprowadź opis obrazu tutaj

Tutaj jest na zdjęciu - znajdziesz go w folderze mapowania:


2

Ponieważ jestem głupi i gubię się, nawet jeśli ktoś mi powie, gdzie jest plik:

cd StudioProjects/fooProject
find . -name "mapping.txt" | xargs less
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.