[Realm/Android] DexArchiveBuilderException / Invoke-customs are only supported starting with Android O の対処法

モバイル用軽量データベース「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の次のバージョンでは解消されるようです。

(くわしくは下の動画で解説していますので、よろしければご覧下さい)

こんな記事も読まれています

おすすめコンテンツ




Flutter(フラッター)


みんプロ作成アプリ




TOP