今回は残課題となっていたAndroid Studio上でのProguardを有効にする場合の手順と、Proguardで難読化が行われているかの検証方法についてまとめました。
Proguardを有効にする場合の手順
- 対象のプロジェクトを開いた状態で、「ファイル > プロジェクト構成」を選択します。
- 「release」の「Build Types」タブを選択し、「Minify Enabled」を「true」に、Proguard Fileには「proguard-project.txt」の配置パスを設定して、OKを押下します。
- すると「build.gradle」ファイルに下記のような設定が追加されます。
buildTypes { release { minifyEnabled true proguardFile 'C:/android/Sakana/proguard-project.txt' } }
- ちなみに「proguard-project.txt」はEclipseで開発していた時のファイルをそのまま使用しました。
設定内容は下記の通り。</pre><pre>-keep class * extends java.util.ListResourceBundle { protected Object getContents(); } -keep public class com.google.android.gms.common.internal.safeparcel.SafeParcelable { public static final *** NULL; } -keepnames @com.google.android.gms.common.annotation.KeepName class * -keepclassmembernames class * { @com.google.android.gms.common.annotation.KeepName *; } -keepnames class * implements android.os.Parcelable { public static final ** CREATOR; } -dontwarn com.google.android.gms.* -ignorewarnings
- 後は先日お伝えした方法で、署名付きのリリース用apkファイルを作成すればOKです。
- ビルドが成功しても正しく動作しないことがあるようなので、作成された署名付きのリリース用apkファイルを実機にインストールして動作確認を行うようにしてください。
Proguardで難読化が行われているかの検証方法
- アプリが正しく動作したら次は、本当に難読化が行われているかの検証を行います。
まずは作成された署名付きのリリース用apkファイルを作業用フォルダへコピーします。
今回は、「Sakana-release.apk」ファイルを「C:\Android\work」配下にコピーしましたが場所はどこでもOKです。 - 続いて配置したapkファイルの拡張子をzipへ変更して、解凍ソフトで解凍します。
今回の例では、「Sakana-release」というフォルダが生成されましたが、その中のclasses.dexファイルを使用します。 - 下記のサイトからclasses.dexファイルをclassファイルに変換するためのツールをダウンロードします。
http://sourceforge.net/projects/dex2jar/files/
※「dex2jar-2.0.zip」をダウンロードしました。 - ダウンロードしたzipファイルを作業用のフォルダへ解凍し、同一フォルダ内に上記の「classes.dex」ファイルを配置します。
- コマンドプロンプトを起動して、「d2j-dex2jar.bat classes.dex」と実行すると、classes.dexを配置した同じフォルダ配下に「classes-dex2jar.jar」が生成されます。
- 生成された「classes-dex2jar.jar」を作業用フォルダへコピーして、拡張子をzipに変更した上で解凍ソフトで解凍します。
- 「classes-dex2jar」フォルダ配下には、classファイルが多数配置されています。
その中で自分が作成したパッケージ配下を参照し、「a.class、b.class、c.class・・・」と身に覚えの無いclassファイルが存在してれば、難読化は成功しているはずです。
おまけ~classファイルを逆コンパイルしてjavaファイルに変換する方法~
- 難読化の確認だけであれば上記までのチェックでOKだと思うのですが、「せっかくなので難読化状態のjavaの中身も見たい!」と言う場合は、classファイルを逆コンパイルしてjavaファイルを生成することができます。
- 下記サイトから逆コンパイル用のツールを環境に合わせて取得します。
http://varaneckas.com/jad/
※今回は「Jad 1.5.8g for Windows 9x/NT/2000 on Intel platform」をダウンロードしました。 - ダウンロードしたzipファイルを作業用のフォルダへ解凍し、同一フォルダ内に逆コンパイルしたいclassファイルを配置します。
※今回はお試しで「a.class」を配置しました。 - コマンドプロンプトを起動して、「jad.exe -8 -d output -s .java -r *.class」と実行すると、outputフォルダが生成され配下に逆コンパイルされたjavaファイルが出力されます。
今回は以上となります。良かったらご参考まで