For those unfamiliar with Gradle (like me), at the bottom is the full build.gradle script for my Module so you can see where and how the tool is integrated, as again we were just given snippets. The Exec command runs the exe in the same folder as the build.grade file, so use relative paths to the tool and source.
This is VersionUtils.java, a source file in my Module which contains the BuildNum for the Module.
package ca.mmist;
public class VersionUtils
{
public static final int nSkyUtilsCRC = 1078887142;
public static final int nSkyUtilsBuild = 228;
}
What I really wanted was for the BuildNum to only increment when a dependancy changed requiring a build. So, I modified BuildNum.exe to find the 'src' folder in the VersionUtils.java, and then recursively scan each subfolder looking for .java;.xml;.jar;.lib and generate a CRC32 using the FileWriteTime and FileSize of each source file. So when I re-write VersionUtils.java (first into VersionUtils.~java) to increment the BuildNo, I compare the CRCs and if they are the same, I can simply discard the temp file. Otherwise I swap (delete and rename) the files, thereby causing a rebuild of my Module with a new BuildNo. (Sounds more painful than it was to code up in an hour.)
Anyway, now QA is happy they can validate precisely what build of the Software shipped without relying on a human to remember to modify the Version tags in the Manifest.
apply plugin: 'com.android.library'
android {
compileSdkVersion 16
buildToolsVersion "19.1.0"
task buildNum(type: Exec, description: 'BuildNum.exe') {
commandLine '../../../Tools/Bin/buildnum.exe', 'src/main/java/ca/mmist/VersionUtils.java'
}
tasks.withType(JavaCompile) {
compileTask -> compileTask.dependsOn buildNum
}
defaultConfig {
minSdkVersion 10
targetSdkVersion 16
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
}
dependencies {
compile 'com.android.support:support-v4:18.+'
compile files('libs/maplink.jar')
}