Skip to the content.

26.10.06 14:18

Technology Stack

Technical specification Architecture Requirements Build and verification

This reference describes the checked-in build configuration, not a guarantee that every variant has a published download. For installable packages, use the product download section or GitHub Releases.

Version sources of truth

The pins below are maintained by scripts/quality/generate-toolchain-pins.ps1; they are not a second manually maintained version table.

Build system

Component Declared version or setting
Gradle wrapper 9.4.1
Android Gradle Plugin 9.2.1
Kotlin and Compose compiler plugin 2.2.10
KSP 2.3.8
Hilt plugin 2.59
Chaquopy plugin 17.0.0
Java bytecode target for phone and Wear 17
Java used by Android CI 21

Java used to run Gradle and Java bytecode emitted for the app are different settings. Dependency processing uses KSP; a plugin declaration at the root alone does not mean a module applies it.

Modules and packaging

Module Purpose UI or implementation
app_v2 Android phone, tablet, TV, automotive and headset variants XML layouts and ViewBinding; some existing Compose surfaces
wear Wear OS application and phone integration Jetpack Compose
watchface Separate Watch Face Format v4 package Resource-only XML; no Kotlin or Java runtime code
lint-rules Project-specific Android lint checks Build-time tooling
benchmark Benchmark and baseline-profile tooling Test tooling, not the normal user application

The wear namespace is com.sza.fastmediasorter.wear, but its application ID is com.sza.fastmediasorter, matching the phone application. Phone/watch Data Layer pairing also depends on matching signing identity. The watch face has its own application ID, com.sza.fastmediasorter.watchface.

The included Gradle modules are defined in settings.gradle.kts. A repository directory does not automatically become a Gradle module.

Platform baseline

Variant matrix

The phone build declares standard, noLegal, lite, photos, legacy, vr, xr and foss. Wear declares standard and noLegal. Phone build types are debug, staging and release; Wear uses debug and release.

For the authoritative capability-by-edition grid, read the generated flavor matrix. It is derived from the phone build’s capability flags. Do not infer support merely from a dependency being present, and do not infer public availability from a variant being declared.

Dependency highlights

The version catalog and module dependency blocks are the current inventory. Gradle resolves transitive dependencies; the dependency-scan workflow publishes SBOM artifacts and submits the dependency graph.

Storage and network constraints

Local storage, Android document-tree access, SMB, SFTP, FTP and cloud storage do not have identical permissions or mutation guarantees. Remote folder transfers can leave completed entries after cancellation; they are not a transactional whole-folder move. Cloud availability and service limits are controlled by the provider.

Internet streams may use progressive HTTP/ICY, HLS, DASH or RTSP when the edition includes the required playback stack. Cleartext HTTP streams are supported by the application, but are not encrypted transport. Playback still depends on the source, codec and device.

Build outputs

Phone APKs use app_v2/build/outputs/apk/<flavor>/<buildType>/; Wear APKs use wear/build/outputs/apk/<flavor>/<buildType>/. App bundles are under each module’s build/outputs/bundle/ directory. The watch face is packaged separately from Wear application logic.

APK size varies by edition, ABI, build type and release processing. Historical local debug sizes, source-line counts and effort estimates are not current installation requirements.