Wo speichert Android Studio die ProGuard-Zuordnungsdatei?

180

Wo werden in Android Studio die ProGuard-Zuordnungsdateien generiert, nachdem eine signierte APK kompiliert wurde?

Ich bin mir nicht sicher, ob es nicht funktioniert oder ob ich den Dateipfad einfach vergessen habe, und meine obligatorische Google / Stack Overflow-Suche hat dies nicht beantwortet

CQM
quelle
1
es wird hier offiziell erklärt firebase.google.com/docs/crash/...
Jayakrishnan PM
3
@ JayakrishnanPM froh zu sehen, dass Google 3 Jahre später dazu kam.
CQM

Antworten:

269

Es sollte sich build/outputs/proguard/release/mapping.txtim Verzeichnis Ihres Anwendungsmoduls befinden.

In der neuesten Version von ProGuard und Android Studio befindet sich die Datei unter build/outputs/mapping/release/mapping.txt.

Scott Barta
quelle
5
Weitere Informationen zu den generierten Dateien und dem Pfad: developer.android.com/studio/build/shrink-code.html
Helton Isac
Wenn Ihr Sofortlauf aktiviert ist, können Sie die Zuordnungsdatei möglicherweise nicht sehen. Deaktivieren Sie Instant Run und erstellen Sie erneut.
Faizan Mubasher
1
Nach einem Update auf Gradle 6.2.2 / Gradle Plugin 3.6.1 haben sich die Pfade für uns geändert. /app/build/outputs/mapping/brandExampleEnvProductionRelease/mapping.txt /app/build/outputs/mapping/brandExampleEnvIntegrationBeta/mapping.txtsind die neuen Wege.
Carsten Hagemann
75

Für mich sind sie bei 'build/outputs/mapping/release'

Tom
quelle
16
'build /
output
1
Ja, dass man perfekt für Android Studio 2.3.2 ist
Subho
1
App / Build / Outputs / Mapping / Release / Mapping.txt bc gab es einen separaten Build-Ordner, der die Mapping-Datei nicht enthielt ...
NukeouT
39

Ich fand es sauberer, proguard so zu konfigurieren, dass die Mapping.txt-Datei an einen Speicherort außerhalb des build/Verzeichnisbaums geschrieben wird, damit sie bequemer in die Versionskontrolle eingecheckt werden kann.

Um dies zu erreichen, fügen Sie dies in Ihre proguard-rules.proDatei ein:

-printmapping mapping.txt

Dadurch wird es (höchstwahrscheinlich) im selben Verzeichnis wie Ihre proguard-rules.proDatei abgelegt. Letztendlich möchten Sie es wahrscheinlich in dasselbe Verzeichnis wie Ihre APK-Datei und mit einem entsprechenden Namen schreiben (einschließlich Flavour, Build-Typ usw.).

Hinweis: Nach meiner Erfahrung wird dies nicht durch die Proguard-Vorlagendatei (die von einem Kommentator zu einer anderen Antwort hier vorgeschlagen wurde) außer Kraft gesetzt .

UPDATE: Wenn Sie mehrere Produktvarianten haben, ist dies eine viel bessere Lösung: https://stackoverflow.com/a/31116608/444761

Kennzeichen
quelle
1
Dies ist besser als meine Lösung, da Sie sie, wie Sie sagen, unter Versionskontrolle stellen können.
Clive Jefferies
Warum möchten Sie diese Version steuern? Sie benötigen es für jede APK, die Sie separat veröffentlichen, da es vom Build abhängig ist. da du eine solche apk separat von der quelle hochladen / einchecken musst, ist es eigentlich nicht nötig, sie in der quelle VCS zu überprüfen!?
Denny1989
@ Denny1989 nicht sicher, was du meinst. Ich baue eine APK und speichere sie außerhalb der Versionskontrolle. Ich muss die Mapping-Datei irgendwo aufbewahren. Ich könnte es neben der APK speichern, aber ich finde es sauberer, die Version zu kontrollieren. Ich habe jedoch nur eine Release-APK pro Projekt, also YMMV.
Mark
36

