blob: 9cec1dc9f0954c22fa69ed931a47f7be06e6c980 [file] [log] [blame]
/*
* Copyright 2016-2021 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
*/
configurations {
create("r8")
}
repositories {
mavenCentral()
jcenter() // https://youtrack.jetbrains.com/issue/IDEA-261387
}
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:7.1.0-alpha01")
}
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 by tasks.registering(RunR8::class) {
outputDex = optimizedDexDir
inputConfig = file("testdata/r8-test-rules.pro")
dependsOn("jar")
}
val runR8NoOptim by tasks.registering(RunR8::class) {
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()}']")
}
}
externalDocumentationLink(
url = "https://developer.android.com/reference/"
)
/*
* Task used by our ui/android tests to test minification results and keep track of size of the binary.
*/
open class RunR8 : 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<Zip>("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",
"--min-api", "26",
"--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()
}
}