AndroidアプリをProguardで難読化
Proguardで難読化してはまりにはまったのでメモ
リリース時だけProguardを有効にする
build.gradle
android {
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
debug {
}
}
}
ビルドすると警告が出て難読化できないので除外設定する
コンソールに出た警告から除外対象を設定しました。
proguard-rules.pro
-dontwarn org.apache.tools.ant.**
-dontwarn okio.**
apkをデコンパイルして、難読化出来ていることを確認する
① 生成したapkの拡張子をzipにして解凍
② dex2jarで.dex → .classへ変換
③ jadでデコンパイルしてソース確認
apkを実機で動作確認すると、NullPointerExceptionで落ちる
外部ライブラリには難読化すると動かなくなるライブラリがあったりするので除外する
okhttpでモデルクラスを使用していて、そのモデルクラスを難読化すると動かなくなるので除外する。
やり方としては初めにパッケージごと除外してから徐々に狭めて詰めていくやり方が良さそう。
proguard-rules.pro
-keep class com.google.** { *; } # gson
-keep interface com.google.** { *; } # gson
-keep class com.squareup.** { *; } # okhttp
-keep interface com.squareup.** { *; } # okhttp
参考サイト
Android Studio での Proguard 設定
ProGuard を使用した難読化
開発メモ/Proguardのすすめ
Proguard shrinking causes Null Pointer Exception