Dove Android Studio salva il file di mappatura ProGuard?


182

In Android Studio, dove vengono generati i file di mappatura ProGuard dopo aver compilato un APK firmato?

Non sono sicuro che non funzioni o se ho semplicemente dimenticato il percorso del file e la mia ricerca obbligatoria di Google Overflow / Stack non ha risposto a questa


1
è spiegato qui ufficialmente firebase.google.com/docs/crash/…
Jayakrishnan PM

3
@JayakrishnanPM sono felice di vedere che Google ci è riuscito 3 anni dopo.
CQM,

Risposte:


272

Dovrebbe trovarsi build/outputs/proguard/release/mapping.txtnella directory del modulo dell'applicazione.

Nell'ultima versione di ProGuard e Android Studio, il file si trova in build/outputs/mapping/release/mapping.txt.


5
Ulteriori informazioni sui file e sul percorso generati: developer.android.com/studio/build/shrink-code.html
Helton Isac

Se la tua corsa istantanea è abilitata, potresti non essere in grado di vedere il file di mappatura. Disabilita Instant Run e ricompila.
Faizan Mubasher,

1
Dopo un aggiornamento a Gradle 6.2.2 / Gradle Plugin 3.6.1 i percorsi sono cambiati per noi. /app/build/outputs/mapping/brandExampleEnvProductionRelease/mapping.txt /app/build/outputs/mapping/brandExampleEnvIntegrationBeta/mapping.txtsono i nuovi percorsi.
Carsten Hagemann,

75

Per me sono a 'build/outputs/mapping/release'


16
'build / output / mapping / release / mapping.txt'
aleb,

1
Sì, quello è perfetto per Android Studio 2.3.2
Subho,

1
app / build / output / mapping / release / mapping.txt bc c'era una cartella di build separata che non conteneva il file di mapping ...
NukeouT

39

Ho trovato più pulito configurare proguard per scrivere il file mapping.txt in una posizione esterna build/all'albero della directory, in modo che potesse essere più comodamente controllato nel controllo della versione.

Per raggiungere questo obiettivo, inseriscilo nel tuo proguard-rules.profile:

-printmapping mapping.txt

Questo (molto probabilmente) lo posizionerà nella stessa directory del tuo proguard-rules.profile. Alla fine, probabilmente vorrai scriverlo nella stessa directory del tuo file APK e con un nome equivalente (che potrebbe includere sapore, tipo di build ecc.).

Nota: nella mia esperienza, questo non è annullato dal file modello proguard (che è stato suggerito da un commentatore a un'altra risposta qui).

AGGIORNAMENTO: se hai più varianti di prodotto, questa è una soluzione molto migliore: https://stackoverflow.com/a/31116608/444761


1
Questo è meglio della mia soluzione, come come dici tu puoi metterlo sotto il controllo della versione.
Clive Jefferies,

perché vorresti controllare questa versione? ne hai bisogno per ogni APK che rilasci separatamente poiché dipende dalla build. dato che devi caricare / archiviare un simile apk separatamente dalla fonte, non è necessario controllarlo nel VCS di origine !?
Denny1989,

@ Denny1989 non sono sicuro di cosa intendi. Costruisco un APK e lo memorizzo al di fuori del controllo versione. Devo conservare il file di mappatura da qualche parte. Ho potuto conservarlo insieme al APK, ma trovo più pulito per il controllo di versione esso. Tuttavia, ho solo un APK di rilascio per progetto, quindi YMMV.
Mark

36

Ho scoperto che non veniva generato, quindi l'ho aggiunto al file delle regole

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

1
Ho scoperto che la stampa è stata annullata da un file proguard modello che stavo usando!
Ragazzo

1
questo ha funzionato e generato tutti i file di output di proguard per me.
j2emanue,

16

È abbastanza tardi per rispondere a questa domanda, ma nel caso qualcuno avesse bisogno della mia risposta.

Posizione del file di mappatura da deouscire:

ProGuard salva il file nell'app / build / output / mapping / FLAVOUR / release / mapping.txt dell'app

Generalmente in modalità debug non è necessario il file di mappatura perché in genere l'offuscamento è disabilitato. In caso contrario, assicurarsi che nel file build.gradle sia presente il codice seguente per la variante di debug.

debug {
    minifyEnabled false
    debuggable true
}

Alcuni Gotcha:

Il file mapping.txt viene sovrascritto ogni volta che si crea una build di rilascio con ProGuard, quindi eseguire prima il backup di quel file prima di creare una nuova versione. Aiuterà a tracciare lo stack offuscato da una versione precedente dell'app.

A parte questo ci sono due modi per offuscare il tuo codice:

1. Carica il tuo file mapping.txt su Google Play Console:

Quando pubblichi la tua app su Google Play, puoi caricare il file mapping.txt per ogni versione del tuo APK. Quindi Google Play deo-offuscerà le tracce dello stack in arrivo dai problemi segnalati dagli utenti in modo da poterli esaminare nella Console di Google Play.

2. Utilizzare lo strumento sdk locale retrace.sh/retrace.bat:

Alcune volte si desidera eseguire la versione di rilascio dell'app (modificando la variante di build per rilasciarla ed eseguirla) per eseguire il controllo incrociato e correggere gli errori in modo che non si verifichino in produzione (quando vengono rilasciati nel Play Store).

Per convertire tu stesso uno stack-trace offuscato in uno leggibile, usa lo script retrace ( retrace.bat su Windows; retrace.sh su Mac / Linux ).

Si trova nella <sdk-root>/tools/proguard/bin/directory.

<sdk-root> è il luogo in cui sono state installate tutte le librerie e gli SDK Android.

Lo script prende il file mapping.txt e la traccia dello stack, producendo una nuova traccia dello stack leggibile.

Sintassi del comando:

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

Per esempio:

retrace.bat -verbose mapping.txt obfuscated_trace.txt

Preferisco la versione locale di offuscamento in quanto è abbastanza utile per controllare gli errori di produzione.

Spero possa essere d'aiuto.


12

Sto usando la versione Android Studio 2.2.2 . Per me si trova nelle seguenti posizioni:

Per il debug: \app\build\outputs\mapping\debug\mapping.txt

Per il rilascio: \app\build\outputs\mapping\release\mapping.txt


11

inserisci qui la descrizione dell'immagine

Eccolo in una foto: lo troverai nella cartella di mappatura:


2

Perché sono stupido e mi perdo anche quando qualcuno mi dice dove si trova il file:

cd StudioProjects/fooProject
find . -name "mapping.txt" | xargs less
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.