是否可以通过Gradle任务设置android版本代码和名称?

是否可以通过Gradle任务设置android版本代码和名称?,android,curl,android-gradle-plugin,build.gradle,bitrise,Android,Curl,Android Gradle Plugin,Build.gradle,Bitrise,我正在尝试在我正在使用的CI上自动化构建过程。我能够调用curl并为其分配一些变量,如版本代码和名称。然后CI(在我的例子中是Bitrise CI)捕获它并开始发布构建。 然而,在此之前,我想根据curl传递到build.gradle文件中的内容设置版本代码和版本名称,然后开始构建过程 因此,我想我可以编写一个插件/任务,从命令行获取版本代码/名称,然后将其注入build.gradle文件。类似于/gradlew setVersion 1.0的命令 第三,通过从我将要编写的脚本运行这个命令,我将

我正在尝试在我正在使用的CI上自动化构建过程。我能够调用
curl
并为其分配一些变量,如版本代码和名称。然后CI(在我的例子中是Bitrise CI)捕获它并开始发布构建。 然而,在此之前,我想根据
curl
传递到
build.gradle
文件中的内容设置版本代码和版本名称,然后开始构建过程

因此,我想我可以编写一个插件/任务,从命令行获取版本代码/名称,然后将其注入
build.gradle
文件。类似于
/gradlew setVersion 1.0
的命令

第三,通过从我将要编写的脚本运行这个命令,我将能够运行这个gradle任务,全球任何地方的每个人都能够通过
curl
创建发布版本。很有趣:)

我能够编写一个类似于以下代码的任务,并将其放入我的主
build.gradle
文件中

task setVersion << {
    println versionCode
    println versionName
}
这是我的输出:

:setVersion
483
v4.0.3

BUILD SUCCESSFUL

Total time: 6.346 secs

到目前为止还不错。我的问题是如何在
build.gradle
文件中设置它?

您可以从命令行创建更新版本代码和版本名的方法:

./gradlew -PversionCode=483 -PversionName=v4.0.3 setVersion
def getMyVersionCode = { ->
    def code = project.hasProperty('versionCode') ? versionCode.toInteger() : -1
    println "VersionCode is set to $code"
    return code
}

def getMyVersionName = { ->
    def name = project.hasProperty('versionName') ? versionName : "1.0"
    println "VersionName is set to $name"
    return name
}
然后在android块中:

defaultConfig {
        applicationId "your.app.id"
        minSdkVersion 15
        targetSdkVersion 23
        versionCode getMyVersionCode()
        versionName getMyVersionName()

        archivesBaseName = "YourApp-${android.defaultConfig.versionName}"
    }
然后,您可以调用任何任务:

./gradlew assembleDebug -PversionCode=483 -PversionName=4.0.3

请在此处阅读更多信息:

谢谢您的回答。在我看来,它唯一的问题是我必须为每个gradle任务传递版本代码和名称,特别是AssembledBug。我相信其他开发人员也会抱怨:)我更希望版本代码和名称保持不变,但这些方法会将版本代码和名称注入默认配置块。还有可能吗?谢谢你可以试试这种技术,它比你想要的要复杂一点:我根据#brwngrldev的建议实现了我的自动化。我读了那篇文章,但没有发现它对我的情况有用。她的建议的优点是,我能够将命令放入脚本并轻松运行。稍后我将为其他程序员记录它。再次感谢。使用默认值versionCode项目更简单。hasProperty('versionCode')?项目['versionCode'].toInteger():124当我评论@brwngrldev的答案时,我写了一篇关于如何自动化Android构建系统的帖子。如果你感兴趣,请看这篇文章。