Skip to content

AndroidGradlePreprocessing

Igor Maznitsa edited this page May 9, 2015 · 13 revisions

Now a lot of android projects are based on Gradle, it is very easy to inject preprocessing and into this building process. As the first one create 'preprocess.gradle' into the root of your Gradle based Android project, next to the 'build.gradle' and place into the file strings below

// the folder contains the result
def preprocessRoot = 'preprocessed'
// the folder contains preprocessed sources
def preprocessSrc = preprocessRoot+'/src'
// the folder contains preprocessed resources
def preprocessRes = preprocessRoot+'/res'

// the original root folder path
def originalRoot = 'src/main'
// the original java sources folder
def originalSrc = originalRoot+'/java'
// the original resource folder
def originalRes = originalRoot+'/res'

configurations {
    jcp
}

dependencies{
    jcp('com.igormaznitsa:jcp:6.0.0'){
        exclude group: 'org.apache.maven.*'
        exclude group: 'org.codehaus.*'
    }
}

android {
    sourceSets.main.java.srcDirs = [preprocessSrc]
    sourceSets.main.resources.srcDirs = [preprocessRes]
}

task preprocess << {
    println('--------------------------')

    def jcpjar = file(project.configurations.jcp.find { it.name.startsWith("jcp-") })
    println("Preprocessor JAR : "+jcpjar)
    ant.taskdef(resource: 'com/igormaznitsa/jcp/ant/antlib.xml', classpath: jcpjar)

    println('Preprocessed SRC : '+preprocessSrc)
    ant.preprocess(excluded:"bin,jpg,png,ico,gif.svg", processing:'java,xml', source: originalSrc, destination: preprocessSrc){
        global(name:'someTestGlobalVar',value:'its value')
    }

    println('Preprocessed RES : '+preprocessRes)
    ant.preprocess(excluded:"bin,jpg,png,ico,gif.svg", processing:'java,xml', source: originalRes, destination: preprocessRes)

    println('--------------------------')
}

preBuild.dependsOn preprocess

then add string below into 'build.gradle' for instance just after `apply plugin: 'com.android.application``

apply from: 'preprocess.gradle'

after listed operations, JCP will be preprocessing your source and resource folders, of course the example developed for common standard case with one source and one resource folders for more complex cases you should adapt it manually

Clone this wiki locally