-
Notifications
You must be signed in to change notification settings - Fork 2
Building from source
- JDK 17 (any distribution; OpenJDK works).
- Android SDK 37 (compileSdk; targetSdk 35; minSdk 26).
-
Gradle 9.6.1 — the wrapper is checked in, just
./gradlew. - No NDK needed — VoxSherpa-TTS ships as an AAR with prebuilt natives.
git clone https://github.com/techempower-org/candela.git
cd candela
./gradlew :app:assembleDebugThe signed debug APK lands at app/build/outputs/apk/debug/app-debug.apk.
Thirty-eight Gradle modules: :app, :feature, six :core-* modules (core-data, core-llm, core-playback, core-plugin-ksp, core-sync, core-ui), :wear, :baselineprofile, and 28 :source-* modules — 25 implementing FictionSource plus :source-azure (cloud-voice backend), :source-epub-writer, and :source-audiobook-writer (export writers). The full auto-generated list is on the Modules page; see Architecture.
./gradlew :app:testDebugUnitTest :feature:testDebugUnitTestJVM unit tests only; Robolectric pulls in Android resources for the few tests that need android.net.Uri. No instrumented tests in CI today (real-tablet QA covers integration).
adb install -r app/build/outputs/apk/debug/app-debug.apk
adb shell monkey -p org.techempower.candela -c android.intent.category.LAUNCHER 1The debug keystore is committed (app/storyvox-debug.keystore, password "android"). Every build uses this cert so sideload upgrades land cleanly. Pre-release distribution is sideload-only via GitHub Releases — the security trade-off is documented in app/build.gradle.kts.
For Play Store distribution, swap to a CI-secret-stored release keystore; tracked at #16.
.github/workflows/android.yml builds the debug APK on every main push and on every tag. Tagged releases attach the APK to the GitHub release. The Build APK check is the only required merge gate; CodeRabbit, DeepSource, and Gemini run on PRs as advisory reviewers.
app/build.gradle.kts injects the git hash, branch, dirty flag, and last-commit timestamp into BuildConfig via providers.exec (configuration-cache compatible). Settings → About reads these to render the realm sigil.
No runtime config files. All preferences live in DataStore (storyvox_settings.preferences_pb). The first run hydrates with hard-coded defaults; everything is editable via Settings.
Start here
Using Candela
- Fiction sources
- Reading & library
- Export & extras
- Voices
- Voice catalog
- AI chat
- Cloud sync
- Accessibility
- Settings reference
- Troubleshooting
Developer
Project