diff --git a/wear/build.gradle.kts b/wear/build.gradle.kts index 7d5c3971..a3df535a 100644 --- a/wear/build.gradle.kts +++ b/wear/build.gradle.kts @@ -15,8 +15,8 @@ */ import java.io.ByteArrayOutputStream import java.util.regex.Pattern - -evaluationDependsOn(":wear:watchface") +import org.gradle.api.attributes.Attribute +import com.android.build.api.attributes.BuildTypeAttr plugins { alias(libs.plugins.android.application) @@ -66,9 +66,28 @@ configurations { isCanBeConsumed = false isCanBeResolved = true } + + listOf("debug", "release").forEach { buildType -> + create("watchfaceApk${buildType.replaceFirstChar { it.uppercase() }}") { + isCanBeResolved = true + isCanBeConsumed = false + + attributes { + attribute( + Attribute.of(BuildTypeAttr::class.java), + objects.named(BuildTypeAttr::class.java, buildType) + ) + attribute(Attribute.of("artifactType", String::class.java), "apk") + } + } + } } dependencies { + configurations.matching { it.name.startsWith("watchfaceApk") }.all { + dependencies.add(project(":wear:watchface")) + } + implementation(projects.wear.common) implementation(platform(libs.androidx.compose.bom)) implementation(libs.androidx.wear.compose.foundation) @@ -92,30 +111,31 @@ dependencies { androidComponents.onVariants { variant -> val capsVariant = variant.name.replaceFirstChar { it.uppercase() } + val watchfaceApkConfig = configurations.getByName("watchfaceApk$capsVariant") - val copyTaskProvider = tasks.register("copyWatchface${capsVariant}Output") { - val wfTask = project(":wear:watchface").tasks.named("assemble$capsVariant") - dependsOn(wfTask) - val buildDir = project(":wear:watchface").layout.buildDirectory.asFileTree.matching { - include("**/${variant.name}/**/*.apk") - exclude("**/*androidTest*") + val copyWatchfaceApkTask = tasks.register("copyWatchface${capsVariant}ApkToAssets") { + from(watchfaceApkConfig) { + // the resolved directory contains apk and output-metadata.json + include("*.apk") } - from(buildDir) into(layout.buildDirectory.dir("intermediates/watchfaceAssets/${variant.name}")) - duplicatesStrategy = DuplicatesStrategy.EXCLUDE - eachFile { path = "default_watchface.apk" } + duplicatesStrategy = DuplicatesStrategy.EXCLUDE includeEmptyDirs = false } - val tokenTask = tasks.register("generateToken${capsVariant}Res") { val tokenFile = layout.buildDirectory.file("generated/wfTokenRes/${variant.name}/res/values/wf_token.xml") - inputFile.from(copyTaskProvider.map { it.outputs.files.singleFile }) + apkDirectory.set( + layout.dir( copyWatchfaceApkTask.map { + it.destinationDir + }) + ) + outputFile.set(tokenFile) cliToolClasspath.set(project.configurations["cliToolConfiguration"]) } @@ -128,8 +148,8 @@ androidComponents.onVariants { variant -> } abstract class ProcessFilesTask : DefaultTask() { - @get:InputFiles - abstract val inputFile: ConfigurableFileCollection + @get:InputDirectory + abstract val apkDirectory: DirectoryProperty @get:OutputFile abstract val outputFile: RegularFileProperty @@ -143,7 +163,7 @@ abstract class ProcessFilesTask : DefaultTask() { @TaskAction fun taskAction() { - val apkFile = inputFile.singleFile.resolve("default_watchface.apk") + val apkFile = apkDirectory.asFile.get().resolve("default_watchface.apk") val stdOut = ByteArrayOutputStream() val stdErr = ByteArrayOutputStream() @@ -189,4 +209,4 @@ abstract class ProcessFilesTask : DefaultTask() { ) } } -} \ No newline at end of file +}