项目构建的增量版本

Sfi*_*oza 4 android gradle android-studio build.gradle android-gradle-plugin

在Android Studio中,我有build.gradle关于应用程序版本的默认信息:

android {    
    defaultConfig {
        versionCode 24
        versionName "0.1 beta"
    }
}
Run Code Online (Sandbox Code Playgroud)

如何versionCode在每个项目编译中自动增加?

Com*_*are 9

自我的书:

由于android:versionCode是一个单调递增的整数,一种自动化方法是在每次构建时简单地增加它.虽然这可能看起来很浪费,但是20亿次构建是很多构建,因此单独的开发人员不太可能耗尽.versionCode 在团队中同步这些值会变得更复杂,但对于个别情况(开发人员,构建服务器等),使用Groovy显然是可行的.

Gradle/HelloVersioning 示例项目使用一个version.properties文件作为后备存储的版本信息:

def versionPropsFile = file('version.properties')

if (versionPropsFile.canRead()) {
    def Properties versionProps = new Properties()

    versionProps.load(new FileInputStream(versionPropsFile))

    def code = versionProps['VERSION_CODE'].toInteger() + 1

    versionProps['VERSION_CODE']=code.toString()
    versionProps.store(versionPropsFile.newWriter(), null)

    defaultConfig {
        versionCode code
        versionName "1.1"
        minSdkVersion 14
        targetSdkVersion 18
    }
}
else {
    throw new GradleException("Could not read version.properties!")
}
Run Code Online (Sandbox Code Playgroud)

首先,我们尝试打开一个version.properties文件,如果它不存在则失败,要求开发人员手动创建一个启动文件:

VERSION_CODE=1
Run Code Online (Sandbox Code Playgroud)

当然,这个脚本的更强大的实现将处理这种情况并为开发人员提供初始值.

然后,该脚本使用前一节中所示的read-the-custom-properties逻辑[注意:本书未包括在内]来读取现有值...但它将旧值递增1以获取新代码使用.修改后的代码然后在defaultConfig块中应用之前写回属性文件.

在这种情况下,GradleException如果version.properties找不到文件或者无法读取文件,脚本会抛出一个停止构建.