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.