¿Dónde guarda Android Studio el archivo de mapeo ProGuard?

182

En Android Studio, ¿dónde se generan los archivos de mapeo ProGuard después de compilar un APK firmado?

No estoy seguro de si no funciona o si simplemente olvidé la ruta del archivo, y mi búsqueda obligatoria de Google / Stack Overflow no respondió esto

CQM
fuente
1
se explica aquí oficialmente firebase.google.com/docs/crash/…
Jayakrishnan PM
3
@JayakrishnanPM me alegra ver que Google lo logró 3 años después.
CQM

Respuestas:

272

Debe ubicarse en build/outputs/proguard/release/mapping.txtel directorio de su módulo de aplicación.

En la última versión de ProGuard y Android Studio, el archivo se encuentra en build/outputs/mapping/release/mapping.txt.

Scott Barta
fuente
55
Más información sobre los archivos generados y la ruta: developer.android.com/studio/build/shrink-code.html
Helton Isac
Si su Ejecución instantánea está habilitada, es posible que no pueda ver el archivo de asignación. Deshabilita la ejecución instantánea y compila nuevamente.
Faizan Mubasher
1
Después de una actualización de Gradle 6.2.2 / Gradle Plugin 3.6.1, las rutas cambiaron para nosotros. /app/build/outputs/mapping/brandExampleEnvProductionRelease/mapping.txt /app/build/outputs/mapping/brandExampleEnvIntegrationBeta/mapping.txtSon los nuevos caminos.
Carsten Hagemann
75

Para mí están en 'build/outputs/mapping/release'

Tom
fuente
16
'build / salidas / mapping / release /
mapping.txt
1
Sí, ese es perfecto para Android Studio 2.3.2
Subho
1
app / build / salidas / mapping / release / mapping.txt bc había una carpeta de compilación separada que no contenía el archivo de mapeo ...
NukeouT
39

Encontré más limpio configurar proguard para escribir el archivo mapping.txt en una ubicación fuera del build/árbol de directorios, para que pueda ser más convenientemente registrado en el control de versiones.

Para lograr esto, ponga esto en su proguard-rules.proarchivo:

-printmapping mapping.txt

Esto (muy probablemente) lo colocará en el mismo directorio que su proguard-rules.proarchivo. En última instancia, probablemente desee escribirlo en el mismo directorio que su archivo APK y con un nombre equivalente (que puede incluir sabor, tipo de compilación, etc.).

Nota: en mi experiencia, esto no es anulado por el archivo de plantilla Proguard (que fue sugerido por un comentarista a otra respuesta aquí).

ACTUALIZACIÓN: si tiene múltiples sabores de productos, esta es una solución mucho mejor: https://stackoverflow.com/a/31116608/444761

marca
fuente
1
Esto es mejor que mi solución, ya que, como usted dice, puede colocarlo bajo control de versiones.
Clive Jefferies
¿Por qué te gustaría controlar esta versión? lo necesitas para cada APK que lanzas por separado, ya que depende de la compilación. ya que tiene que cargar / registrar una aplicación de este tipo por separado desde la fuente, en realidad no es necesario verificarla en el VCS de origen.
Denny1989
@ Denny1989 no estoy seguro de lo que quieres decir. Construyo un APK y lo guardo fuera del control de versiones. Tengo que guardar el archivo de mapeo en alguna parte. Yo podría almacenarlo junto con el APK, pero me resulta más limpio para el control de versiones él. Sin embargo, solo tengo un APK de lanzamiento por proyecto, así que YMMV.
Mark
36

Descubrí que no se estaba generando, así que agregué esto al archivo de reglas

-printmapping build/outputs/mapping/release/mapping.txt
Clive Jefferies
fuente
1
¡Encontré que el mapa de impresión fue anulado por un archivo de protección de plantillas que estaba usando!
Niño
1
Esto funcionó y generó todos los archivos de salida de Proguard para mí.
j2emanue
16

Es bastante tarde para responder esta pregunta, pero por si alguien necesita mi respuesta.

Ubicación del archivo de mapeo para desofuscar:

ProGuard guarda el archivo en la aplicación de aplicación / build / salidas / mapping / FLAVOR / release / mapping.txt

En general, en el modo de depuración, no necesita el archivo de mapeo porque generalmente la ofuscación está deshabilitada. Si no es ese el caso, asegúrese de que en el archivo build.gradle tenga el siguiente código para la variante de depuración.

debug {
    minifyEnabled false
    debuggable true
}

Algunas trampas:

El archivo mapping.txt se sobrescribe cada vez que crea una versión de lanzamiento con ProGuard, por lo tanto, primero haga una copia de seguridad de ese archivo antes de crear una nueva versión. Ayudará a rastrear la pila ofuscada de una versión anterior de su aplicación.

Aparte de eso, hay dos formas de ofuscar su código:

1. Cargue su archivo mapping.txt en Google Play Console:

Al publicar su aplicación en Google Play, puede cargar el archivo mapping.txt para cada versión de su APK. Luego, Google Play desofuscará los rastros de pila entrantes de los problemas informados por el usuario para que pueda revisarlos en la Consola de Google Play.

2. Utilice la herramienta sdk local retrace.sh/retrace.bat:

Algunas veces desea ejecutar la versión de lanzamiento de su aplicación (cambiando la variante de compilación para lanzarla y ejecutarla) para verificar y corregir los errores para que no ocurra en la producción (cuando se lanza a Play Store).

Para convertir un seguimiento de pila ofuscado en uno legible, use el script de rastreo ( retrace.bat en Windows; retrace.sh en Mac / Linux ).

Se encuentra en el <sdk-root>/tools/proguard/bin/directorio

<sdk-root> es el lugar donde se instalaron todas sus bibliotecas y SDK de Android.

El script toma el archivo mapping.txt y su seguimiento de pila, produciendo un nuevo seguimiento de pila legible.

Sintaxis del comando:

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

Por ejemplo:

retrace.bat -verbose mapping.txt obfuscated_trace.txt

Prefiero la versión local de ofuscación, ya que es bastante útil para comprobar previamente los errores de producción.

Espero que ayude.

WitVault
fuente
12

Estoy usando la versión Android Studio 2.2.2 . Para mí está ubicado en las siguientes ubicaciones:

Para depurar: \app\build\outputs\mapping\debug\mapping.txt

Para lanzamiento: \app\build\outputs\mapping\release\mapping.txt

Faisal Shaikh
fuente
11

ingrese la descripción de la imagen aquí

Aquí está en una imagen: la encontrará en la carpeta de mapeo:

Simón
fuente
2

Porque soy tonto y me pierdo incluso cuando alguien me dice dónde está el archivo:

cd StudioProjects/fooProject
find . -name "mapping.txt" | xargs less
philo
fuente