xref: /aosp_15_r20/external/kotlinx.coroutines/ui/kotlinx-coroutines-android/build.gradle.kts (revision 7a7160fed73afa6648ef8aa100d4a336fe921d9a)

<lambda>null1 configurations {
2     create("r8")
3 }
4 
<lambda>null5 repositories {
6     mavenCentral()
7 }
8 
9 project.configureAar()
10 
<lambda>null11 dependencies {
12     configureAarUnpacking()
13 
14     compileOnly("com.google.android:android:${version("android")}")
15     compileOnly("androidx.annotation:annotation:${version("androidx_annotation")}")
16 
17     testImplementation("com.google.android:android:${version("android")}")
18     testImplementation("org.robolectric:robolectric:${version("robolectric")}")
19     // Required by robolectric
20     testImplementation("androidx.test:core:1.2.0")
21     testImplementation("androidx.test:monitor:1.2.0")
22 
23 
24     testImplementation("org.smali:baksmali:${version("baksmali")}")
25     "r8"("com.android.tools.build:builder:8.1.0")
26 }
27 
28 val optimizedDexDir = layout.buildDirectory.dir("dex-optim/")
29 val unOptimizedDexDir = layout.buildDirectory.dir("dex-unoptim/")
30 
<lambda>null31 val optimizedDexFile = optimizedDexDir.map { it.dir("classes.dex") } .get().asFile
<lambda>null32 val unOptimizedDexFile = unOptimizedDexDir.map { it.dir("classes.dex") }.get().asFile
33 
<lambda>null34 val runR8 by tasks.registering(RunR8::class) {
35     outputDex = optimizedDexDir.get().asFile
36     inputConfig = file("testdata/r8-test-rules.pro")
37 
38     dependsOn("jar")
39 }
40 
<lambda>null41 val runR8NoOptim by tasks.registering(RunR8::class) {
42     outputDex = unOptimizedDexDir.get().asFile
43     inputConfig = file("testdata/r8-test-rules-no-optim.pro")
44 
45     dependsOn("jar")
46 }
47 
<lambda>null48 tasks.test {
49     // Ensure the R8-processed dex is built and supply its path as a property to the test.
50     dependsOn(runR8)
51     dependsOn(runR8NoOptim)
52 
53     inputs.files(optimizedDexFile, unOptimizedDexFile)
54 
55     systemProperty("dexPath", optimizedDexFile.absolutePath)
56     systemProperty("noOptimDexPath", unOptimizedDexFile.absolutePath)
57 
58     // Output custom metric with the size of the optimized dex
59     doLast {
60         println("##teamcity[buildStatisticValue key='optimizedDexSize' value='${optimizedDexFile.length()}']")
61     }
62 }
63 
64 externalDocumentationLink(
65     url = "https://developer.android.com/reference/"
66 )
67 /*
68  * Task used by our ui/android tests to test minification results and keep track of size of the binary.
69  */
70 open class RunR8 : JavaExec() {
71 
72     @OutputDirectory
73     lateinit var outputDex: File
74 
75     @InputFile
76     lateinit var inputConfig: File
77 
78     @InputFile
79     val inputConfigCommon: File = File("testdata/r8-test-common.pro")
80 
81     @InputFiles
82     val jarFile: File = project.tasks.named<Zip>("jar").get().archiveFile.get().asFile
83 
84     init {
85         classpath = project.configurations["r8"]
86         mainClass = "com.android.tools.r8.R8"
87     }
88 
execnull89     override fun exec() {
90         // Resolve classpath only during execution
91         val arguments = mutableListOf(
92             "--release",
93             "--no-desugaring",
94             "--min-api", "26",
95             "--output", outputDex.absolutePath,
96             "--pg-conf", inputConfig.absolutePath
97         )
98         arguments.addAll(project.configurations["runtimeClasspath"].files.map { it.absolutePath })
99         arguments.add(jarFile.absolutePath)
100 
101         args = arguments
102 
103         project.delete(outputDex)
104         outputDex.mkdirs()
105 
106         super.exec()
107     }
108 }
109