发布Android库至Maven Local时遇未解析引用问题求助
解决Android库发布到Maven Local后DSL/扩展函数无法解析的问题
以下是针对问题的具体修复方案,按优先级排序:
1. 修正发布变体配置,确保包含Kotlin元数据
Kotlin的扩展函数、DSL语法依赖.kotlin_module元数据文件,若发布配置未正确关联Kotlin产物,会导致消费方无法解析相关符号。建议使用release变体发布(更符合库发布规范),并确保变体配置包含源码和元数据:
修改library/build.gradle.kts中的配置:
android { namespace = ".." publishing { // 对应发布的release变体,启用源码Jar singleVariant("release") { withSourcesJar() withJavadocJar() // 可选,建议添加以提供API文档 } } kotlinOptions { freeCompilerArgs += "-Xexplicit-api=strict" } } publishing { publications { register<MavenPublication>("sdkLibrary") { groupId = "<group_id>" artifactId = "<artifact_id>" version = "0.0.1-SNAPSHOT" // 直接关联release组件,自动包含aar、Kotlin元数据等产物 from(components["release"]) } } }
若必须使用debug变体发布,需手动添加Kotlin元数据产物:
publishing { publications { register<MavenPublication>("sdkLibrary") { // ... 其他配置 from(components["debug"]) // 手动添加Kotlin元数据文件 artifact(tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile>().findByName("debugKotlin")?.outputs?.files?.first { it.name.endsWith(".kotlin_module") }) } } }
2. 确保KSP生成代码被打包进发布产物
你的预编译插件启用了KSP,生成的代码需要被纳入库的源码集合,否则消费方无法访问KSP生成的DSL或扩展函数。修改precompiled_plugin/android-library-base.kts:
android { // ... 其他现有配置 sourceSets { // 将KSP生成的代码添加到对应变体的源码路径 getByName("main").java.srcDir("build/generated/ksp/main/kotlin") getByName("debug").java.srcDir("build/generated/ksp/debug/kotlin") getByName("release").java.srcDir("build/generated/ksp/release/kotlin") } }
3. 检查Explicit API模式下的符号可见性
你启用了-Xexplicit-api=strict,该模式要求所有对外暴露的API必须显式标注public修饰符。若你的DSL类、扩展函数未显式声明public,会默认被标记为internal,导致消费方无法访问:
错误示例(默认internal):
fun Context.showToast(message: String) { Toast.makeText(this, message, Toast.LENGTH_SHORT).show() }
正确示例(显式public):
public fun Context.showToast(message: String) { Toast.makeText(this, message, Toast.LENGTH_SHORT).show() }
4. 验证Maven Local发布产物的完整性
执行./gradlew publishToMavenLocal后,前往本地仓库路径(默认~/.m2/repository/<group_id>/<artifact_id>/0.0.1-SNAPSHOT)检查以下文件是否存在:
<artifact_id>-0.0.1-SNAPSHOT.aar:库的核心产物<artifact_id>-0.0.1-SNAPSHOT-sources.jar:源码包<artifact_id>-0.0.1-SNAPSHOT.module:Kotlin元数据文件
若缺失任意文件,说明发布配置存在问题,需重新检查上述步骤。
5. 消费方依赖配置检查
确保消费方项目中正确引入依赖,并启用Kotlin Android插件:
// 消费方build.gradle.kts plugins { id("com.android.application") kotlin("android") // 必须启用该插件才能解析Kotlin扩展函数 } dependencies { // 若发布的是release变体,直接引入 implementation("<group_id>:<artifact_id>:0.0.1-SNAPSHOT") // 若发布的是debug变体,需指定debugImplementation // debugImplementation("<group_id>:<artifact_id>:0.0.1-SNAPSHOT") }
内容的提问来源于stack exchange,提问作者suns9
相关产品推荐
相关产品推荐

