Android
Proguard
AndroidStudio

【Android】Proguardの難読化で色々はまる

More than 3 years have passed since last update.


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