Когда включена настройка генерации кода Kotlin
extensions.configure {
arg("room.generateKotlin", "true")
}
Классы автоматической миграции генерируются как внутренние классы в папке build/generated/ksp.
К сожалению, это нарушает существующие модульные тесты, поскольку реализации автоматической миграции недоступны как KSP. генерирует классы как внутренние классы.
Я мог бы обойти проблему с помощью
@file:Suppress("invisible_reference", "invisible_member")
объявление в верхней части файла. Но это явно хакерская и небезопасная функция, которая, скорее всего, скоро будет удалена.
- Можно ли решить эту проблему с помощью исходного кода Gradle в библиотеке Android модуль?
- Можно ли дать указание комнате ksp сделать сгенерированные классы автомиграции общедоступными или добавить к ним аннотацию @VisibleForTesting?
Мой плагин конвенции выглядит так:
class AndroidRoomKspConventionPlugin : Plugin {
override fun apply(target: Project) {
with(target) {
pluginManager.apply("androidx.room")
pluginManager.apply("com.google.devtools.ksp")
extensions.configure {
arg("room.generateKotlin", "true")
}
extensions.configure {
// The schemas directory contains a schema file for each version of the Room database.
// This is required to enable Room auto migrations.
// See https://developer.android.com/reference ... oMigration.
schemaDirectory("$projectDir/schemas")
}
dependencies {
add("implementation", libs.findLibrary("ksp-symbol-processing").get())
add("api", libs.findBundle("room-api").get())
add(
"androidTestImplementation",
libs.findLibrary("androidx-room-testing").get()
)
add(
"testImplementation",
libs.findLibrary("androidx-room-testing").get()
)
add("ksp", libs.findLibrary("room-compiler").get())
}
}
}
}
версии:
kotlinVersion = "2.0.20"
roomVersion = "2.6.1"
kspVersion = "2.0.20-1.0.25"
Подробнее здесь: https://stackoverflow.com/questions/791 ... al-classes
Мобильная версия