Skip to content

Commit 986ea2f

Browse files
authored
fix(android): 确保生成的 Kotlin 配置参与编译 (#777)
## 问题 当宿主 Flutter 项目启用 AGP 9 的 Built-in Kotlin: ```properties android.builtInKotlin=true ```` 使用 `fluwx_no_pay` 构建 Android APK 时,Kotlin 编译失败: ``` Unresolved reference 'FluwxConfigurations' ``` `FluwxConfigurations.kt` 是根据宿主项目 `pubspec.yaml` 自动生成的配置文件。 ## 原因 插件原本通过 Android `sourceSets.main.java.srcDirs` 注册生成目录: ``` build/generated/src/kotlin ``` 在 Kotlin Gradle Plugin 模式下,该目录会被 Kotlin 编译任务间接识别。 启用 AGP Built-in Kotlin 后,Kotlin 编译任务不会自动继承这部分 Android Java source set 配置,因此生成文件虽然已经创建,但没有参与 Kotlin 编译。 ## 修改内容 - 保存 `generateFluwxHelperFile` 任务引用。 - 将所有 `KotlinCompile` 任务依赖到配置生成任务。 - 将 `build/generated/src/kotlin` 显式加入 Kotlin 编译源码目录。 这样可以确保: 1. 编译前一定生成 `FluwxConfigurations.kt`。 2. 生成的 Kotlin 源码会被 `fluwx` 和 `fluwx_no_pay` 正确编译。 3. 继续兼容 AGP Built-in Kotlin 配置。 4. 不改变插件对外 API 和运行时行为。 ## 验证 已通过: ``` ./gradlew :fluwx_no_pay:compileReleaseKotlin --offline --console=plain flutter build apk --target-platform android-arm64 ``` APK 构建成功,`FluwxConfigurations` 相关编译错误已消失。
1 parent 54da71c commit 986ea2f

1 file changed

Lines changed: 7 additions & 1 deletion

File tree

‎packages/_shared/android/build.gradle.kts‎

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import org.yaml.snakeyaml.Yaml
2+
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
23

34
group = "com.jarvan.fluwx"
45
version = "1.0-SNAPSHOT"
@@ -132,7 +133,7 @@ fun Project.generateFluwxConfigurations(
132133
File("${generateFolder.absolutePath}/FluwxConfigurations.kt").writeText(source)
133134
}
134135

135-
tasks.register("generateFluwxHelperFile") {
136+
val generateFluwxHelperFile = tasks.register("generateFluwxHelperFile") {
136137
doFirst {
137138
val config = loadPubspec()
138139
@Suppress("UNCHECKED_CAST")
@@ -165,6 +166,11 @@ tasks.register("generateFluwxHelperFile") {
165166
}
166167
}
167168

169+
tasks.withType<KotlinCompile>().configureEach {
170+
dependsOn(generateFluwxHelperFile)
171+
source(layout.buildDirectory.dir("generated/src/kotlin"))
172+
}
173+
168174
configure<com.android.build.gradle.LibraryExtension> {
169175
libraryVariants.configureEach {
170176
registerGeneratedResFolders(

0 commit comments

Comments
 (0)