ProguardのKeepでライブラリを難読化させない

Androidアプリを公開する前に、Proguardで難読化を実施している。Proguardを実施すると、クラス名とクラスメンバー名が書き換わる。しかし、いつも何かの機能が動かなくなる。

Gsonを使っていたときは、Gsonのライブラリまで難読化されてしまい、正常に動作しなくなってしまった(これで結構な時間を使った)。初歩的な点だけど、はまるとなかなか抜け出せなかったりする。

難読化しなくても良い物は、ProguardのKeepで難読化の対象外にしておこう。

ProguardのKeep指定

ライブラリを使うとき

Gsonを使ったときの指定。Gsonのパッケージは、com.google.gson。その配下のクラスとクラスメンバーを難読化対象から外す。「**」がポイント。「**」は、そのパッケージだけでなく、サブパッケージも対象とする。

[java]

-keep class com.google.gson.**

[/java]

自分のクラスを対象外にするとき

[java]

-keep class net.eikatou.ClassName

[/java]

クラスのメンバーを対象外にするとき

[java]

-keepclassmembers class net.eikatou.ClassName

[/java]

まとめると

ProGuardで-keepオプションのメモ – superdry memorandum 😀から引用。

<th>
  リネームと削除をしない
</th>

<th>
  リネームをしない
</th>
Keep指定
keepするもの
クラスとクラスメンバ -keep -keepnames
クラスメンバのみ -keepclassmembers -keepclassmembernames
クラスメンバが存在した場合のクラスとクラスメンバ -keepclasseswithmembers -keepclasseswithmembernames

「リネームと削除しない」を選んでおいたら良いと思う。

動かなくなったときは・・

動かなくなったときは、とりあえず全部クラスをkeep指定にして動作確認する。それで動いたら一安心。少しずつkeep指定を外していき、何が問題なのかを追及する。

AndroidManifest.xmlに書いているクラスなどは、名前を変えてしまうと動かなくなるので注意。

    • *以下のページも参考になる。

ProGuardマニュアル(13) 保全オプションの概観

投稿日 2012年03月03日