Skip to content

Latest commit

 

History

History
69 lines (51 loc) · 2.04 KB

gradle.md

File metadata and controls

69 lines (51 loc) · 2.04 KB

Gradle Script

Introduction

Gradle script is useful when we try to apply HeadVer to an Android build.

How to Use

Android build can be applied as below example.

gradlew assembleRelease -Pversion.head=1 -Pversion.build=67

ext {
    head = (rootProject.properties.get("version.head") as Integer)
    build = (rootProject.properties.get("version.build") as Integer)
}

android {
    defaultConfig {
        versionName "${project.head}.${new version().getYearWeek()}.${project.build}"
        // ...
    }
}

Code

class version {
    static def getYearWeek() {
        getYearWeek(Calendar.getInstance())
    }

    static def getYearWeek(Calendar calendar) {
        calendar.setMinimalDaysInFirstWeek(4)
        calendar.setFirstDayOfWeek(Calendar.MONDAY)
        calendar.setTimeZone(TimeZone.getTimeZone("UTC"))

        int year = calendar.get(Calendar.YEAR) % 100
        int week = calendar.get(Calendar.WEEK_OF_YEAR)

        // this prevents from having 1801 at the last week of the year 2019. It should be 1901
        if (week == 1 && calendar.get(Calendar.DATE) > 20) {
            year += 1
        }
        // this prevents from having 1053 at the last week of the year 2010. It should be 0953
        if (week >= 52 && calendar.get(Calendar.DATE) <= 7) {
            year -= 1
        }
        return "${String.format("%02d", year)}${String.format("%02d", week)}"
    }
}

The getYearWeek() method gives two usages as below.

// generates middle value based on today
new version().getYearWeek()

// generates middle value based on Calendar data
new version().getYearWeek(Calendar calendar)

Tip for Gradle users

  • "I'm familiar with the way of '-SNAPSHOT' versioning, how can I achieve similar dev experience?" The recommendation is to use gradle dependency syntax {head}.+. It retains to get same head version at every build as like -SNAPSHOT does. When the {head} version is getting stabled, receivee developer should change the version to fixed number.