Où Android Studio enregistre-t-il le fichier de mappage ProGuard?


182

Dans Android Studio, où sont les fichiers de mappage ProGuard générés après la compilation d'un APK signé?

Je ne sais pas si cela ne fonctionne pas ou si j'ai simplement oublié le chemin du fichier, et ma recherche obligatoire Google / Stack Overflow n'a pas répondu à cela


1
il est expliqué ici officiellement firebase.google.com/docs/crash/…
Jayakrishnan PM

3
@JayakrishnanPM heureux de voir que Google s'y est mis 3 ans plus tard.
CQM

Réponses:


272

Il doit se trouver build/outputs/proguard/release/mapping.txtdans le répertoire de votre module d'application.

Dans la dernière version de ProGuard et Android Studio, le fichier se trouve à l'adresse build/outputs/mapping/release/mapping.txt.


5
Plus d'informations sur les fichiers générés et le chemin: developer.android.com/studio/build/shrink-code.html
Helton Isac

Si votre exécution instantanée est activée, vous ne pourrez peut-être pas voir le fichier de mappage. Désactivez Instant Run et reconstruisez à nouveau.
Faizan Mubasher

1
Après une mise à jour vers Gradle 6.2.2 / Gradle Plugin 3.6.1, les chemins ont changé pour nous. /app/build/outputs/mapping/brandExampleEnvProductionRelease/mapping.txt /app/build/outputs/mapping/brandExampleEnvIntegrationBeta/mapping.txtsont les nouveaux chemins.
Carsten Hagemann

75

Pour moi, ils sont à 'build/outputs/mapping/release'


16
'build / sorties / mapping / release / mapping.txt'
aleb

1
Oui, celui-là est parfait pour le studio Android 2.3.2
Subho

1
app / build / sorties / mapping / release / mapping.txt bc il y avait un dossier de construction séparé qui ne contenait pas le fichier de mappage ...
NukeouT

39

J'ai trouvé plus propre de configurer proguard pour écrire le fichier mapping.txt dans un emplacement en dehors de l' build/arborescence de répertoires, afin qu'il puisse être plus commodément vérifié dans le contrôle de version.

Pour y parvenir, mettez ceci dans votre proguard-rules.prodossier:

-printmapping mapping.txt

Cela le placera (très probablement) dans le même répertoire que votre proguard-rules.profichier. En fin de compte, vous voudrez probablement l'écrire dans le même répertoire que votre fichier APK et avec un nom équivalent (qui peut inclure la saveur, le type de construction, etc.).

Remarque: d'après mon expérience, cela n'est pas annulé par le fichier de modèle proguard (qui a été suggéré par un commentateur à une autre réponse ici).

MISE À JOUR: Si vous avez plusieurs saveurs de produits, alors c'est une bien meilleure solution: https://stackoverflow.com/a/31116608/444761


1
C'est mieux que ma solution, comme vous le dites, vous pouvez ensuite le placer sous contrôle de version.
Clive Jefferies

pourquoi souhaitez-vous contrôler la version de celui-ci? vous en avez besoin pour chaque APK que vous publiez séparément car il dépend de la construction. comme vous devez télécharger / enregistrer un tel apk séparément de la source, il n'est en fait pas nécessaire de le vérifier dans le VCS source !?
Denny1989

@ Denny1989 ne sais pas ce que vous voulez dire. Je crée un APK et le stocke en dehors du contrôle de version. Je dois garder le fichier de cartographie quelque part. Je pourrais le stocker à côté de l'APK, mais je trouve qu'il est plus facile de le contrôler en version. Cependant, je n'ai qu'une seule version d'APK par projet, donc YMMV.
Mark

36

J'ai trouvé qu'il n'était pas généré, j'ai donc ajouté ceci au fichier de règles

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

1
J'ai trouvé que le mappage d'impression était annulé par un fichier proguard de modèle que j'utilisais!
Boy

1
cela a fonctionné et a généré tous les fichiers de sortie proguard pour moi.
j2emanue

16

Il est assez tard pour répondre à cette question, mais juste au cas où quelqu'un aurait besoin de ma réponse.

Emplacement du fichier de mappage à désobfusquer:

ProGuard enregistre le fichier dans l'application app / build / sorties / mapping / FLAVOR / release / mapping.txt

En général, en mode débogage, vous n'avez pas besoin du fichier de mappage car le masquage est généralement désactivé. Si ce n'est pas le cas, assurez-vous que le fichier build.gradle contient le code ci-dessous pour la variante de débogage.

debug {
    minifyEnabled false
    debuggable true
}

Quelques Gotchas:

Le fichier mapping.txt est écrasé chaque fois que vous créez une version de version avec ProGuard, prenez donc d'abord une sauvegarde de ce fichier avant de créer une nouvelle version. Cela aidera à masquer la trace de la pile à partir d'une ancienne version de votre application.

En dehors de cela, il existe deux façons de masquer votre code:

1. Téléchargez votre fichier mapping.txt dans Google Play Console:

Lorsque vous publiez votre application sur Google Play, vous pouvez télécharger le fichier mapping.txt pour chaque version de votre APK. Ensuite, Google Play désobfusquera les traces de pile entrantes des problèmes signalés par l'utilisateur afin que vous puissiez les examiner dans la console Google Play.

2. Utilisez l'outil SDK local retrace.sh/retrace.bat:

Parfois, vous souhaitez exécuter la version de version de votre application (en changeant la variante de construction en version et en l'exécutant) pour vérifier et corriger les erreurs afin que cela ne se produise pas en production (lors de la publication sur le Play-Store).

Pour convertir vous-même une trace de pile masquée en une trace lisible, utilisez le script retrace ( retrace.bat sous Windows; retrace.sh sous Mac / Linux ).

Il se trouve dans le <sdk-root>/tools/proguard/bin/répertoire.

<sdk-root> est l'endroit où toutes vos bibliothèques et sdks Android ont été installées.

Le script prend le fichier mapping.txt et votre trace de pile, produisant une nouvelle trace de pile lisible.

Syntaxe de la commande:

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

Par exemple:

retrace.bat -verbose mapping.txt obfuscated_trace.txt

Je préfère la version locale de l'obscurcissement car c'est assez pratique pour pré-vérifier les erreurs de production.

J'espère que cela aide.


12

J'utilise la version Android Studio 2.2.2 . Pour moi, il est situé aux endroits suivants:

Pour le débogage: \app\build\outputs\mapping\debug\mapping.txt

Pour la libération: \app\build\outputs\mapping\release\mapping.txt


11

entrez la description de l'image ici

Le voici dans une image - vous le trouverez dans le dossier mapping:


2

Parce que je suis stupide et que je me perds même quand quelqu'un me dit où se trouve le fichier:

cd StudioProjects/fooProject
find . -name "mapping.txt" | xargs less
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.