Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
54 changes: 37 additions & 17 deletions wear/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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)
Expand All @@ -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<Copy>("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<Copy>("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<ProcessFilesTask>("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"])
}
Expand All @@ -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
Expand All @@ -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()
Expand Down Expand Up @@ -189,4 +209,4 @@ abstract class ProcessFilesTask : DefaultTask() {
)
}
}
}
}