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.