Ich habe festgestellt, dass es nicht generiert wurde, also habe ich dies der Regeldatei hinzugefügt

-printmapping build/outputs/mapping/release/mapping.txt
Clive Jefferies
quelle
1
Ich habe festgestellt, dass Printmapping von einer von mir verwendeten Template-Proguard-Datei außer Kraft gesetzt wurde!
Junge
1
Dies funktionierte und erzeugte alle Proguard-Ausgabedateien für mich.
j2emanue
16

Es ist ziemlich spät, diese Frage zu beantworten, aber nur für den Fall, dass jemand meine Antwort braucht.

Speicherort der zu deobfuscierenden Zuordnungsdatei:

ProGuard speichert die Datei in der App app / build / output / Mapping / FLAVOUR / release / Mapping.txt

Im Debug-Modus benötigen Sie die Mapping-Datei im Allgemeinen nicht, da die Verschleierung im Allgemeinen deaktiviert ist. Wenn dies nicht der Fall ist, stellen Sie sicher, dass Sie in der Datei build.gradle den folgenden Code für die Debug-Variante haben.

debug {
    minifyEnabled false
    debuggable true
}

Einige Fallstricke:

Die Mapping.txt-Datei wird bei jedem Erstellen eines Release-Builds mit ProGuard überschrieben. Erstellen Sie daher zuerst eine Sicherungskopie dieser Datei, bevor Sie ein neues Release erstellen. Dies hilft dabei, die Stapelverfolgung einer älteren Version Ihrer App zu verschleiern.

Abgesehen davon gibt es zwei Möglichkeiten, Ihren Code zu verschleiern:

1. Laden Sie Ihre Mapping.txt-Datei in die Google Play Console hoch:

Wenn Sie Ihre App auf Google Play veröffentlichen, können Sie die Datei maps.txt für jede Version Ihrer APK hochladen. Anschließend deaktiviert Google Play eingehende Stack-Traces von vom Benutzer gemeldeten Problemen, sodass Sie sie in der Google Play-Konsole überprüfen können.

2. Verwenden Sie das lokale SDK-Tool retrace.sh/retrace.bat:

Manchmal möchten Sie die Release-Version Ihrer App ausführen (indem Sie die Build-Variante in Release ändern und ausführen), um die Fehler zu überprüfen und zu beheben, damit sie nicht in der Produktion auftreten (wenn sie im Play-Store veröffentlicht werden).

Verwenden Sie das Retrace-Skript ( retrace.bat unter Windows; retrace.sh unter Mac / Linux ), um einen verschleierten Stack-Trace selbst in einen lesbaren zu konvertieren .

Es befindet sich im <sdk-root>/tools/proguard/bin/Verzeichnis.

<sdk-root> ist der Ort, an dem alle Android-Bibliotheken und SDKS installiert wurden.

Das Skript verwendet die Mapping.txt-Datei und Ihren Stack-Trace und erstellt einen neuen, lesbaren Stack-Trace.

Befehlssyntax:

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

Beispielsweise:

retrace.bat -verbose mapping.txt obfuscated_trace.txt

Ich bevorzuge die lokale Version der Verschleierung, da dies sehr praktisch ist, um Produktionsfehler vorab zu überprüfen.

Ich hoffe, es hilft.

WitVault
quelle
12

Ich verwende die Version Android Studio 2.2.2 . Für mich befindet es sich an folgenden Orten:

Zum Debuggen: \app\build\outputs\mapping\debug\mapping.txt

Zur Veröffentlichung: \app\build\outputs\mapping\release\mapping.txt

Faisal Shaikh
quelle
9

Geben Sie hier die Bildbeschreibung ein

Hier ist es in einem Bild - Sie finden es im Mapping-Ordner:

Simon
quelle
2

Weil ich dumm bin und mich verliere, selbst wenn mir jemand sagt, wo sich die Datei befindet:

cd StudioProjects/fooProject
find . -name "mapping.txt" | xargs less
Philo
quelle