Android app that turns text into sound. Import local books, browse a cloud store, read with a customizable reader, and listen with system TTS or offline voice packs.
Package: com.yishenghuang.heartext
Min SDK: 26 · Target SDK: 36
Privacy: heartext-privacy.netlify.app
- Library — import EPUB, TXT, and PDF; filter by reading / store / local
- Store — browse, search, and download catalog books (signed in)
- Reader — typography, themes, page-turn styles, bookmarks, search
- Listen — system TTS or offline neural voice packs; lock-screen / headset controls
- Sync — cloud reading progress when signed in (Clerk)
- i18n — English, 中文, Français, Español (or follow system)
- Kotlin · Jetpack Compose · Navigation · Room
- Readium (EPUB / PDF)
- Media3 media session for playback
- Clerk for auth
- Firebase Crashlytics (optional)
- sherpa-onnx AAR for offline TTS (downloaded on first build)
- Android Studio (recent stable) with JDK 17
- Android SDK matching
compileSdk37
cp local.properties.example local.propertiesEdit local.properties:
| Key | Required | Notes |
|---|---|---|
CLERK_PUBLISHABLE_KEY |
For login / sync / store | From your Clerk dashboard |
HEARTEXT_API_BASE_URL |
No | Defaults to https://heartext.677000.xyz |
HEARTEXT_STORE_FILE / passwords / alias |
For signed release | Paths relative to project root; see example file |
Do not commit local.properties, keystores, or app/google-services.json.
Place app/google-services.json from the Firebase Console (Android app id com.yishenghuang.heartext). Without it, the project still builds; Crashlytics plugins are skipped.
./gradlew :app:assembleDebug
# or open the project in Android Studio and RunFirst build downloads sherpa-onnx into app/libs/ via the downloadSherpaAar task.
Set the HEARTEXT_* signing properties in local.properties, keep the keystore under keystore/ (gitignored), then:
./gradlew :app:assembleReleaseStore listing icons and screenshots live under play/. Regenerators:
python tools/process_brand_assets.py
python tools/make_play_promos.py
python tools/make_feature_graphic.pyPrivate / all rights reserved unless otherwise stated.