// // Gradle task that creates the JDEE project file to andorid // import static groovy.io.FileType.FILES def jarFiles = { project -> def folder = new File("${project.buildDir}/intermediates") def files = [] if( folder.exists() ) { // if exist look for jars folder.eachFileRecurse(FILES) { if(it.name.endsWith('.jar')) { files << it.getAbsolutePath() } } } files } def getImplementation = { project -> def files = [] def transforms = [] // get dependencies jars project.configurations.implementationDeps.each { dep -> if(dep.name.endsWith('.jar')) { files << dep.getAbsolutePath() } else { // get jar from aar def cacheFolder = new File("${System.getProperty('user.home')}/.gradle/caches") if( cacheFolder.exists() ) { cacheFolder.eachFileRecurse(FILES) { if(!transforms.contains(dep.name) && it.path.contains(dep.name) && it.name.endsWith('.jar')) { transforms << dep.name files << it.getAbsolutePath() } } } } } files } def generatedDirs = { project -> def folder = new File("${project.buildDir}/generated") def dirs = [] if( folder.exists() ) { folder.eachDirRecurse { dir -> if (!(dir ==~ /.*generated\/res\/.*/)) { dirs << dir } } } dirs } def prj = { project -> "(jdee-project-file-version" (["1.0"]) "(jdee-set-variables" { "'(jdee-compile-option-directory" (["${project.buildDir}"]) "'(jdee-junit-working-directory" ([]) "'(jdee-compile-option-source" { "'(" (["default", "${project.targetCompatibility}"]) } "'(jdee-compile-option-target" { "'(" (["default", "${project.sourceCompatibility}"]) } "'(jdee-sourcepath" { "'(" ( ["${project.projectDir}/src/androidTest/java"] + project.android.sourceSets.main.java.srcDirs + android.sourceSets.test.java.srcDirs + project.android.sourceSets.test.java.srcDirs + project.android.sourceSets.main.assets.srcDirs + project.android.sourceSets.main.renderscript.srcDirs + project.android.sourceSets.main.res.srcDirs + project.android.sourceSets.main.aidl.srcDirs + project.android.sourceSets.main.jniLibs.srcDirs + project.android.sourceSets.main.resources.srcDirs + (([] as Set) + generatedDirs(project)) ) } "'(jdee-global-classpath" { "'(" ( ["${project.buildDir}/intermediates/classes/debug", "${project.buildDir}/intermediates/classes/test/debug"] + android.getBootClasspath() + configurations.archives.allArtifacts.getFiles() + project.compileDebugJavaWithJavac.destinationDir + project.compileReleaseJavaWithJavac.destinationDir + (([] as Set) + project.configurations.compile.getFiles() + project.configurations.testCompile.getFiles() + getImplementation(project) + jarFiles(project) )) } } } projects { task("jdee") { doLast { def output = new File(project.projectDir, "prj.el").newPrintWriter() output.print ';;\n' output.print ';; This is a generated file.\n' output.print ';; To recreate, run "`gradlew jdee` or `gradlew assemble jdee`".\n' output.print ';;\n' try { prj.delegate = new NodeBuilder() { def lev = 0 def write = { Object file -> output.print '\n' + ''.padRight(lev, ' ') + "\"${file}\"".tr('\\', '/') } Object createNode(Object name) { output.print '\n' + ''.padRight(lev++, ' ') + name return name } Object createNode(Object name, Object value) { createNode(name) value.each write return name } void nodeCompleted(Object parent, Object child) { output.print ")" lev-- } } prj(project) output.close() } finally { output.flush() } } } }