diff --git a/ui/kotlinx-coroutines-android/build.gradle b/ui/kotlinx-coroutines-android/build.gradle deleted file mode 100644 index 6f66e6c5d9..0000000000 --- a/ui/kotlinx-coroutines-android/build.gradle +++ /dev/null @@ -1,106 +0,0 @@ -/* - * Copyright 2016-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license. - */ - -repositories { - google() -} - -configurations { - r8 -} - -dependencies { - compileOnly "com.google.android:android:$android_version" - compileOnly "androidx.annotation:annotation:$androidx_annotation_version" - - testImplementation "com.google.android:android:$android_version" - testImplementation "org.robolectric:robolectric:$robolectric_version" - testImplementation "org.smali:baksmali:$baksmali_version" - - r8 'com.android.tools.build:builder:4.0.0-alpha06' // Contains r8-2.0.4-dev -} - -class RunR8Task extends JavaExec { - - @OutputDirectory - File outputDex - - @InputFile - File inputConfig - - @InputFile - final File inputConfigCommon = new File('testdata/r8-test-common.pro') - - @InputFiles - final File jarFile = project.jar.archivePath - - @Override - Task configure(Closure closure) { - super.configure(closure) - classpath = project.configurations.r8 - main = 'com.android.tools.r8.R8' - return this - } - - @Override - void exec() { - // Resolve classpath only during execution - def arguments = [ - '--release', - '--no-desugaring', - '--output', outputDex.absolutePath, - '--pg-conf', inputConfig.absolutePath - ] - arguments.addAll(project.configurations.runtimeClasspath.files.collect { it.absolutePath }) - arguments.addAll(jarFile.absolutePath) - - args = arguments - - if (outputDex.exists()) { - outputDex.deleteDir() - } - outputDex.mkdirs() - - super.exec() - } -} - -def optimizedDexDir = new File(buildDir, "dex-optim/") -def unOptimizedDexDir = new File(buildDir, "dex-unoptim/") - -def optimizedDexFile = new File(optimizedDexDir, "classes.dex") -def unOptimizedDexFile = new File(unOptimizedDexDir, "classes.dex") - -task runR8(type: RunR8Task, dependsOn: 'jar'){ - outputDex = optimizedDexDir - inputConfig = file('testdata/r8-test-rules.pro') -} - -task runR8NoOptim(type: RunR8Task, dependsOn: 'jar') { - outputDex = unOptimizedDexDir - inputConfig = file('testdata/r8-test-rules-no-optim.pro') -} - -test { - // Ensure the R8-processed dex is built and supply its path as a property to the test. - dependsOn(runR8) - dependsOn(runR8NoOptim) - - inputs.files(optimizedDexFile, unOptimizedDexFile) - - systemProperty 'dexPath', optimizedDexFile.absolutePath - systemProperty 'noOptimDexPath', unOptimizedDexFile.absolutePath - - // Output custom metric with the size of the optimized dex - doLast { - println("##teamcity[buildStatisticValue key='optimizedDexSize' value='${optimizedDexFile.length()}']") - } -} - -tasks.withType(dokka.getClass()) { - externalDocumentationLink { - url = new URL("https://developer.android.com/reference/") - packageListUrl = projectDir.toPath().resolve("package.list").toUri().toURL() - } -} diff --git a/ui/kotlinx-coroutines-android/build.gradle.kts b/ui/kotlinx-coroutines-android/build.gradle.kts new file mode 100644 index 0000000000..4be32fc5c6 --- /dev/null +++ b/ui/kotlinx-coroutines-android/build.gradle.kts @@ -0,0 +1,108 @@ +/* + * Copyright 2016-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license. + */ + +import org.jetbrains.dokka.DokkaConfiguration.ExternalDocumentationLink +import org.jetbrains.dokka.gradle.DokkaTask +import java.net.URL + +repositories { + google() +} + +configurations { + create("r8") +} + +dependencies { + compileOnly("com.google.android:android:${version("android")}") + compileOnly("androidx.annotation:annotation:${version("androidx_annotation")}") + + testImplementation("com.google.android:android:${version("android")}") + testImplementation("org.robolectric:robolectric:${version("robolectric")}") + testImplementation("org.smali:baksmali:${version("baksmali")}") + + "r8"("com.android.tools.build:builder:4.0.0-alpha06") // Contains r8-2.0.4-dev +} + +open class RunR8Task : JavaExec() { + + @OutputDirectory + lateinit var outputDex: File + + @InputFile + lateinit var inputConfig: File + + @InputFile + val inputConfigCommon: File = File("testdata/r8-test-common.pro") + + @InputFiles + val jarFile: File = project.tasks.named("jar").get().archivePath + + init { + classpath = project.configurations["r8"] + main = "com.android.tools.r8.R8" + } + + override fun exec() { + // Resolve classpath only during execution + val arguments = mutableListOf( + "--release", + "--no-desugaring", + "--output", outputDex.absolutePath, + "--pg-conf", inputConfig.absolutePath + ) + arguments.addAll(project.configurations.runtimeClasspath.files.map { it.absolutePath }) + arguments.add(jarFile.absolutePath) + + args = arguments + + project.delete(outputDex) + outputDex.mkdirs() + + super.exec() + } +} + +val optimizedDexDir = File(buildDir, "dex-optim/") +val unOptimizedDexDir = File(buildDir, "dex-unoptim/") + +val optimizedDexFile = File(optimizedDexDir, "classes.dex") +val unOptimizedDexFile = File(unOptimizedDexDir, "classes.dex") + +val runR8 = tasks.register("runR8") { + outputDex = optimizedDexDir + inputConfig = file("testdata/r8-test-rules.pro") + + dependsOn("jar") +} + +val runR8NoOptim = tasks.register("runR8NoOptim") { + outputDex = unOptimizedDexDir + inputConfig = file("testdata/r8-test-rules-no-optim.pro") + + dependsOn("jar") +} + +tasks.test { + // Ensure the R8-processed dex is built and supply its path as a property to the test. + dependsOn(runR8) + dependsOn(runR8NoOptim) + + inputs.files(optimizedDexFile, unOptimizedDexFile) + + systemProperty("dexPath", optimizedDexFile.absolutePath) + systemProperty("noOptimDexPath", unOptimizedDexFile.absolutePath) + + // Output custom metric with the size of the optimized dex + doLast { + println("##teamcity[buildStatisticValue key='optimizedDexSize' value='${optimizedDexFile.length()}']") + } +} + +tasks.withType().configureEach { + externalDocumentationLink(delegateClosureOf { + url = URL("https://developer.android.com/reference/") + packageListUrl = projectDir.toPath().resolve("package.list").toUri().toURL() + }) +}