buildscript {
    repositories {
        maven { url '../../../../../out/repo' }
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.12.2'
    }
}
apply plugin: 'com.android.application'

android {
    compileSdkVersion 19
    buildToolsVersion '19.1.0'
}


public class GenerateCode extends DefaultTask {
    @Input
    String value

    @OutputFile
    File outputFile

    @TaskAction
    void taskAction() {
        getOutputFile().text =
            "package com.custom;\n" +
            "public class Foo {\n" +
            "    public static String getBuildDate() { return \"${getValue()}\"; }\n" +
            "}\n";
    }
}


android.applicationVariants.all { variant ->

    // create a task that generates a java class
    File sourceFolder = file("${buildDir}/customCode/${variant.dirName}")
    def javaGenerationTask = tasks.create(name: "generatedCodeFor${variant.name.capitalize()}", type: GenerateCode) {
        value new Date().format("yyyy-MM-dd'T'HH:mm'Z'", TimeZone.getTimeZone("UTC"))
        outputFile file("${sourceFolder.absolutePath}/com/custom/Foo.java")
    }

    variant.registerJavaGeneratingTask(javaGenerationTask, sourceFolder)
}
