Kotlin多平台Room数据库iOS端构建失败:无法解析instantiateImpl()
KMP Room iOS端构建失败:Unable to resolve instantiateImpl() 解决方法
问题根源是Kotlin/Native不支持instantiateImpl()这类反射实例化方式,Android端基于JVM可以正常使用反射,但iOS端的Kotlin/Native runtime没有提供该方法的支持。
解决步骤:
给你的
AppDatabase类添加无参构造函数,确保Kotlin/Native可以直接实例化:@Database(entities = [YourEntity::class], version = 1) abstract class AppDatabase : RoomDatabase() { abstract fun yourDao(): YourDao // 添加无参构造函数,兼容Kotlin/Native constructor() : super() }修改iOS端的数据库初始化代码,直接通过构造函数实例化
AppDatabase,替代反射调用:fun getIosDatabaseBuilder(): AppDatabase { val dbFilePath = NSHomeDirectory() + "/my_room.db" return Room.databaseBuilder<AppDatabase>( name = dbFilePath, factory = { AppDatabase() } // 替换原反射代码 ) .setDriver(BundledSQLiteDriver()) .build() }额外检查项:
- 确认Room的KMP依赖配置完整,iOS源集已引入
sqlite-driver依赖 - 执行项目清理后重新构建:KMP端运行
./gradlew clean build,iOS端执行pod deintegrate && pod install
- 确认Room的KMP依赖配置完整,iOS源集已引入
内容的提问来源于stack exchange,提问作者Hassan Ali
相关产品推荐
相关产品推荐

