R8やProguardでビルド時にmodule-info.classでエラーが出てビルドできない場合に回避する方法

Warning: class [META-INF/versions/9/module-info.class] unexpectedly contains class [module-info]

とエラーが出てR8やProguard利用時にビルドが出来ない問題に遭遇した。

エラー内容でググると、よくある回避方法としてはpackagingOptionsexcludeを指定することで回避できる場合が多いようである。

packagingOptions {
  exclude 'META-INF/DEPENDENCIES'
  exclude 'META-INF/DEPENDENCIES.txt'
  exclude 'META-INF/LICENSE'
  exclude 'META-INF/LICENSE.txt'
  exclude 'META-INF/license.txt'
  exclude 'META-INF/NOTICE'
  exclude 'META-INF/NOTICE.txt'
  exclude 'META-INF/notice.txt'
  exclude 'META-INF/INDEX.LIST'
  exclude 'META-INF/versions'
  exclude 'META-INF/versions/9/module-info.class'
}

が、今回の場合は上手く行かない。 解決策としては幾つか調べると、

-dontwarn module-info

をProguardのルールに追記することで解決した。

(記述した内容から推察すると、依存ライブラリ間で異なるJDKでビルドしたやつがいるとダメな場合があるのかな??) Dynamic moduleを使うケースでも同じような場合があるらしい。


参考