Android 项目配置之 Version Name & Code

Android 项目配置之 Version Name & Code_第1张图片

简评:优雅的设置 Android 应用的 versionCode & Name。

Android 开发者一定对下面的这两个属性很熟悉吧:

defaultConfig {
    ...
    versionCode 1
    versionName "1.0.0"
}

但直接这样设置有两个不好的地方:

  • 不知道这个 version 对应的是哪一个 commit。
  • 每次修改 versionCode 和 versionName,都要更新 build.gradle 文件。

如果你使用 git 作为你的版本控制工具,这篇文章就可以帮助你快捷设置 versionName & versionCode。

Version Name

对于 versionName 我们可以用 git describe 命令。

a. git describe 会从当前 commit 找到最近的一个 tag。
b. 如果这个 tag 就指向当前 commit,那就直接输出 tag。
c. 否则输出之前的 tag + 中间间隔的 commit 数 + 当前的 commit ID。比如:1.0-2-gdc226a

Android 项目配置之 Version Name & Code_第2张图片

Version Code
versionCode 是一个数字,通常每一个 git tag 对应一个 version。

Android 项目配置之 Version Name & Code_第3张图片

当然,对于开发中的内部版本是没有必要每个都打 tag 的,这时我们可以用时间戳来作为 versionCode。

Android 项目配置之 Version Name & Code_第4张图片

因此,可以创建一个 script-git-version.gradle 文件:

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'org.ajoberstar:grgit:1.5.0'
    }
}

import org.ajoberstar.grgit.Grgit

ext {
    git = Grgit.open(currentDir: projectDir)
    gitVersionName = git.describe()
    gitVersionCode = git.tag.list().size()
    gitVersionCodeTime = git.head().time
}

task printVersion() {
    println("Version Name: $gitVersionName")
    println("Version Code: $gitVersionCode")
    println("Version Code Time: $gitVersionCodeTime")
}

之后在 build.gradle 中这样用:

apply plugin: 'com.android.application'
apply from: "$project.rootDir/tools/script-git-version.gradle"
productFlavors {
    dev {
        versionCode gitVersionCodeTime
        versionName gitVersionName
    }

    prod {
        versionCode gitVersionCode
        versionName gitVersionName
    }
}
Version Name: 1.0-2-gdca226a
Version Code: 2
Version Code Time: 1484407970

这样来设置 versionCode 和 versionName 就可以很方便的分辨出每个版本对应的 commit,也不用每次都手动去改 build.gradle 文件了。

原文:Configuring Android Project — Version Name & Code
欢迎关注知乎专栏「极光日报」,每天为 Makers 导读三篇优质英文文章。

日报延伸阅读
-改进 Android 项目的资源目录
-正确配置你的 Android 项目

你可能感兴趣的:(Android 项目配置之 Version Name & Code)