我正在尝试使用自定义版本的gradle-release插件来模拟Android中的Maven版本插件:https://github.com/townsfolk/gradle-release
有趣的步骤包括:
- 检查未提交的更改
- 单步执行版本代码并从版本名称中删除-SNAPSHOT后缀
- 组建
- 单步执行版本名称并为下一个开发版本添加-SNAPSHOT后缀
但是,生成的APK始终具有以前的版本(即1.0.0-SNAPSHOT,而不是1.0.0)。
版本号在www.example.com中存储并正确更新gradle.properties,因此我假设我还需要更新数据模型中的版本,以便更改生效。
我的Android插件配置:
defaultConfig {
versionCode versionCode as int // taken from gradle.properties
versionName versionName // taken from gradle.properties
minSdkVersion 10
targetSdkVersion 19
}
我尝试过的事情:
preBuild << {
android.applicationVariants.each { variant ->
variant.versionName = versionName
}
}
但变体中没有versionName。
preBuild << {
android.buildTypes.each { type ->
type.versionName = versionName
}
}
但是类型中没有versionName。
preBuild << {
android.productFlavors.each { flavor ->
flavor.versionName = versionName
}
}
但我的应用程序中没有任何风格(仅限纯调试和发布构建类型)。
我的替代方法是编写一个bash/bat脚本,在调用Gradle之前逐步执行版本,这与使用Groovy改进构建定制的目的完全相反。
如何在执行阶段在Android Gradle插件中动态更新版本?
7条答案
按热度按时间r7s23pms1#
这就是
buildTypes
的用途。你所描述的是一个release
版本,IMO。下面是一个例子:当执行
assembleDebug
时,它会给予你一个快照版本,而执行assembleRelease
会给你一个没有任何后缀和递增版本号的干净版本。下一个调试版本也会使用递增的版本号。以下是在文件夹中创建文件时的完整功能构建。它也可以用于各种风格,但这只是附带产品:). Gradle 2.2.1,Android插件1.1.3
构建分级
Android系统的安全性
自动版本.gradle
执行
gradle assembleDebug
以正常构建,执行gradle assembleRelease
以递增并构建,执行gradle incrementVersion
以仅递增。* 注意:请小心使用gradle assemble
,因为assembleDebug
和assembleRelease
的顺序将产生不同的结果。*检查
build
目录中生成的文件,查看值是否符合您的要求。手动执行(来自注解)
您可能有多种风格,在这种情况下,版本会增加多次,因为多个变体与发布构建类型匹配。最初的问题是没有风格。如果您希望在版本号增加时有更多的控制,只需删除
afterEvaluate
块,并在需要时调用incrementVersion
任务:(The上述手动执行是一个未经测试的想法。)
检查未提交的更改
“检查未提交的更改”不在这个答案中,这是另一个游戏。如果我理解正确的话,你可以挂到
tasks.preBuild.doFirst { /*fail here if uncommited changes*/ }
上。但这高度依赖于你的版本控制。问另一个问题以获得更多信息!enxuqcxy2#
我需要把当前的git提交代码修订次数附加到版本名上。在很多情况下真实的方便。我最终得到了下面的简单gradle文件
类似于gitCommitCount,你可以生成你自己的变量来定制版本名。因为我只是在执行一个终端命令,将其结果存储在一个变量中。
snvhrwxg3#
这并没有直接解决如何完全更改versionName的问题,但我使用以下代码为我的buildTypes追加后缀:
8qgya5xd4#
我只是使用了Javanator's answer并做了一些修改,这样commit count不仅可以帮助更改名称,还可以确保版本代码保持唯一性。下面是我所做的一个示例(也许有几件事可以优化,但仍然为我做了这项工作):
***编辑:***最后一位也可以像这样
w1jd8yoj5#
我也面临着类似的需求,即发布和非发布构建需要有独立的构建逻辑,除了不同的版本之外,我还必须使用不同的依赖关系,甚至是不同的存储库。
没有一个可用的插件具有我所需要的所有特性,所以我开发了我自己的解决方案,基于简单的方法-命令行参数。
您可以在调用gradle构建脚本时传递命令行参数,如下所示:
就我而言
Gradle会解析它,然后它会自动作为项目对象的一个属性可用。您可以这样使用它:
我将这个逻辑提取到一个单独的插件中,并且我已经成功地在不同的项目中使用了它。
虽然这不能直接回答你的问题,但我希望我给了你另一个Angular 来思考这个问题和另一个可能的解决方案。
wwwo4jvm6#
这个问题已经很晚了,但是您可以尝试以下方法将动态构建后缀附加到
build.gradle
中的versionName
。x4shl7ld7#
版本名称和版本代码都可以动态生成,如下所示。