モバイル用軽量データベース「Realm」を使ったプロジェクトを回したときに、こんな感じの4点セットのエラーが表示されてビルドが回らなくなる場合の対処法です。
java compiler: (4 errors) com.android.builder.dexing.DexArchiveBuilderException: Failed to process C:Users***.gradlecachestransforms-1files-1.1realm-android-library-5.8.0.aar645a5a6b1c9632c307cc325eabc44c60jarsclasses.jar com.android.builder.dexing.DexArchiveBuilderException: Error while dexing. com.android.tools.r8.CompilationFailedException: Compilation failed to complete com.android.tools.r8.utils.AbortException: Error: Invoke-customs are only supported starting with Android O (--min-api 26)
RealmのライブラリでJava8の機能を使っていたことが原因
(参考にさせてもらったサイト)
このサイトでRealmの(おそらく)中の人が言っているように、原因はRealmのバージョン5.8.0のライブラリのコードで、Java8の言語機能(ラムダ式)を使ったことによるものだそうです。
The Java 8 code has been removed (lamdas) and a fix should be in the next release.
RealmのライブラリのコードはKotlinのお父さんであるJavaによって書かれています。
その中でラムダ式という機能を使っているのですが、Kotlinの場合はラムダ式は最初からあって普通に使える機能ですが、Javaでは比較的最近のバージョン「8」から出てきた機能で、かつAndroid StudioはJavaのバージョン8は標準ではサポートしていません。
ですので、Java8の言語機能を使えるようにするためには、アプリケーションレベルのbuild.gradleで設定をしてあげる必要があるということです。
サポートされる Java 8 言語機能の使用を開始するには、3.0.0
(以降)に Android プラグインをアップデートします。 その後、Java 8 言語機能を(ソースコードで、または依存関係を通じて)使用する各モジュールの build.gradle
ファイルに次のコードを追加します。
android { ... // Configure only for each module that uses Java 8 // language features (either in its source code or // through dependencies). compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } }
これは、さきほどのRealmの中の人も言っているように、Realmの次のバージョンでは解消されるようです。
(くわしくは下の動画で解説していますので、よろしければご覧下さい)