A native Android companion app for L5RCM —
a play-at-the-table tool for players, not a character builder. It imports a character from
the desktop app's .l5r save files, downloads the matching datapacks from the official repository,
and shows a read-only character sheet with all derived values computed natively.
Character advancement is out of scope — the companion only reads the character.
- ✅ Import
.l5rvia the Storage Access Framework - ✅ Download datapacks from
OpenNingia/l5rcm-data-packs(GitHub releases), with host allow-list + zip-slip guard - ✅ Native re-implementation of the
.l5r+ datapack readers - ✅ Pure-Kotlin derivation engine (traits/rings/void, skills, schools/techniques, spells, insight, wounds, TN/RD, XP)
- ✅ Read-only sheet with the L5R manuscript design system (clan-accented theme)
- 🔜 Session state, dice roller, combat tracker — see the plan's Future phases
You need JDK 17 and the Android SDK (Platform 35 + Build-Tools 35). Gradle itself is not
required — the Gradle wrapper (gradlew) is committed and downloads the right version on first run.
1. JDK 17
winget install --id EclipseAdoptium.Temurin.17.JDK -eMake JDK 17 the active JDK (Gradle/AGP need it; if you also have an older JDK installed the SDK tools will fail with "Java version 17 or higher is required"):
$jdk17 = (Get-ChildItem "C:\Program Files\Eclipse Adoptium" -Directory |
Where-Object Name -like "jdk-17*" | Select-Object -First 1).FullName
setx JAVA_HOME "$jdk17" # persistent — reopen the terminal afterwards
$env:JAVA_HOME = $jdk17 # current session
$env:Path = "$jdk17\bin;$env:Path"
java -version # must print 17If the folder isn't found, locate
java.exewithGet-ChildItem "C:\Program Files" -Recurse -Filter java.exe -ErrorAction SilentlyContinue | Select FullNameand use the path up to (but not including)\bin\java.exeasJAVA_HOME.
2. Android SDK — choose one:
Option A — Android Studio (includes the SDK Manager + emulator):
winget install --id Google.AndroidStudio -eOn first launch, install SDK Platform 35, Build-Tools 35, and Platform-Tools via the wizard.
Option B — command-line tools only (headless builds, no IDE):
$sdk = "$env:LOCALAPPDATA\Android\Sdk"
Invoke-WebRequest -Uri "https://dl.google.com/android/repository/commandlinetools-win-11076708_latest.zip" `
-OutFile "$env:USERPROFILE\Downloads\cmdline-tools.zip"
Expand-Archive "$env:USERPROFILE\Downloads\cmdline-tools.zip" -DestinationPath "$sdk\cmdline-tools-tmp"
New-Item -ItemType Directory -Force "$sdk\cmdline-tools\latest" | Out-Null
Move-Item "$sdk\cmdline-tools-tmp\cmdline-tools\*" "$sdk\cmdline-tools\latest"
Remove-Item -Recurse -Force "$sdk\cmdline-tools-tmp"3. Environment + SDK components
setx ANDROID_HOME "$env:LOCALAPPDATA\Android\Sdk" # reopen the terminal afterwards
$env:ANDROID_HOME = "$env:LOCALAPPDATA\Android\Sdk" # current session
# install the components this project targets (compileSdk 35 / minSdk 26)
& "$env:ANDROID_HOME\cmdline-tools\latest\bin\sdkmanager.bat" "platform-tools" "platforms;android-35" "build-tools;35.0.0"
& "$env:ANDROID_HOME\cmdline-tools\latest\bin\sdkmanager.bat" --licensesGradle locates the SDK via
ANDROID_HOME. Alternatively create alocal.properties(git-ignored) withsdk.dir=C\:\\Users\\<you>\\AppData\\Local\\Android\\Sdk.
# JDK 17 (Homebrew example)
brew install temurin@17 android-commandlinetools
export ANDROID_HOME="$HOME/Library/Android/sdk" # or your SDK location
sdkmanager "platform-tools" "platforms;android-35" "build-tools;35.0.0"
sdkmanager --licenses(Or install Android Studio and let it manage the SDK.)
From the repo root:
./gradlew test # JVM unit tests (parsers + derivation engine) — no device needed
./gradlew assembleDebug # debug APK → app/build/outputs/apk/debug/On Windows use .\gradlew.bat test / .\gradlew.bat assembleDebug. The first run downloads the
Gradle distribution and dependencies (needs network).
CI (.github/workflows/ci.yml) runs both test and assembleDebug on every push and PR.
This app is a clean-room re-implementation against specs authored in the desktop repo
(../l5r-character-manager-3/docs/):
FILE_FORMAT_L5R.md— the.l5rJSON format and how to derive state fromadvans[]DATAPACK_FORMAT.md— datapack folder /manifest/<L5RCM>XML schemaL5R_UI_Design_System.md— design tokens ported into the Compose theme
See CLAUDE.md for the architecture, conventions, and documented v1 approximations.
See LICENSE.