| .. | ||
| app | ||
| gradle/wrapper | ||
| .gitignore | ||
| build.gradle.kts | ||
| gradle.properties | ||
| gradlew | ||
| gradlew.bat | ||
| README.md | ||
| settings.gradle.kts | ||
Trainlog Android
Current status
ANDROID_SCAFFOLD=IMPLEMENTED
ANDROID_THEME_PARITY=IMPLEMENTED
ANDROID_HOME=IMPLEMENTED
ANDROID_SESSION_SHELL=IMPLEMENTED
ANDROID_INLINE_EXERCISE_ROUTE=IMPLEMENTED
ANDROID_EXERCISE_SHELL=IMPLEMENTED
ANDROID_BODY_SHELL=IMPLEMENTED
LOCAL_PERSISTENCE=NEXT
MTP_SYNC=AFTER_LOCAL_WORKFLOW
Visual contract
The application follows the same Trainlog language as the TUI:
dark background
monospace typography
cyan/teal accent
yellow active frame
green success
red error
blue muted/navigation
magenta graph role
The launcher icon is only a themed T.
Navigation
Accueil
├── Enregistrer une séance
│ └── Créer un nouvel exercice
│ └── retour séance
├── Enregistrer un exercice
└── Enregistrer des mensurations
Exercise contract
Android must consume the same model as the desktop application:
recording_mode
tracking_mode
data_fields
No exercise input form may be inferred from its name.
Toolchain
AGP 9.4.0
Gradle 9.6
Kotlin 2.3.21
Compose BOM 2026.08.00
compileSdk 37
targetSdk 36
minSdk 26
JDK 17
A Gradle wrapper is intentionally not committed by the scaffold script unless it can be generated locally. From this directory:
gradle wrapper --gradle-version 9.6.0
./gradlew assembleDebug