You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 15:01:09