AGP移除库build.gradle版本信息后,如何合理存放Android库版本?
Android库版本管理最佳实践(规避AGP升级后的手动恢复问题)
一、用Gradle属性文件统一托管版本
- 在库模块根目录新建
gradle.properties文件,写入版本字段:libraryVersionCode=10 libraryVersionName=1.0.0 - 在库的
build.gradle中引用这些属性,不要放在defaultConfigs内,而是直接在模块配置中使用:android { // 其他常规配置... // 可选:给输出的aar文件加上版本号,便于识别 libraryVariants.all { variant -> variant.outputs.each { output -> output.outputFileName = "mylibrary-${project.libraryVersionName}.aar" } } } // 把版本信息暴露给主应用(如果需要) project.ext { libraryVersionCode = project.libraryVersionCode.toInteger() libraryVersionName = project.libraryVersionName } - 优势:AGP升级助手不会修改
gradle.properties文件,版本信息与构建脚本分离,多库场景下批量维护更方便。
二、Git标签+Gradle自动同步版本
- 用Git标签标记库的正式版本(比如
v1.0.0),然后通过Gradle脚本自动读取标签作为版本号:// 获取最新Git标签作为版本名 def getGitVersionName() { def stdout = new ByteArrayOutputStream() exec { commandLine 'git', 'describe', '--tags', '--abbrev=0' standardOutput = stdout } return stdout.toString().trim().replace('v', '') } // 获取提交次数作为版本号 def getGitVersionCode() { def stdout = new ByteArrayOutputStream() exec { commandLine 'git', 'rev-list', '--count', 'HEAD' standardOutput = stdout } return stdout.toString().trim().toInteger() } android { // 其他常规配置... libraryVariants.all { variant -> variant.outputs.each { output -> output.outputFileName = "mylibrary-${getGitVersionName()}.aar" } } } // 暴露版本信息给主应用 project.ext { libraryVersionCode = getGitVersionCode() libraryVersionName = getGitVersionName() } - 优势:版本与代码提交强绑定,无需手动维护版本号,AGP升级不会影响脚本逻辑,适配Git子模块的协作场景。
三、VERSION文件+Gradle读取
- 在库模块根目录创建
VERSION文件,内容直接写版本信息(换行区分版本名和版本号):1.0.0 10 - 在
build.gradle中读取文件内容:def versionFile = file('VERSION') def versionLines = versionFile.readLines() def libraryVersionName = versionLines[0].trim() def libraryVersionCode = versionLines[1].trim().toInteger() android { // 其他常规配置... libraryVariants.all { variant -> variant.outputs.each { output -> output.outputFileName = "mylibrary-${libraryVersionName}.aar" } } } // 暴露版本信息给主应用 project.ext { libraryVersionCode = libraryVersionCode libraryVersionName = libraryVersionName } - 优势:版本信息直观易懂,非技术人员也能修改,AGP升级过程中不会改动该文件。
关键注意点
- 避免把版本号放在
defaultConfigs中——这是AGP升级助手重点清理的区域,因为Android库本身不需要versionCode/versionName(这些是应用专属属性),库的版本核心作用是发布标识和依赖管理。 - 如果主应用需要获取库的版本,直接通过
project.ext暴露的属性引用即可,比如在主应用build.gradle中:def libraryVersion = project(':mylibrary').libraryVersionName
内容的提问来源于stack exchange,提问作者Niklas Dada
相关产品推荐
相关产品推荐

