LoginSignup
21
21

More than 5 years have passed since last update.

Android で Proguard を使う(ADT17以降)

Last updated at Posted at 2013-03-19

割とハマったのでメモ。

Proguard.cfg を使う方法はもう古い

にあるように、ADT17 以降では、既定の難読化設定は SDK のディレクトリにありそれを参照するようになっている。
プロジェクト固有の設定は proguard-project.txt に書くように既定で準備されている。

Android proguard でググって出てくる情報は、大抵は Proguard.cfg として説明されているので、その情報は断片的には使えるだろうが、古い情報として注意して参照したほうがよい。

-libraryjars について

外部ライブラリを使っている(/libs に jar を入れてる)場合、それらを -libraryjars xxx.jar と列挙しなければならないと 思っていた が不要らしい。

-libraryjars に列挙したら最初の一つしか library jar として認識してくれなくて「なにこれ?」と思ってググったら、

1) ProGuard manual > Troubleshooting > Note: duplicate definition of program/library class

The Android Ant/Eclipse builds already specify -injars/-libraryjars for you. If you specify them again in your configuration, ProGuard notes that they are duplicated. So don't specify -injars/-libraryjars.

libs配下は既定で定義済だから proguard-project.txt の方で再定義しなくてよいらしい。

-dontwarn とか -dontnote とか

「ほんとかなぁ」に同意。warning潰すのがデファクトなツールで良いの?

(私が)未解決な問題

とあるメソッドの引数 Hoge<Piyo> arg から、 Class#getGenericInterfaces()Piyo を取得していたのだけど、Proguard かけたら、 Hoge<Piyo>Hoge だけになって取れなくなってしまった。

Java のイレイジャ云々か?とも思ったけど、メソッドの引数ならいけるはずだし…

StackOverflow さんによると、

-keepattributes *Annotation* をつけるといいよ的な事が書いてあるんだけど、うまくいかなかった。

雑感

情報が新旧錯綜してる発展途上なツールを苦労して使って、設定も実装に依存するし(自動化できない)、運用時もデバッグしづらいし、この難読化って作業、コスパどうなんすかね? 所詮 Webサービスのフロントエンドである Java プログラムに、そこまで難読化にこだわることはないんじゃないかなーという私見です。

参考

21
21
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
21