1515 */
1616import java.io.ByteArrayOutputStream
1717import java.util.regex.Pattern
18-
19- evaluationDependsOn( " :wear:watchface " )
18+ import org.gradle.api.attributes.Attribute
19+ import com.android.build.api.attributes.BuildTypeAttr
2020
2121plugins {
2222 alias(libs.plugins.android.application)
@@ -66,9 +66,28 @@ configurations {
6666 isCanBeConsumed = false
6767 isCanBeResolved = true
6868 }
69+
70+ listOf (" debug" , " release" ).forEach { buildType ->
71+ create(" watchfaceApk${buildType.replaceFirstChar { it.uppercase() }} " ) {
72+ isCanBeResolved = true
73+ isCanBeConsumed = false
74+
75+ attributes {
76+ attribute(
77+ Attribute .of(BuildTypeAttr ::class .java),
78+ objects.named(BuildTypeAttr ::class .java, buildType)
79+ )
80+ attribute(Attribute .of(" artifactType" , String ::class .java), " apk" )
81+ }
82+ }
83+ }
6984}
7085
7186dependencies {
87+ configurations.matching { it.name.startsWith(" watchfaceApk" ) }.all {
88+ dependencies.add(project(" :wear:watchface" ))
89+ }
90+
7291 implementation(projects.wear.common)
7392 implementation(platform(libs.androidx.compose.bom))
7493 implementation(libs.androidx.wear.compose.foundation)
@@ -92,30 +111,31 @@ dependencies {
92111
93112androidComponents.onVariants { variant ->
94113 val capsVariant = variant.name.replaceFirstChar { it.uppercase() }
114+ val watchfaceApkConfig = configurations.getByName(" watchfaceApk$capsVariant " )
95115
96- val copyTaskProvider = tasks.register<Copy >(" copyWatchface${capsVariant} Output" ) {
97- val wfTask = project(" :wear:watchface" ).tasks.named(" assemble$capsVariant " )
98- dependsOn(wfTask)
99- val buildDir = project(" :wear:watchface" ).layout.buildDirectory.asFileTree.matching {
100- include(" **/${variant.name} /**/*.apk" )
101- exclude(" **/*androidTest*" )
116+ val copyWatchfaceApkTask = tasks.register<Copy >(" copyWatchface${capsVariant} ApkToAssets" ) {
117+ from(watchfaceApkConfig) {
118+ // the resolved directory contains apk and output-metadata.json
119+ include(" *.apk" )
102120 }
103- from(buildDir)
104121 into(layout.buildDirectory.dir(" intermediates/watchfaceAssets/${variant.name} " ))
105122
106- duplicatesStrategy = DuplicatesStrategy .EXCLUDE
107-
108123 eachFile {
109124 path = " default_watchface.apk"
110125 }
126+ duplicatesStrategy = DuplicatesStrategy .EXCLUDE
111127 includeEmptyDirs = false
112128 }
113-
114129 val tokenTask = tasks.register<ProcessFilesTask >(" generateToken${capsVariant} Res" ) {
115130 val tokenFile =
116131 layout.buildDirectory.file(" generated/wfTokenRes/${variant.name} /res/values/wf_token.xml" )
117132
118- inputFile.from(copyTaskProvider.map { it.outputs.files.singleFile })
133+ apkDirectory.set(
134+ layout.dir( copyWatchfaceApkTask.map {
135+ it.destinationDir
136+ })
137+ )
138+
119139 outputFile.set(tokenFile)
120140 cliToolClasspath.set(project.configurations[" cliToolConfiguration" ])
121141 }
@@ -128,8 +148,8 @@ androidComponents.onVariants { variant ->
128148}
129149
130150abstract class ProcessFilesTask : DefaultTask () {
131- @get:InputFiles
132- abstract val inputFile : ConfigurableFileCollection
151+ @get:InputDirectory
152+ abstract val apkDirectory : DirectoryProperty
133153
134154 @get:OutputFile
135155 abstract val outputFile: RegularFileProperty
@@ -143,7 +163,7 @@ abstract class ProcessFilesTask : DefaultTask() {
143163
144164 @TaskAction
145165 fun taskAction () {
146- val apkFile = inputFile.singleFile .resolve(" default_watchface.apk" )
166+ val apkFile = apkDirectory.asFile.get() .resolve(" default_watchface.apk" )
147167
148168 val stdOut = ByteArrayOutputStream ()
149169 val stdErr = ByteArrayOutputStream ()
@@ -189,4 +209,4 @@ abstract class ProcessFilesTask : DefaultTask() {
189209 )
190210 }
191211 }
192- }
212+ }
0 commit comments