明確な原因まではわからないものの、対処法までは見つかったのでとりあえず書く。ざっくり言うと、Jetifierのバグを踏んだらしい。
ライブラリプロジェクトとして、Android Support Libraryを用いたものを作成する。AndroidXではない。
api "com.android.support:support-annotations:28.0.0"
下記のようなEnumクラスを作成する。ポイントなのは、コンストラクタのパラメータにAnnotationが付けてあること。
public enum MyOriginalEnum { MyOriginalEnum(@Nullable Integer hoge) { // do something } }
このクラスをライブラリとして参照するプロジェクトで、Jetifierを有効にする。gradle.properties
にある。
android.useAndroidX=true android.enableJetifier=true
このEnumをJavaコードから参照する。importだけでも再現する。Kotlinから参照する場合は関係ない。
Log.d("Hoge", MyOriginalEnum.values());
すると、下記のようなエラーになってコンパイルができない。
エラー: MyOriginalEnumにアクセスできません クラス・ファイル/Users/****/.gradle/caches/transforms-2/files-2.1/****/jetified-****-api.jar(****/MyOriginalEnum.class)は不正です RuntimeInvisibleParameterAnnotations属性が不正です: MyOriginalEnum(Integer) 削除するか、クラスパスの正しいサブディレクトリにあるかを確認してください。
Enum側のパラメータに付与してあるAnnotationを外す。今回の場合は @Nullable
を外すので、IDE補助がなくなる。
Jetifierを使わない。どうもこの問題はJetifierによるバイトコードの変換で発生しているらしい。
Kotlinコードからしか参照しない。試したところ、Kotlinからしか参照しない分には問題は発生しなかった。