Android 原始碼集配置
新的 Android 原始碼集配置於 Kotlin 1.8.0 中推出,並在 1.9.0 中成為預設配置。請參考此指南以了解已棄用配置與新配置之間的主要差異,以及如何遷移您的專案。
您不需要實作所有建議,只需套用適用於您特定專案的建議即可。
檢查相容性
新的配置需要 Android Gradle 外掛程式 7.0 或更高版本,且受 Android Studio 2022.3 及更高版本支援。請檢查您的 Android Gradle 外掛程式版本,並在必要時進行升級。
重新命名 Kotlin 原始碼集
如果適用,請按照以下模式重新命名專案中的原始碼集:
| 舊版原始碼集配置 | 新版原始碼集配置 |
|---|---|
targetName + AndroidSourceSet.name | targetName + AndroidVariantType |
{AndroidSourceSet.name} 對應到 {KotlinSourceSet.name} 的方式如下:
| 舊版原始碼集配置 | 新版原始碼集配置 | |
|---|---|---|
| main | androidMain | androidMain |
| test | androidTest | androidUnitTest |
| androidTest | androidAndroidTest | androidInstrumentedTest |
移動原始碼檔案
如果適用,請按照以下模式將您的原始碼檔案移動到新目錄:
| 舊版原始碼集配置 | 新版原始碼集配置 |
|---|---|
該配置具有額外的 /kotlin SourceDirectories | src/{KotlinSourceSet.name}/kotlin |
{AndroidSourceSet.name} 對應到 {包含的 SourceDirectories} 的方式如下:
| 舊版原始碼集配置 | 新版原始碼集配置 | |
|---|---|---|
| main | src/androidMain/kotlin src/main/kotlin src/main/java | src/androidMain/kotlin src/main/kotlin src/main/java |
| test | src/androidTest/kotlin src/test/kotlin src/test/java | src/androidUnitTest/kotlin src/test/kotlin src/test/java |
| androidTest | src/androidAndroidTest/kotlin src/androidTest/java | src/androidInstrumentedTest/kotlin src/androidTest/java, src/androidTest/kotlin |
移動 AndroidManifest.xml 檔案
如果您的專案中有 AndroidManifest.xml 檔案,請按照以下模式將其移動到新目錄:
| 舊版原始碼集配置 | 新版原始碼集配置 |
|---|---|
| src/{AndroidSourceSet.name}/AndroidManifest.xml | src/{KotlinSourceSet.name}/AndroidManifest.xml |
{AndroidSourceSet.name} 對應到 {AndroidManifest.xml 位置} 的方式如下:
| 舊版原始碼集配置 | 新版原始碼集配置 | |
|---|---|---|
| main | src/main/AndroidManifest.xml | src/androidMain/AndroidManifest.xml |
| debug | src/debug/AndroidManifest.xml | src/androidDebug/AndroidManifest.xml |
檢查 Android 與通用測試之間的關係
新的 Android 原始碼集配置改變了 Android 檢測式測試(在新配置中重新命名為 androidInstrumentedTest)與通用測試之間的關係。
以前,androidAndroidTest 與 commonTest 之間的 dependsOn 關係是預設建立的。這意味著:
commonTest中的程式碼在androidAndroidTest中可用。commonTest中的expect宣告必須在androidAndroidTest中有對應的actual實作。- 在
commonTest中宣告的測試也會作為 Android 檢測式測試執行。
在新的 Android 原始碼集配置中,預設不會加入 dependsOn 關係。如果您偏好之前的行為,請在您的 build.gradle.kts 檔案中手動宣告以下關係:
kotlin {
// ...
sourceSets {
val commonTest by getting
val androidInstrumentedTest by getting {
dependsOn(commonTest)
}
}
}調整 Android flavors 的實作
以前,Kotlin Gradle 外掛程式會提前建立與包含 debug 和 release 組建類型或自訂 flavors(如 demo 和 full)的 Android 原始碼集相對應的原始碼集。這使得可以使用如 val androidDebug by getting { ... } 之類的運算式來存取原始碼集。
新的 Android 原始碼集配置利用 Android 的 onVariants 來建立原始碼集。這使得此類運算式失效,並導致如 org.gradle.api.UnknownDomainObjectException: KotlinSourceSet with name 'androidDebug' not found 之類的錯誤。
要解決此問題,請在您的 build.gradle.kts 檔案中使用新的 invokeWhenCreated() API:
kotlin {
// ...
@OptIn(ExperimentalKotlinGradlePluginApi::class)
sourceSets.invokeWhenCreated("androidFreeDebug") {
// ...
}
}