Onde o Android Studio salva o arquivo de mapeamento ProGuard?


182

No Android Studio, onde os arquivos de mapeamento do ProGuard são gerados após a compilação de um APK assinado?

Não tenho certeza se não está funcionando ou se esqueci o caminho do arquivo, e minha pesquisa obrigatória no Google / Stack Overflow não respondeu a isso


1

3
@JayakrishnanPM feliz em saber que o Google chegou lá 3 anos depois.
CQM

Respostas:


272

Ele deve estar localizado no build/outputs/proguard/release/mapping.txtdiretório do módulo do aplicativo.

Na versão mais recente do ProGuard e Android Studio, o arquivo está localizado em build/outputs/mapping/release/mapping.txt.


5
Mais informações sobre os arquivos gerados e caminho: developer.android.com/studio/build/shrink-code.html
Helton Isac

Se a execução instantânea estiver ativada, talvez você não consiga ver o arquivo de mapeamento. Desative a Execução Instantânea e crie novamente.
Faizan Mubasher 17/08/19

1
Após uma atualização para o Gradle 6.2.2 / Gradle Plugin 3.6.1, os caminhos foram alterados para nós. /app/build/outputs/mapping/brandExampleEnvProductionRelease/mapping.txt /app/build/outputs/mapping/brandExampleEnvIntegrationBeta/mapping.txtsão os novos caminhos.
Carsten Hagemann

75

Para mim, eles estão em 'build/outputs/mapping/release'


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

1
Sim, isso é perfeito para estúdio android 2.3.2
Subho

1
app / build / saídas / mapeamento / release / mapping.txt bc houve uma pasta separada de compilação que não contêm o arquivo de mapeamento ...
NukeouT

39

Achei mais limpo configurar o proguard para gravar o arquivo mapping.txt em um local fora da build/árvore de diretórios, para que ele pudesse ser mais convenientemente verificado no controle de versão.

Para conseguir isso, coloque isso no seu proguard-rules.proarquivo:

-printmapping mapping.txt

Isso (provavelmente) o colocará no mesmo diretório do seu proguard-rules.proarquivo. Por fim, você provavelmente deseja gravá-lo no mesmo diretório que o arquivo APK e com um nome equivalente (que pode incluir sabor, tipo de compilação etc.).

Nota: na minha experiência, isso não é anulado pelo arquivo de modelo de progresso (que foi sugerido por um comentarista para outra resposta aqui).

ATUALIZAÇÃO: Se você tiver vários tipos de produtos, esta é uma solução muito melhor: https://stackoverflow.com/a/31116608/444761


1
Isso é melhor do que minha solução, como você diz que pode ser colocado sob controle de versão.
Clive Jefferies

por que você gostaria de controlar esta versão? você precisa dele para cada APK liberado separadamente, pois depende da construção. como você precisa fazer o upload / check-in desse apk separadamente da fonte, na verdade não há necessidade de verificá-lo na fonte VCS !?
precisa saber é o seguinte

@ Denny1989 não sabe o que você quer dizer. Eu construo um APK e o armazeno fora do controle de versão. Eu tenho que manter o arquivo de mapeamento em algum lugar. Eu poderia armazená-lo ao lado do APK, mas acho mais limpo controlá-lo de versão. No entanto, só tenho um APK de lançamento por projeto, portanto, YMMV.
Mark

36

Descobri que não estava sendo gerado, então adicionei isso ao arquivo de regras

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

1
Descobri que o printmapping foi substituído por um arquivo de modelo que eu estava usando!
Rapaz

1
isso funcionou e gerou todos os arquivos de saída proguard para mim.
J2emanue

16

É muito tarde para responder a essa pergunta, mas apenas no caso de alguém precisar da minha resposta.

Local do arquivo de mapeamento para desobstruir:

O ProGuard salva o arquivo no aplicativo app / build / outputs / mapping / FLAVOR / release / mapping.txt

Geralmente no modo de depuração, você não precisa do arquivo de mapeamento porque geralmente a ofuscação está desativada. Se não for esse o caso, verifique no arquivo build.gradle o código abaixo para a variante de depuração.

debug {
    minifyEnabled false
    debuggable true
}

Algumas dicas:

O arquivo mapping.txt é sobrescrito toda vez que você cria uma versão compilada com o ProGuard, então faça um backup desse arquivo antes de criar uma nova versão. Isso ajudará o rastreamento ofuscado da pilha de uma versão mais antiga do seu aplicativo.

Além disso, existem duas maneiras de ofuscar seu código:

1. Faça o upload do seu arquivo mapping.txt para o Google play Console:

Ao publicar seu aplicativo no Google Play, você pode fazer o upload do arquivo mapping.txt para cada versão do seu APK. Em seguida, o Google Play irá ocultar os rastreamentos de pilha recebidos dos problemas relatados pelos usuários, para que você possa analisá-los no Google Play Console.

2. Use a ferramenta sdk local retrace.sh/retrace.bat:

Algumas vezes você deseja executar a versão de lançamento do seu aplicativo (alterando a variante de compilação para lançá-lo e executá-lo) para verificar e corrigir os erros para que isso não aconteça na produção (quando lançado na play-store).

Para converter um rastreamento de pilha ofuscado para um legível, use o script retrace ( retrace.bat no Windows; retrace.sh no Mac / Linux ).

Está localizado no <sdk-root>/tools/proguard/bin/diretório

<sdk-root> é o local em que todas as suas bibliotecas e sdks Android foram instalados.

O script pega o arquivo mapping.txt e seu rastreamento de pilha, produzindo um novo rastreamento de pilha legível.

Sintaxe de comando:

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

Por exemplo:

retrace.bat -verbose mapping.txt obfuscated_trace.txt

Prefiro a versão local do ofuscamento, pois é bastante útil para verificar previamente os erros de produção.

Espero que ajude.


12

Estou usando a versão Android Studio 2.2.2 . Para mim, está localizado nos seguintes locais:

Para depuração: \app\build\outputs\mapping\debug\mapping.txt

Para liberação: \app\build\outputs\mapping\release\mapping.txt


11

insira a descrição da imagem aqui

Aqui está uma figura - você a encontrará na pasta de mapeamento:


2

Porque sou burra e me perco mesmo quando alguém me diz onde está o arquivo:

cd StudioProjects/fooProject
find . -name "mapping.txt" | xargs less
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.