hzz docs build-environment.md
2.6 kB · 53 lines
Markdown
at main

Build environment #

Recorded at project bootstrap. These choices are part of the implementation contract after bootstrap; they are not silently upgraded during implementation (see gradle/libs.versions.toml for the pinned versions).

Item Value
JDK Temurin 17.0.16+8 (via mise; scripts/setup-android-sdk.sh / scripts/setup-gradle.sh bootstrap the toolchain)
Gradle 8.10.2 (wrapper ./gradlew)
Android Gradle Plugin 8.6.1
Kotlin 2.0.21 (KSP 2.0.21-1.0.28, compose plugin)
Compose BOM 2026.01.00 → Compose UI 1.10.1
Compose for TV tv-material 1.1.0
AndroidX lifecycle 2.9.4, core-ktx 1.16.0, activity-compose 1.9.2
Room 2.6.1 (KSP codegen)
DataStore 1.1.1
Media3 1.4.1
Ktor (server, CIO) 2.3.12
OkHttp 4.12.0
Hilt 2.52
kotlinx.serialization 1.7.3
kotlinx.coroutines 1.9.0
BouncyCastle 1.78.1 (Argon2id for backup encryption)
libtorrent4j 2.1.0-31 (libtorrent4j-android-arm ships lib/armeabi-v7a/libtorrent4j.so)
Android SDK platform 35, build-tools 34.0.0, platform-tools
compileSdk 35
targetSdk 34 (the Streamer runs Android 14 for TV = API 34)
minSdk 23 (TV Compose needs 21+; 23 keeps leanback-era devices possible)

Device build measured; remaining M0 acceptance pending #

The 2026-10-02 read-only capture measured Android 14 / SDK 34 on build UTTK.260317.003, with app ABIs armeabi-v7a,armeabi and no advertised 64-bit app ABI. This confirms the existing targetSdk 34 and ARMv7 native-packaging assumptions; no version pins were changed. CompileSdk 35 remains the dependency-driven choice above. M0 is still incomplete: DRM playback and reboot/reconnect acceptance were not performed.

Application identity #

  • Application ID: dev.hzz.streamer (chosen once at bootstrap).
  • Debug builds add the .debug suffix so they install beside a release build.
  • Release builds: armeabi-v7a only. Debug builds also only package armeabi-v7a today; when an Android TV emulator is used for UI tests, add emulator ABIs and keep native engines stubbed/guarded on load (engines detect a missing native library and report unavailable instead of crashing).

Signing #

Release signing is configured from an uncommitted keystore.properties (storeFile, storePassword, keyAlias, keyPassword). When absent, release builds fall back to the debug key so adb install -r works during development. Real releases must be signed with the held key (see CI notes in docs/decisions.md).