
GNav-like navigation component with KSP metadata code generation and Gradle task wiring to include generated sources, enabling stable build-time navigation setup across modules.
在 composeApp/build.gradle.kts 中配置 KMP sourceSets 和 KSP 处理器:
kotlin {
sourceSets {
val commonMain by getting {
dependencies {
// 其他依赖…
implementation("pub.gll:nav-multiplatform:0.0.2")
// 引入 KSP 生成的 commonMain 代码目录
kotlin.srcDir("build/generated/ksp/metadata/commonMain/kotlin")
}
}
}
}
dependencies {
// 注册 KSP metadata 处理器
add("kspCommonMainMetadata", "pub.gll:nav-processor-multiplatform:0.0.2")
}由于 KSP 会在 commonMain 中生成代码,而各平台的 Kotlin
编译任务默认不会自动依赖
kspCommonMainKotlinMetadata,因此需要手动建立依赖关系:
//这段代码添加到主模块最下边就行
tasks.configureEach {
when {
// Android
name.matches(Regex("compile.*KotlinAndroid")) -> {
dependsOn(":composeApp:kspCommonMainKotlinMetadata")
}
// JVM
name.matches(Regex("compile.*KotlinJvm")) -> {
dependsOn(":composeApp:kspCommonMainKotlinMetadata")
}
// JS
name.matches(Regex("compile.*KotlinJs")) -> {
dependsOn(":composeApp:kspCommonMainKotlinMetadata")
}
// iOS - 真机
name.matches(Regex("compile.*KotlinIosArm64")) -> {
dependsOn(":composeApp:kspCommonMainKotlinMetadata")
}
// iOS - 模拟器
name.matches(Regex("compile.*KotlinIosSimulatorArm64")) -> {
dependsOn(":composeApp:kspCommonMainKotlinMetadata")
}
// 其他平台
name.matches(Regex("compile.*Kotlin.*")) &&
!name.contains("Test") -> {
dependsOn(":composeApp:kspCommonMainKotlinMetadata")
}
}
}该配置确保:
API 使用方式同 GNav:
在 composeApp/build.gradle.kts 中配置 KMP sourceSets 和 KSP 处理器:
kotlin {
sourceSets {
val commonMain by getting {
dependencies {
// 其他依赖…
implementation("pub.gll:nav-multiplatform:0.0.2")
// 引入 KSP 生成的 commonMain 代码目录
kotlin.srcDir("build/generated/ksp/metadata/commonMain/kotlin")
}
}
}
}
dependencies {
// 注册 KSP metadata 处理器
add("kspCommonMainMetadata", "pub.gll:nav-processor-multiplatform:0.0.2")
}由于 KSP 会在 commonMain 中生成代码,而各平台的 Kotlin
编译任务默认不会自动依赖
kspCommonMainKotlinMetadata,因此需要手动建立依赖关系:
//这段代码添加到主模块最下边就行
tasks.configureEach {
when {
// Android
name.matches(Regex("compile.*KotlinAndroid")) -> {
dependsOn(":composeApp:kspCommonMainKotlinMetadata")
}
// JVM
name.matches(Regex("compile.*KotlinJvm")) -> {
dependsOn(":composeApp:kspCommonMainKotlinMetadata")
}
// JS
name.matches(Regex("compile.*KotlinJs")) -> {
dependsOn(":composeApp:kspCommonMainKotlinMetadata")
}
// iOS - 真机
name.matches(Regex("compile.*KotlinIosArm64")) -> {
dependsOn(":composeApp:kspCommonMainKotlinMetadata")
}
// iOS - 模拟器
name.matches(Regex("compile.*KotlinIosSimulatorArm64")) -> {
dependsOn(":composeApp:kspCommonMainKotlinMetadata")
}
// 其他平台
name.matches(Regex("compile.*Kotlin.*")) &&
!name.contains("Test") -> {
dependsOn(":composeApp:kspCommonMainKotlinMetadata")
}
}
}该配置确保:
API 使用方式同 GNav: