我正在用gradle构建一个Android应用程序.到目前为止,我使用Manifest文件来增加versionCode,但是我想从外部文件中读取versionCode,并且取决于它是发布风格还是调试风格增加了versionCode.我尝试了额外的属性,但是你无法保存它们,这意味着下次我构建它时我得到了相同的版本代码.任何帮助将非常感谢!
project.ext{
devVersionCode = 13
releaseVersionCode = 1
}
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.6.+'
}
}
apply plugin: 'android'
repositories {
mavenCentral()
}
dependencies {
compile project(':Cropper')
compile "com.android.support:appcompat-v7:18.0.+"
compile "com.android.support:support-v4:18.0.+"
compile fileTree(dir: 'libs', include: '*.jar')
}
def getReleaseVersionCode() {
def version = project.releaseVersionCode + 1
project.releaseVersionCode = version
println sprintf("Returning version %d", version)
return version
}
def getDevVersionCode() {
def version = project.devVersionCode + 1
project.devVersionCode = version
println sprintf("Returning version %d", version)
return …Run Code Online (Sandbox Code Playgroud) 有没有办法在每次在Eclipse中构建Android应用程序时自动增加版本代码?
根据http://developer.android.com/guide/publishing/versioning.html,您必须手动增加版本代码AndroidManifest.xml.
我明白,你必须在每次构建之前运行一个脚本,例如解析AndroidManifest.xml文件,找到版本号,增加它并在构建本身启动之前保存文件.但是,我无法了解Eclipse如何以及是否支持在构建之前/之后运行脚本.
我发现这篇关于配置ant builder的文章,但这并不完全是关于Android的,我担心这会让Android的预定义构建步骤过多?
应该是一个常见的问题,你是如何解决的?
好吧,人们可以手动执行此操作,但是一旦忘记执行此项工作,您将获得具有相同编号的不同版本,并且整个版本控制毫无意义.
到目前为止,我一直专注于我的应用程序的编程,并且很少关注使构建过程更加智能.因此,我一直在手工操作("愚蠢的方式"),包括手动更新android:versionCode和android:versionNameAndroidManifest.xml.
我想现在自动(即在构建或出口时):
git包含构建和版本代码的最新标记/分支中获取.我找到了一些关于" 预构建步骤",构建器和build.xml的线索,但我不知道在哪里可以找到这些以及从哪里开始.
有关该主题的更多信息的任何提示或指示?(一步一步的教程是理想的)
更新1:我发现这个帖子暗示我:
Properties > Builders很好,但这里是该项目的蚂蚁构建文件?我在哪里找到它?
更新2:显然,可以将整个项目导出到Ant文件中.但我不确定这是我想要的.预构建步骤必须始终包含Ant构建文件吗?
更新3:正在构建一个Ant文件,仅用于预构建步骤,正确的方法吗?
我们总是需要增加versionCode一些任意数字才能将其发布到Google Play.
该值是否有限,如果达到该值会发生什么?
defaultConfig {
applicationId "my.app"
minSdkVersion 15
targetSdkVersion 22
versionCode 65
versionName "1.05"
setProperty("archivesBaseName", "myapp-$versionCode")
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试配置应用程序的构建变体,作为从Ant迁移到Gradle的一部分.我想出的结构如下:
main
|-> monkey
Run Code Online (Sandbox Code Playgroud)
我想要一种自动递增 "猴子"味道的版本代码的方法.我复制了AndroidManifest,因此它类似于下面的结构.我添加了两个版本代码和两个版本名称,我将用它来解释我面临的问题.
main
|-> AndroidManifest.xml
| -> versionName="mainFlavour"
| -> versionCode=12
monkey
|-> AndroidManifest.xml
| -> versionName="monkeyFlavour"
| -> versionCode=13
Run Code Online (Sandbox Code Playgroud)
第一种方法
我的第一次尝试是基于这个答案,包括定义一个解析AndroidManifest文件并增加版本代码的任务.该任务将是该任务的依赖generateBuildConfig项.
结果是每当我使用'monkey'风格构建时,读取版本代码和版本名称属性会导致此输出:
versionName "monkeyFlavour"
versionCode 12
Run Code Online (Sandbox Code Playgroud)
也就是说,构建版本具有'monkey'风格的版本名称,但是'main'风格的版本代码.使用PackageManager或BuildConfig读取这些值没有区别.这是我使用的代码:
// Increment version code for 'monkey' builds
task('increaseVersionCode') << {
def manifestFile = file("src/monkey/AndroidManifest.xml")
def pattern = Pattern.compile("versionCode=\"(\\d+)\"")
def manifestText = manifestFile.getText()
def matcher = pattern.matcher(manifestText)
matcher.find()
def versionCode = Integer.parseInt(matcher.group(1))
def manifestContent = matcher.replaceAll("versionCode=\"" + ++versionCode + "\"") …Run Code Online (Sandbox Code Playgroud) 目前我正在尝试通过自动递增版本代码来改进我们的编译器,因此我们的QA团队已经知道他们正在测试的构建版本并且可以记录特定的版本代码.我们有3个productFlavors(登台,qa,生产)和2个签名配置(调试,发布).
我研究了不同的解决方案:
如何在Android Gradle中自动增加versionCode
如何在Android Gradle中自动增加versionCode
基于这些答案,我使用version.properties文件构建了一个版本代码增量器.
现在问题出现了,对于每个productFlavor和SigningConfig组合(+ android studio中的gradle sync),都会生成一个新的版本代码.每当我点击播放按钮创建qaRelease构建时,我希望版本代码递增.所以我们的构建周期将是: