description = """\ Smack for Android. All the required dependencies to run Smack on Android. Usually you want to add additional dependencies to smack-tcp, smack-extensions and smack-experimental.""" ext { smackMinAndroidSdk = 8 androidProjects = [':smack-tcp',':smack-core', ':smack-resolver-minidns', ':smack-sasl-provided', ':smack-extensions', ':smack-experimental'].collect{ project(it) } } // Note that the test dependencies (junit, …) are inferred from the // sourceSet.test of the core subproject dependencies { // Filter out the optional Smack dependencies from androidProjects androidProjects.findAll { ![':smack-tcp', ':smack-extensions', ':smack-experimental'].contains(it.getPath()) }.each { project -> compile project } } def getAndroidRuntimeJar() { def androidHome = new File("$System.env.ANDROID_HOME") if (!androidHome.isDirectory()) throw new Exception("ANDROID_HOME not found or set") def androidJar = new File("$androidHome/platforms/android-$smackMinAndroidSdk/android.jar") if (androidJar.isFile()) { return androidJar } else { throw new Exception("Can't find android.jar for $smackMinAndroidSdk API. Please install corresponding SDK platform package") } } def getAndroidJavadocOffline() { def androidHome = new File("$System.env.ANDROID_HOME") if (!androidHome.isDirectory()) throw new Exception("ANDROID_HOME not found or set") return "$System.env.ANDROID_HOME" + "/docs/reference" } compileJava { options.bootClasspath = getAndroidRuntimeJar() } // See http://stackoverflow.com/a/2823592/194894 // TODO this doesn't seem to work right now. But on the other hand it // is not really required, just to avoid a javadoc compiler warning javadoc { options.linksOffline "http://developer.android.com/reference", getAndroidJavadocOffline() } configure (androidProjects) { task compileAndroid(type: JavaCompile) { source = compileJava.source classpath = compileJava.classpath destinationDir = new File(buildDir, 'android') options.bootClasspath = getAndroidRuntimeJar() } } test { dependsOn androidProjects*.compileAndroid }