是否可以通过Gradle任务设置android版本代码和名称?
我正在尝试在我正在使用的CI上自动化构建过程。我能够调用是否可以通过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的命令 第三,通过从我将要编写的脚本运行这个命令,我将
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构建系统的帖子。如果你感兴趣,请看这篇文章。