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アプリ開発を進めることができます。


コメント