Add Samsung proprietary Face Widget (lock screen/AOD) with terminal status display. Add voice interaction services (AgentVoiceInteractionService, RecognitionService) for digital assistant registration. Add PiP mode with voice/expand actions. Add session-state proxy, voice transcript routes, window controls component. Ignore installers/ directory.
126 lines
4.6 KiB
Plaintext
126 lines
4.6 KiB
Plaintext
import java.util.Properties
|
|
|
|
plugins {
|
|
id("com.android.application")
|
|
id("org.jetbrains.kotlin.android")
|
|
id("rust")
|
|
}
|
|
|
|
val tauriProperties = Properties().apply {
|
|
val propFile = file("tauri.properties")
|
|
if (propFile.exists()) {
|
|
propFile.inputStream().use { load(it) }
|
|
}
|
|
}
|
|
|
|
android {
|
|
signingConfigs {
|
|
create("release") {
|
|
storeFile = file("../keystore.jks")
|
|
storePassword = "agentui123"
|
|
keyAlias = "agentui"
|
|
keyPassword = "agentui123"
|
|
}
|
|
}
|
|
compileSdk = 36
|
|
namespace = "com.agentui.desktop"
|
|
defaultConfig {
|
|
manifestPlaceholders["usesCleartextTraffic"] = "false"
|
|
applicationId = "com.agentui.desktop"
|
|
minSdk = 24
|
|
targetSdk = 36
|
|
versionCode = tauriProperties.getProperty("tauri.android.versionCode", "1").toInt()
|
|
versionName = tauriProperties.getProperty("tauri.android.versionName", "1.0")
|
|
}
|
|
buildTypes {
|
|
getByName("debug") {
|
|
manifestPlaceholders["usesCleartextTraffic"] = "true"
|
|
isDebuggable = true
|
|
isJniDebuggable = true
|
|
isMinifyEnabled = false
|
|
packaging { jniLibs.keepDebugSymbols.add("*/arm64-v8a/*.so")
|
|
jniLibs.keepDebugSymbols.add("*/armeabi-v7a/*.so")
|
|
jniLibs.keepDebugSymbols.add("*/x86/*.so")
|
|
jniLibs.keepDebugSymbols.add("*/x86_64/*.so")
|
|
}
|
|
}
|
|
getByName("release") {
|
|
manifestPlaceholders["usesCleartextTraffic"] = "true"
|
|
signingConfig = signingConfigs.getByName("release")
|
|
isMinifyEnabled = false
|
|
proguardFiles(
|
|
*fileTree(".") { include("**/*.pro") }
|
|
.plus(getDefaultProguardFile("proguard-android-optimize.txt"))
|
|
.toList().toTypedArray()
|
|
)
|
|
}
|
|
}
|
|
kotlinOptions {
|
|
jvmTarget = "1.8"
|
|
}
|
|
buildFeatures {
|
|
buildConfig = true
|
|
}
|
|
}
|
|
|
|
rust {
|
|
rootDirRel = "../../../../"
|
|
}
|
|
|
|
dependencies {
|
|
implementation("androidx.webkit:webkit:1.14.0")
|
|
implementation("androidx.appcompat:appcompat:1.7.1")
|
|
implementation("androidx.activity:activity-ktx:1.10.1")
|
|
implementation("com.google.android.material:material:1.12.0")
|
|
implementation("androidx.work:work-runtime-ktx:2.9.0")
|
|
implementation("com.squareup.okhttp3:okhttp:4.12.0")
|
|
testImplementation("junit:junit:4.13.2")
|
|
androidTestImplementation("androidx.test.ext:junit:1.1.4")
|
|
androidTestImplementation("androidx.test.espresso:espresso-core:3.5.0")
|
|
}
|
|
|
|
apply(from = "tauri.build.gradle.kts")
|
|
|
|
// Copy APK after build: local installers/ + network backup
|
|
// Only the universal signed variant gets copied as agent-ui.apk
|
|
android.applicationVariants.all {
|
|
val variant = this
|
|
variant.outputs.all {
|
|
val output = this
|
|
variant.assembleProvider.get().doLast {
|
|
val src = output.outputFile
|
|
if (src.exists()) {
|
|
val localDir = file("../../../../installers")
|
|
localDir.mkdirs()
|
|
|
|
// Always save versioned copy per variant
|
|
val localVersioned = File(localDir, "AgentUI-${variant.versionName}-${variant.name}.apk")
|
|
src.copyTo(localVersioned, overwrite = true)
|
|
println(">> Copied APK to ${localVersioned.absolutePath}")
|
|
|
|
// agent-ui.apk = only the universal signed build
|
|
val isUniversal = variant.name.contains("universal", ignoreCase = true)
|
|
val isSigned = variant.signingConfig != null
|
|
if (isUniversal && isSigned) {
|
|
val localFixed = File(localDir, "agent-ui.apk")
|
|
src.copyTo(localFixed, overwrite = true)
|
|
println(">> Copied universal signed APK to ${localFixed.absolutePath}")
|
|
|
|
// Network backup
|
|
val networkDir = File("\\\\Memoria-1\\ActiveBackupforBusiness\\Nucleo v3\\agent-ui-apk")
|
|
try {
|
|
if (networkDir.exists() || networkDir.mkdirs()) {
|
|
val networkFile = File(networkDir, "agent-ui.apk")
|
|
src.copyTo(networkFile, overwrite = true)
|
|
println(">> Copied APK to network: ${networkFile.absolutePath}")
|
|
} else {
|
|
println(">> WARNING: Network path not available: $networkDir")
|
|
}
|
|
} catch (e: Exception) {
|
|
println(">> WARNING: Failed to copy to network: ${e.message}")
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} |