Android開発におけるProGuard利用
2016年1月8日
金澤龍太郎
概要と注意
ProGuard…?
• Javaコードの最適化・難読化ツール
» 軽量化、高速化、リバースエンジニアリング対策
ProGuard…?
• オープンソースのフリーツール
» (http://sourceforge.net/projects/proguard/)
• AndroidSDKに含まれている
» 有効にすることを強く推奨している。
• GuardSquareというベルギーの会社が開発
最適化、難読化、他にも…?
• 圧縮
» 未使用クラス/メソッド/フィールドの削除
• 最適化
» メソッドのインライン化など
• 難読化
» パッケージ名、クラス名、メソッド名、フィールド名の無意
味化
• 事前検証
» classファイルに検証情報を付加(JVMでのロードが高速
化)
順番に実行される。
最適化、難読化、他にも…?
• 圧縮
» 未使用クラス/メソッド/フィールドの削除
• 最適化
» メソッドのインライン化など
• 難読化
» パッケージ名、クラス名、メソッド名、フィールド名の無意
味化
• 事前検証
» classファイルに検証情報を付加(JVMでのロードが高速
化)
Android用のVMでは不適切。
この工程を行わないよう、
AndroidSDKで設定してある。
順番に実行される。
いつ、何にやってくれる…?
• 製造
• ビルド
• Javaコンパイル
• ProGuard実行
• Dex コンパイル
• パッケージング
• リリース
.java
.class
.apk
.dex
実際に使ってみる!
• 左のコードをビルドし、各工
程でどのような変化がある
か見てみる。
(使い方は丁寧に解説して
いるサイトがたくさんあるの
で今回は割愛)
• 用意するアプリ
– ProGuard無しビルド
– 圧縮済み
– 最適化済み
– 難読化済み
• 工程毎の変化を確認した手
順
– ビルドしたdexファイルを
dex2jar-2.0でjarにする
– JD-GUIでjavaにする
– AndroidStudioで閲覧
– 目で見比べる
オリジナル⇔ProGuard無しビルド
すみません・・・ちょっとみにくいかもしれません。
オリジナル ProGuard無しビルド
あまりオリジナルと変わらない
» 悪意のある人「メソッド名で機能がすぐ理解できるような
保守性の高いコードはありがたい。」
» 作った人「↑お前のため読みやすくしたんじゃない!」
ProGuard無しビルド⇔圧縮済み
ProGuard無しビルド 圧縮済み
ファイルサイズ軽量化
» 巨大なライブラリを利用しているほど効果大!
圧縮済み⇔最適化済み
圧縮済み 最適化済み
高速化
» メソッドの呼び出しにかかるオーバーヘッドを削減
最適化済み⇔難読化済み
最適化済み 難読化済み
読みづらい
» 悪意のある人「ぐぬぬ」
影響にご注意…
• リフレクション/インストロペクション
» メンバが削除されていて…。メンバ名が変わっていて…。
» BeanクラスとJSONの変換で…。
• ライブラリの導入時
» 提供元のガイドに従ってProGuard設定を調整する。
• Xmlに記載したクラスやメソッド
» AndroidManifest.xmlに記載したクラス。
» [レイアウト].xmlに記載したonClick。
ライブラリを作成する際は、
実装してくれたアプリを巻き込んでクラッシュすることになる
ので特に慎重に…
ご清聴ありがとうございました。
参考にさせて頂いたサイト
Androidの仕組みを知る(1)
http://itpro.nikkeibp.co.jp/article/COLUMN/20091126/341182/?ST=android-dev
あんどろいどの「あ」-超初心者がはじめるあんどろいど 其の壱
http://d.hatena.ne.jp/kumat/20100602/p1
ProGuardマニュアル(7) 事前検証オプション
http://m12i.hatenablog.com/entry/20110413/1302649122
最適化ツール最新版"ProGuard 4.0"登場 - Java 6への検証機能導入
http://news.mynavi.jp/news/2007/10/01/009/
【ProGuard】少しだけ勉強して見た私的メモ
http://qiita.com/AAS/items/7aea93c464856e23bb2b
公式サイト
ProGuard
http://proguard.sourceforge.net/
GurdSqure
http://www.guardsquare.com/proguard
ProGuard | Android Developers
http://developer.android.com/intl/ja/tools/help/proguard.html

Android開発におけるProGuard利用