在 Android Studio 中对测试源使用 Kotlin 编译器选项
Use Kotlin compiler options for test sources in Android Studio
在我的测试源中,我想使用一些实验性的 Kotlin 编译器功能,以便在 Android Studio 中看不到针对它们的 lint 警告和错误。例如,我想将以下 Kotlin 选项应用于所有测试源。
compileTestKotlin {
kotlinOptions {
freeCompilerArgs += [
'-Xopt-in=kotlin.time.ExperimentalTime',
'-Xopt-in=kotlinx.coroutines.ExperimentalCoroutinesApi',
]
}
}
(source)
开箱即用,这在 Android 项目中不起作用,因为没有 compileTestKotlin
方法。根据 kotlin-android Gradle plugin docs,应该可以在 afterEvaluate
块中为 compileVariantNameKotlin 执行此操作,例如:
afterEvaluate {
compileDebugUnitTestKotlin {
kotlinOptions {
freeCompilerArgs += [
'-Xopt-in=kotlin.time.ExperimentalTime',
'-Xopt-in=kotlinx.coroutines.ExperimentalCoroutinesApi',
]
}
}
}
(compileReleaseUnitTestKotlin
类似)
虽然这有效(构建和测试 运行 并顺利通过),但在 Android Studio 中似乎没有任何效果:实验性编译器功能的用法仍然标记为 warnings/errors.
如何以 AS 识别和使用它们的方式为我的测试源启用这些编译器功能?
我在 Android Studio 4.2.2、AGP 4.2.0 版、Kotlin 1.5.10 版上工作:
android {
testOptions {
kotlinOptions {
freeCompilerArgs += [
'-Xopt-in=kotlin.time.ExperimentalTime',
'-Xopt-in=kotlinx.coroutines.ExperimentalCoroutinesApi',
]
}
}
}
在我的测试源中,我想使用一些实验性的 Kotlin 编译器功能,以便在 Android Studio 中看不到针对它们的 lint 警告和错误。例如,我想将以下 Kotlin 选项应用于所有测试源。
compileTestKotlin {
kotlinOptions {
freeCompilerArgs += [
'-Xopt-in=kotlin.time.ExperimentalTime',
'-Xopt-in=kotlinx.coroutines.ExperimentalCoroutinesApi',
]
}
}
(source)
开箱即用,这在 Android 项目中不起作用,因为没有 compileTestKotlin
方法。根据 kotlin-android Gradle plugin docs,应该可以在 afterEvaluate
块中为 compileVariantNameKotlin 执行此操作,例如:
afterEvaluate {
compileDebugUnitTestKotlin {
kotlinOptions {
freeCompilerArgs += [
'-Xopt-in=kotlin.time.ExperimentalTime',
'-Xopt-in=kotlinx.coroutines.ExperimentalCoroutinesApi',
]
}
}
}
(compileReleaseUnitTestKotlin
类似)
虽然这有效(构建和测试 运行 并顺利通过),但在 Android Studio 中似乎没有任何效果:实验性编译器功能的用法仍然标记为 warnings/errors.
如何以 AS 识别和使用它们的方式为我的测试源启用这些编译器功能?
我在 Android Studio 4.2.2、AGP 4.2.0 版、Kotlin 1.5.10 版上工作:
android {
testOptions {
kotlinOptions {
freeCompilerArgs += [
'-Xopt-in=kotlin.time.ExperimentalTime',
'-Xopt-in=kotlinx.coroutines.ExperimentalCoroutinesApi',
]
}
}
}