Files
openclaw/apps/android/wear/build.gradle.kts
WhatsSkiLL 9dedacf577 fix(android): restore the complete Wear companion experience (#110130)
* fix(android): restore full Wear companion UI

* chore(android): sync native i18n inventory

* fix(android): negotiate Wear companion capabilities

* chore(android): sync generated Japanese localization

* fix(android): preserve Wear reply notification setup

Co-authored-by: JARVIS-Glasses <whatsskilll@gmail.com>

* fix(android): harden Wear conversation controls

Co-authored-by: JARVIS-Glasses <whatsskilll@gmail.com>

* fix(android): preserve Wear control context

Co-authored-by: JARVIS-Glasses <whatsskilll@gmail.com>

* fix(android): keep Wear sessions agent-scoped

Co-authored-by: JARVIS-Glasses <whatsskilll@gmail.com>

* fix(android): isolate Wear conversation context

Co-authored-by: JARVIS-Glasses <whatsskilll@gmail.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-18 00:03:45 +01:00

127 lines
3.8 KiB
Kotlin

import java.util.Properties
plugins {
alias(libs.plugins.android.application)
alias(libs.plugins.ktlint)
alias(libs.plugins.kotlin.compose)
alias(libs.plugins.kotlin.serialization)
}
val openClawAndroidVersionFile = rootProject.file("Config/Version.properties")
val openClawAndroidVersionProperties =
Properties().apply {
if (!openClawAndroidVersionFile.isFile) {
error("Missing Android version properties. Run `pnpm android:version:sync`.")
}
openClawAndroidVersionFile.inputStream().use(::load)
}
fun requireOpenClawAndroidVersionProperty(name: String): String =
openClawAndroidVersionProperties.getProperty(name)?.trim()?.takeIf { it.isNotEmpty() }
?: error("Missing $name in Config/Version.properties. Run `pnpm android:version:sync`.")
val openClawAndroidPhoneVersionCode = requireOpenClawAndroidVersionProperty("OPENCLAW_ANDROID_VERSION_CODE").toInt()
val openClawAndroidBuildNumber = openClawAndroidPhoneVersionCode % 100
check(openClawAndroidBuildNumber in 1..49) {
"Android build number must be 01 through 49; Wear reserves 51 through 99."
}
val openClawAndroidWearVersionCode = openClawAndroidPhoneVersionCode + 50
check(openClawAndroidWearVersionCode <= 2_100_000_000) { "Wear versionCode exceeds the Android platform maximum." }
// Data Layer delivery requires the phone and watch packages to share one certificate.
evaluationDependsOn(":app")
val phoneReleaseSigning =
project(":app")
.extensions
.getByType<com.android.build.api.dsl.ApplicationExtension>()
.signingConfigs
.findByName("release")
android {
namespace = "ai.openclaw.wear"
compileSdk = 37
defaultConfig {
// Data Layer traffic is scoped to matching package names and signatures.
applicationId = "ai.openclaw.app"
minSdk = 31
targetSdk = 36
versionCode = openClawAndroidWearVersionCode
versionName = requireOpenClawAndroidVersionProperty("OPENCLAW_ANDROID_VERSION_NAME")
}
buildTypes {
release {
if (phoneReleaseSigning != null) {
signingConfig = phoneReleaseSigning
}
isMinifyEnabled = true
isShrinkResources = true
proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")
}
}
buildFeatures {
compose = true
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
packaging {
resources {
excludes += "/META-INF/{AL2.0,LGPL2.1}"
}
}
lint {
lintConfig = rootProject.file("app/lint.xml")
warningsAsErrors = true
}
}
kotlin {
compilerOptions {
jvmTarget.set(org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17)
allWarningsAsErrors.set(true)
}
}
ktlint {
android.set(true)
ignoreFailures.set(false)
filter {
exclude("**/build/**")
}
}
dependencies {
val composeBom = platform(libs.androidx.compose.bom)
implementation(composeBom)
implementation(project(":wear-shared"))
implementation(libs.androidx.activity.compose)
implementation(libs.androidx.core.ktx)
implementation(libs.androidx.lifecycle.runtime.ktx)
implementation(libs.androidx.lifecycle.viewmodel.ktx)
implementation(libs.androidx.compose.ui)
implementation(libs.androidx.compose.ui.tooling.preview)
implementation(libs.androidx.wear.compose.foundation)
implementation(libs.androidx.wear.compose.material3)
implementation(libs.androidx.wear.input)
implementation(libs.androidx.wear.tiles)
implementation(libs.androidx.wear.protolayout)
implementation(libs.androidx.wear.protolayout.material)
implementation(libs.kotlinx.coroutines.android)
implementation(libs.kotlinx.serialization.json)
implementation(libs.play.services.wearable)
debugImplementation(libs.androidx.compose.ui.tooling)
testImplementation(libs.junit)
testImplementation(libs.kotlinx.coroutines.test)
testImplementation(libs.robolectric)
}