我正在使用Android Studio,Gradle,git。
在每次推向主分支时,我想构建一个新的App版本,该版本已上传到Google Play商店的Alpha频道。为此,我需要为每个构建增加App的versionCode。
为此,我似乎有几个选择:
- 在Jenkins构建期间增加数量并将更改的文件推回到repo。
- 使用git钩子增加数量。
- 我更喜欢使用git来修改文件。如果我在度假时(在团队的其他成员中)会发现这个,并知道如何处理它?
- 在另一台服务器上有一个文件(构建服务器可以直接访问),保存当前版本。 Gradle将访问它,增加它并再次保存。
- 这似乎“脆弱”但至少我可以有一个简单的'increaseVersion'任务,只在服务器上执行。如果它中断(如果我们移动服务器或其他东西),它很容易修复。
目前,我最喜欢3。
有人有明确的方法吗?
我没有使用上述任何一个 - 就像你一样,我不想改变每个构建的repo,也不想改变任何文件。
Jenkins每个版本都有一个不断增加的价值,通过 BUILD_NUMBER
环境变量。
在Gradle中,我生成了 versionCode
在编译时以编程方式使用 BUILD_NUMBER
确保价值 versionCode
始终高于上一个版本。
我的一个片段 build.gradle
:
// Used to set the package version name and version code
ext.versionMajor = 1
ext.versionMinor = 2
android {
defaultConfig {
versionName computeVersionName()
versionCode computeVersionCode()
}
}
// Will return "1.2" in this example
def computeVersionName() {
// Basic <major>.<minor> version name
return String.format('%d.%d', versionMajor, versionMinor)
}
// Will return 120042 for Jenkins build #42
def computeVersionCode() {
// Major + minor + Jenkins build number (where available)
return (versionMajor * 100000)
+ (versionMinor * 10000)
+ Integer.valueOf(System.env.BUILD_NUMBER ?: 0)
}
因此,我只需要在进行发布构建时更新顶部的两个值。对于所有其他构建类型,我可以让Gradle / Jenkins自动设置 versionCode
接着 上传到Google Play。
这也意味着,对于Play商店中列出的任何alpha版本,或通过检查APK,我可以立即看到Jenkins构建它来自哪里,并从那里git commit。