Android StudioはProGuardマッピングファイルをどこに保存しますか?


182

Android Studioでは、署名済みAPKをコンパイルした後にProGuardマッピングファイルはどこに生成されますか?

機能していないのか、ファイルパスを忘れただけなのか、またGoogle / Stack Overflowの強制検索でこれに応答しなかったのかはわかりません


1
それが正式にここで説明されて firebase.google.com/docs/crash/...
Jayakrishnan PM

3
@JayakrishnanPMは、Googleが3年後に成功したことを嬉しく思います。
CQM 2017年

回答:


272

これはbuild/outputs/proguard/release/mapping.txt、アプリケーションモジュールのディレクトリにあります。

ProGuardおよびAndroid Studioの最新バージョンでは、ファイルはにありますbuild/outputs/mapping/release/mapping.txt


5
生成されたファイルとパスの詳細:developer.android.com/studio/build/shrink-code.html
Helton Isac

あなたの場合はインスタントの実行が有効になっている、あなたは、マッピングファイルを参照することができない場合があります。Instant Runを無効にして、再度ビルドします。
Faizan Mubasher、

1
Gradle 6.2.2 / Gradle Plugin 3.6.1へのアップデート後、パスが変更されました。/app/build/outputs/mapping/brandExampleEnvProductionRelease/mapping.txt /app/build/outputs/mapping/brandExampleEnvIntegrationBeta/mapping.txt新しいパスです。
Carsten Hagemann

75

私にとって彼らは 'build/outputs/mapping/release'


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

1
はい、1つはandroid studio 2.3.2に最適です
Subho

1
app / build / outputs / mapping / release / mapping.txt bcマッピングファイルを含まない別のビルドフォルダーがあった...
NukeouT

39

build/バージョン管理により簡単にチェックインできるように、ディレクトリツリー外の場所にmapping.txtファイルを書き込むようにproguardを構成する方がわかりやすいと思いました。

これを実現するには、これをproguard-rules.proファイルに入れます。

-printmapping mapping.txt

これは、(ほとんどの場合)proguard-rules.proファイルと同じディレクトリに配置します。最終的には、APKファイルと同じディレクトリに、同等の名前(フレーバー、ビルドタイプなどが含まれる可能性があります)を付けて書き込みます。

注:私の経験では、これは proguardテンプレートファイルによって無効にされません(これは、コメンターがここで別の回答を提案したものです)。

更新:複数の製品フレーバーがある場合、これははるかに優れたソリューションです:https : //stackoverflow.com/a/31116608/444761


1
あなたが言うように、バージョン管理下に置くことができるので、これは私の解決策よりも優れています。
Clive Jefferies 2015年

なぜこれをバージョン管理したいのですか?ビルドに依存するため、個別にリリースするAPKごとに必要です。そのようなapkをソースから個別にアップロード/チェックインする必要があるので、実際にはソースVCSでそれをチェックする必要はありません!?
Denny1989、2015

@ Denny1989意味がわからない。APKを作成し、バージョン管理の外に保存します。マッピングファイルをどこかに保存する必要があります。APKと一緒に保存することもできますが、バージョン管理を行うときれいになります。ただし、私はプロジェクトごとにリリースAPKが1つしかないので、YMMVです。
マーク

36

生成されていないことがわかったので、これをルールファイルに追加しました

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

1
使用していたテンプレートプロガードファイルによって、printmappingが無効になっていることがわかりました。
ボーイ

1
これが機能し、すべてのproguard出力ファイルが生成されました。
j2emanue 2016年

16

この質問に答えるのはかなり遅いですが、誰かが私の答えを必要とする場合に備えて。

解読するマッピングファイルの場所:

ProGuardはファイルをアプリapp / build / outputs / mapping / FLAVOR / release / mapping.txtに保存します

通常、デバッグモードでは、難読化が無効になっているため、マッピングファイルは必要ありません。そうでない場合は、build.gradleファイルでデバッグバリアントのコードを確認してください。

debug {
    minifyEnabled false
    debuggable true
}

いくつかの注意点:

mapping.txtファイルは、ProGuardでリリースビルドを作成するたびに上書きされるため、新しいリリースを作成する前に、まずそのファイルのバックアップを作成してください。古いバージョンのアプリからのスタックトレースを難読化するのに役立ちます。

それとは別に、コードを難読化するには2つの方法があります。

1. mapping.txtファイルをGoogle Play Consoleにアップロードします。

アプリをGoogle Playで公開するときに、APKの各バージョンのmapping.txtファイルをアップロードできます。その後、Google Playはユーザーが報告した問題から受信スタックトレースを難読化し、Google Play Consoleで確認できるようにします。

2.ローカルSDKツールretrace.sh/retrace.batを使用します。

アプリのリリースバージョンを(ビルドバリアントをリリースに変更して実行することにより)実行して、エラーをクロスチェックして修正し、本番環境で発生しないようにします(プレイストアにリリースしたとき)。

難読化されたスタックトレースを読み取り可能なものに自分で変換するには、リトレーススクリプトを使用します(Windowsではretrace.bat、Mac / Linuxではretrace.sh)。

これは、に位置して<sdk-root>/tools/proguard/bin/ディレクトリ。

<sdk-root> すべてのAndroidライブラリとSDKがインストールされた場所です。

スクリプトは、mapping.txtファイルとスタックトレースを取得して、新しい読み取り可能なスタックトレースを生成します。

コマンド構文:

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

例えば:

retrace.bat -verbose mapping.txt obfuscated_trace.txt

制作エラーを事前にチェックするのにとても便利なので、私はローカルバージョンの難読化を好みます。

お役に立てば幸いです。


12

Android Studio 2.2.2バージョンを使用しています。私にとっては、次の場所にあります。

デバッグの場合: \app\build\outputs\mapping\debug\mapping.txt

リリース: \app\build\outputs\mapping\release\mapping.txt


11

ここに画像の説明を入力してください

ここでそれは写真にあります-あなたはそれをマッピングフォルダに見つけます:


2

ファイルがどこにあるのか誰かが私に言っても私は愚かで迷子になるので:

cd StudioProjects/fooProject
find . -name "mapping.txt" | xargs less
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.