| /* |
| * 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() |
| } |
| } |