Der Stick wird vom gesteuerten Geraet zum Gespraechspartner: - VoiceSession: Mikro -> stt_stream_start/stt_audio_chunk(pcm,16k mono s16le, 6400B)/stt_stream_end (exakt das App-Protokoll, keine Server-Aenderung noetig); Antwort via chat(sender=aria) + audio_pcm(base64, 24k) in AudioTrack. AEC/NS an. TURN-OWNERSHIP: der RVS broadcastet an alle — es wird nur ausgegeben, was aus der EIGENEN Frage entstand (audioRequestId -> messageId), sonst reden Handy und Stick gleichzeitig. - OverlayView: TYPE_APPLICATION_OVERLAY, Einblendung ueber dem laufenden Bild (Text + optional Bild), nicht fokussierbar (Fernbedienung bleibt frei). - Speaker: ARIAs echte Stimme (fertiges Audio) bevorzugt, Geraete-TTS als Fallback, Lautstaerke-Steuerung. - Neue Aktionen: notify (Einblendung/Sprache, mode ueberschreibbar), speak, volume, listen/listen_stop. - Einstellung replyMode (overlay|speech) in der App, pro Anfrage ueberschreibbar. - Sprech-Taste in der UI (Fire TV: OK-Taste) + Mikro-/Overlay-Berechtigungen. Version 0.0.1.0. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
58 lines
1.7 KiB
Groovy
58 lines
1.7 KiB
Groovy
plugins {
|
|
id 'com.android.application'
|
|
id 'org.jetbrains.kotlin.android'
|
|
}
|
|
|
|
android {
|
|
namespace 'de.hackersoft.ariaagent'
|
|
compileSdk 34
|
|
|
|
defaultConfig {
|
|
applicationId 'de.hackersoft.ariaagent'
|
|
minSdk 26
|
|
targetSdk 33 // 33 vermeidet die Foreground-Service-Typ-Pflicht von 34
|
|
versionCode 10
|
|
versionName '0.0.1.0'
|
|
}
|
|
|
|
// Fester Signaturschlüssel: jeder Build signiert mit DEMSELBEN Key, damit
|
|
// Android neue APKs als Update derselben App akzeptiert (sonst "Konflikt mit
|
|
// bestehendem Paket"). Die Keystore-Datei liegt NUR lokal (gitignored, nicht
|
|
// im oeffentlichen Repo) — UNBEDINGT sichern, sonst brechen kuenftige Updates.
|
|
def ariaKeystore = rootProject.file('aria-agent.keystore')
|
|
signingConfigs {
|
|
aria {
|
|
if (ariaKeystore.exists()) {
|
|
storeFile ariaKeystore
|
|
storePassword 'ariaagent'
|
|
keyAlias 'aria'
|
|
keyPassword 'ariaagent'
|
|
}
|
|
}
|
|
}
|
|
|
|
buildTypes {
|
|
debug {
|
|
if (ariaKeystore.exists()) signingConfig signingConfigs.aria
|
|
}
|
|
release {
|
|
minifyEnabled false
|
|
if (ariaKeystore.exists()) signingConfig signingConfigs.aria
|
|
}
|
|
}
|
|
compileOptions {
|
|
sourceCompatibility JavaVersion.VERSION_17
|
|
targetCompatibility JavaVersion.VERSION_17
|
|
}
|
|
kotlinOptions {
|
|
jvmTarget = '17'
|
|
}
|
|
}
|
|
|
|
dependencies {
|
|
implementation 'androidx.core:core-ktx:1.12.0'
|
|
implementation 'androidx.appcompat:appcompat:1.6.1'
|
|
implementation 'com.squareup.okhttp3:okhttp:4.12.0' // RVS-WebSocket
|
|
implementation 'com.journeyapps:zxing-android-embedded:4.3.0' // QR-Scan (FOSS, kein Google-Dienst)
|
|
}
|