Androidのreleaseビルドで、okhttp周りでNoClassDefFoundErrorが起きる

Androidのreleaseビルドで、okhttp周りでNoClassDefFoundErrorが起きる

久しぶりにAndroidコードをアップデートしてビルドしたところ、releaseビルドのみ、NoClassDefFoundエラーで落ちてしまいます。エラーログにはOkHttp3周りで発生しているようです。release(本番)ビルドのみということで、怪しいのは、if (BuildConfig.DEBUG) で分岐させた処理に問題があるか、Proguard/R8の難読化での変換です。

if (BuildConfig.DEBUG)の処理に差異はあったのですが、根本原因はやはりR8でした。ライブラリのバージョンを上げたことで問題であるのか、クラスを足したことで難読化の状態が変わったのかは不明です。

対応は2点です。

  • OSS系のproguard-rules.proの設定を入れる
  • andoroidxにリファクタしたため、その設定も念の為入れる
  • API通信時に利用するモデルクラスを追加する ←おそらくこれが原因

-keep class com.your.package.model.** { *; }

原因はOSS側だと思っていましたが、自分のクラスだったとは。。公式ドキュメントに書いてあったかな?RxJava2も併用しているので、そのへんが問題かもしれません。