升级AGP后,如何为Maven发布的Android库配置versionCode/versionName
解决AGP升级后库模块版本号丢失导致Maven发布失败的问题
核心思路
把版本号从android.defaultConfig中抽离到AGP升级助手不会修改的位置,同时保证在构建配置、Maven发布和应用代码中能统一复用。
方案1:用gradle.properties管理版本号(最健壮)
这个方案完全避开AGP升级助手的修改范围,适合长期维护:
- 在项目根目录或库模块目录下的
gradle.properties中添加版本配置:
LIB_VERSION_NAME=1.2.3 LIB_VERSION_CODE=4
- 在库模块的
build.gradle中引用这些值,同步到Android配置和Maven发布配置:
android { defaultConfig { versionName project.properties["LIB_VERSION_NAME"] versionCode project.properties["LIB_VERSION_CODE"] as Integer } } // 配置maven-publish插件 publishing { publications { release(MavenPublication) { from components.release // 直接复用定义好的版本名 version project.properties["LIB_VERSION_NAME"] // 可选:把versionCode写入pom属性,方便下游依赖查看 pom.properties { property("versionCode", project.properties["LIB_VERSION_CODE"]) } } } repositories { mavenLocal() // 按需添加其他远程仓库 } }
方案2:在build.gradle中定义独立变量
如果不想额外维护gradle.properties,可以把版本号定义在android块外部,AGP升级助手只会修改android.defaultConfig内的内容,不会碰外部变量:
// 定义在android块外,AGP升级不会修改这里 ext { libVersionName = "1.2.3" libVersionCode = 4 } android { defaultConfig { versionName libVersionName versionCode libVersionCode } } publishing { publications { release(MavenPublication) { from components.release version libVersionName } } }
应用内使用版本号
不管用哪种方案,android.defaultConfig中已经配置了versionName和versionCode,AGP会自动在库的BuildConfig类中生成对应的字段,在应用代码中直接调用即可:
// Java String libVersion = BuildConfig.VERSION_NAME; int libVersionCode = BuildConfig.VERSION_CODE;
// Kotlin val libVersion = BuildConfig.VERSION_NAME val libVersionCode = BuildConfig.VERSION_CODE
验证发布
执行发布命令时指定库模块名(替换成你的模块名):
./gradlew :your-library-module:publish
内容的提问来源于stack exchange,提问作者slhck
相关产品推荐
相关产品推荐

