開発メモ/Proguardのすすめ

Proguardって、ソースを暗号化するためということで、無料アプリなら別にソース見られたっていいじゃん!とか考えていませんか?

Proguardってそれだけじゃなくてソースコードの圧縮→apkの容量削減にも役立ちます。
でも一つ間違えたらExceptionとか見えなくなるので設定には注意が必要です。

さて、最新のADTでプロジェクトを作るとproject.propertiesに下記の項目が追加されています

proguard.config=${sdk.dir}\tools\proguard\proguard-android.txt:proguard-project.txt

ここの内容はproguardの設定を読み込むライフを指定しているのですが、まずSDK内のtools\proguard\proguard-android.txtを読みます。
そして追加でプロジェクト内のproguard-projectを読みます。
この中で前者ではActivityの名前を難読化から外したりしてくれていますので細かい設定は不要です。(Activity名変えちゃうとマニフェストと整合性が取れなく落ちてしまいます)

で、そのままでも使えるのですが(外部ライブラリがない場合)、そのままだとExceptionの発生した行数などがすべてUnknown Sourceとなってしまいます。
なので、
プロジェクト内のproguard-project.txtに下記を追加してあげます
-renamesourcefileattribute ProGuard <-ソースをProguard文字列に置換します
-keepattributes SourceFile,LineNumberTable <-ソースファイル、行数属性を変換せず維持します

基本的にはこれだけでOKです。

ただ、外部jarなどのライブラリをロードしている場合、これらが難読化されてしまうと思うように動きません。(※下記はAdmobを例にします)
同様にproguard-project.txtに下記を追加します
-libraryjars \libs\GoogleAdMobAdsSdk-6.1.0.jar <-ライブラリをつかうよー
-keep class com.google.ads.** {*;} <-この名前空間は変換しないでね
-dontwarn com.google.ads.** <-この名前空間は警告を出さないでね

これでOKです。dontwarnはいるのかわからないですが、警告がでてリリースビルドができなかったのでぐぐって追加しました。

あとは、エクスポートしたパッケージでテストをしてみるといいです。

関連記事
投稿しますか?

1 コメント

コメントする

メモ - 下記に表示されているHTML属性は利用できます HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*