android - 在持续集成中增加 Android 内部版本号

标签 android git jenkins continuous-integration

我正在使用 Android Studio、Gradle、git。

每次推送到 master 分支时,我都想构建一个新的应用程序版本,并将其上传到 Google Play 商店的 Alpha channel 。为此,我需要为每个构建增加应用程序的版本代码。

为此我似乎有几种选择:

  1. 在 Jenkins 构建期间增加数量并将更改的文件推送回存储库。
    • 我不喜欢让我的构建服务器执行推送/提交的想法。
  2. 使用 git hook 增加数量。
    • 我更不喜欢使用 git 修改文件的想法。如果我在度假,谁(在团队的其他成员中)会找到这个并知道如何处理它?<​​/li>
  3. 在另一台服务器上有一个文件(构建服务器可以直接访问),其中保存了当前版本。 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/

相关文章:

windows - 带有 "autopush"的 Git 客户端?

ant - 如何覆盖 Jenkins 中的 http_proxy 环境变量?

android - 在android项目中添加和访问视频文件

android - 无法让 Android ServiceTestCase 运行

java - 当 xml 的 src 不为 null 时,如何在 android 中将 setImage 设置为 null?

git - 如何确定 Git 分支的创建时间?

git - 如何在 GitK 中查看单个文件的历史记录?

Jenkinsfile 和多个节点

jenkins - hudson / Jenkins : Get list of jobs who's build is older than a month

Android 为 FLAG_TRANSLUCENT 禁用 ActionBar 和 NavigationBar 的覆盖