我正在使用 Android Studio、Gradle、git。
每次推送到 master 分支时,我都想构建一个新的应用程序版本,并将其上传到 Google Play 商店的 Alpha channel 。为此,我需要为每个构建增加应用程序的版本代码。
为此我似乎有几种选择:
- 在 Jenkins 构建期间增加数量并将更改的文件推送回存储库。
- 我不喜欢让我的构建服务器执行推送/提交的想法。
- 使用 git hook 增加数量。
- 我更不喜欢使用 git 修改文件的想法。如果我在度假,谁(在团队的其他成员中)会找到这个并知道如何处理它?</li>
- 在另一台服务器上有一个文件(构建服务器可以直接访问),其中保存了当前版本。 Gradle 将访问它,增加它并再次保存它。
- 这看起来很“脆弱”,但至少我可以轻松完成仅在服务器上执行的“increaseVersion”任务。如果它坏了(如果我们移动服务器或其他东西),修复起来相当容易。
目前,我最喜欢3。
有人有明确的方法吗?
最佳答案
我没有使用以上任何一个——像你一样,我不想为每个构建更改 repo,也不想更改任何文件。
Jenkins 对每个构建都有一个不断增加的值,通过 BUILD_NUMBER
环境变量公开。
在 Gradle 中,我在构建时以编程方式生成 versionCode
值,使用 BUILD_NUMBER
值来确保 versionCode
始终高于以前的构建。
我的 build.gradle
fragment :
// 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
然后 upload to Google Play .
这也意味着,对于 Play 商店中列出的任何 alpha 版本,或通过检查 APK,我可以立即看到它来自哪个 Jenkins 构建,以及从那里的 git 提交。
关于android - 在持续集成中增加 Android 内部版本号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30171571/