Android StudioでRoomとkotlinx.serializationのバージョン不整合によるAbstractMethodErrorの解決方法

Android開発

Android StudioでRoomとkotlinx.serializationを使用していると、バージョン不整合によりjava.lang.AbstractMethodErrorが発生することがあります。本記事では、高校生や初心者でも理解できるように、依存関係の調整方法や設定ポイントを解説します。

1. エラーの原因

エラーの内容「java.lang.AbstractMethodError: Receiver class androidx.room.migration.bundle.SchemaBundle$$serializer…」は、RoomのSchemaBundleとkotlinx.serializationのバージョンが互換性がないことが原因です。特にRoom 2.5.x以降とKotlin 1.8+のkotlinx.serializationの組み合わせで発生することがあります。

2. 推奨のバージョン組み合わせ

現時点で安定して動作する組み合わせは以下の通りです。

  • Kotlin: 1.9.10
  • Room: 2.5.2
  • kotlinx.serialization: 1.6.0

重要なのは、Roomが依存しているkotlinx.serializationのバージョンと自分が指定しているバージョンを合わせることです。

3. build.gradle.ktsの修正例

pluginsブロックや依存関係を以下のように修正します。

plugins {
    id("com.android.application")
    id("org.jetbrains.kotlin.android") version "1.9.10"
    id("org.jetbrains.kotlin.plugin.serialization") version "1.9.10"
    id("com.google.devtools.ksp") version "1.9.10-1.0.13"
}

dependencies {
    implementation("androidx.room:room-runtime:2.5.2")
    ksp("androidx.room:room-compiler:2.5.2")
    implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.0")
}

この修正により、Roomとkotlinx.serializationの互換性が確保され、AbstractMethodErrorの発生を防ぐことができます。

4. その他の注意点

  • Gradleのキャッシュクリアとプロジェクトのクリーンビルドを行う
  • Android Studioを最新安定版にアップデートする
  • 複数のkspブロックを統合して1つにまとめる

まとめ

Roomとkotlinx.serializationのバージョン不整合によるエラーは、互換性のあるバージョンに統一することで解決可能です。Gradle依存関係のバージョンを正しく指定し、キャッシュをクリアして再ビルドすることで、エラーなくAndroidアプリ開発を進めることができます。

コメント

タイトルとURLをコピーしました