IntelliJ の Proguard ログフォルダと Git 管理


Android 開発において、 Eclipse と IntelliJ とでは Proguard のログファイルの出力フォルダが異なります。以下の記事では、その違いと Git 管理について説明します。

Proguard とログファイル

Proguard は Java の難読化・最適化ツールで、Eclipse や IntelliJ で簡単な設定をするだけで利用できます。設定をしておくと、署名付 .apk ファイルをエクスポートした際に、難読化によるマッピング情報等を記録したログファイル群が出力されます。エクスポートされた .apk をデバッグするときにはこの情報を利用することになります。

Eclipse の場合、以下のように、プロジェクト直下に proguard フォルダが作成されます。この中にログファイル群が出力されます。
eclipse_proguard_log_compressed

一方、IntelliJ の場合、フォルダ名が proguard_logs になります
intellij_proguard_log

今のところ、ログファイルの出力先フォルダを任意に指定することはできないようです。(YouTRACK:Change Proguard logs output dir)

Git とログファイル

.apk のエクスポートとソースファイルの修正とは必ずしも 1 対 1 に対応しているものでは無いので、ログファイルはバージョン管理に含めないのが一般的だと思います。(リリース時のログファイルは、何らかの方法で保存して置いたほうが良いでしょう。)

Git の場合、.gitignore を定義して Git 管理しないファイルを指定できます。Android 用の雛形としては、GitHub の Android 用 .gitignore テンプレートを使うと良いでしょう。最新版では、Eclipse/IntelliJ 双方に対応しています。

ただし、Proguard のログフォルダに関しては、上記雛形では Eclipse 用だけで IntelliJ 用の指定がありませんので、以下の行を追加しておくと良いと思います。

※2013/04/09 補足: 以前よりこの追加を github に PullRequest していましたが、gitignore.io の生成するテンプレートに取り込まれた旨、joeblau 氏からコメントをもらいました。(add Proguard folder generated by Intellij to Android.gitignore by junf · Pull Request #543 · github/gitignore)
gitignore.io は、環境に合わせて .gitignore を自動生成してくれるサービスです。

Android 開発での Proguard 設定


先日、署名付きパッケージをエクスポートしようとしたところ、Progurd から多量の「警告」が出現してエクスポート不能になってしまいました。

あらためてテスト用のプロジェクトで再現すると、以下の様なエラーです。
Proguard error log
サポートライブラリがらみの「警告」のようですが、実際には、サポートライブラリの導入の有無に関係なく発生するようです。

試行錯誤の結果、Proguard の設定方法を変更することで解決することがわかりました。

[従来の設定方法]

  1. プロジェクト直下の project.properties を開く。
  2. ファイルの末尾に、proguard.config=proguard.cfg を記述する。
  3. proguard.cfg に、Proguard マニュアルの Examples を参照して設定を記述する。

[新しい設定方法]

  1. project.properties を開き、コメントアウトされている proguard.config の指定を有効にし、これまでの指定をコメントアウトする。proguard.config=${sdk.dir}toolsproguardproguard-android.txt:proguard-project.txt
    #proguard.config=proguard.cfg
  2. プロジェクト直下の proguard-project.txt (最新の環境でプロジェクトを作成すると自動生成される。もしなければ作成する。) に、プロジェクト独自の指定を(もしあれば)追加する。
    ※自動生成された proguard-project.txt 内の定義は全てコメントアウトされているので、必要なら有効にする。
  3. (念のため) proguard.cfg を削除する。

「新しい設定方法」では、Android-SDK ディレクトリ内にある proguard-android.txt と、プロジェクト直下の proguard-project.txt で定義を行います。前者には、Android プロジェクトで推奨される定義が記述されています。そのため、SDK と Proguard の定義が連動するようになって、問題が起こりにくくなると思われます。オリジナルの設定は proguard-project.txt で定義することで、管理がしやすくなりました。