/* * Copyright 2016-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license. */ repositories { google() // TODO Remove once R8 is updated to a 1.6.x version. maven { url "http://storage.googleapis.com/r8-releases/raw/master" metadataSources { artifact() } } } configurations { r8 } dependencies { compileOnly 'com.google.android:android:4.1.1.4' compileOnly 'com.android.support:support-annotations:26.1.0' testImplementation 'com.google.android:android:4.1.1.4' testImplementation 'org.robolectric:robolectric:4.0-alpha-3' testImplementation 'org.smali:baksmali:2.2.7' // TODO Replace with a 1.6.x version once released to maven.google.com. r8 'com.android.tools:r8:a7ce65837bec81c62261bf0adac73d9c09d32af2' } class RunR8Task extends JavaExec { @OutputDirectory File outputDex @InputFile File inputConfig @InputFile final File inputConfigCommon = new File('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' 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 return this } @Override void exec() { if (outputDex.exists()) { outputDex.deleteDir() } outputDex.mkdirs() super.exec() } } def optimizedDex = new File(buildDir, "dex-optim/") def unOptimizedDex = new File(buildDir, "dex-unoptim/") task runR8(type: RunR8Task, dependsOn: 'jar'){ outputDex = optimizedDex inputConfig = file('r8-test-rules.pro') } task runR8NoOptim(type: RunR8Task, dependsOn: 'jar'){ outputDex = unOptimizedDex inputConfig = file('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) def dex1 = new File(optimizedDex, "classes.dex") def dex2 = new File(unOptimizedDex, "classes.dex") inputs.files(dex1, dex2) systemProperty 'dexPath', dex1.absolutePath systemProperty 'noOptimDexPath', dex2.absolutePath } tasks.withType(dokka.getClass()) { externalDocumentationLink { url = new URL("https://developer.android.com/reference/") packageListUrl = projectDir.toPath().resolve("package.list").toUri().toURL() } }