# moyin-android **Repository Path**: ftliang/moyin-android ## Basic Information - **Project Name**: moyin-android - **Description**: 墨隐 - 沉浸式小说阅读Android客户端,支持TTS语音朗读、Sherpa ONNX离线语音、Edge在线语音、Markdown渲染、书架管理 - **Primary Language**: Unknown - **License**: AGPL-3.0 - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-05-27 - **Last Updated**: 2026-06-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 墨隐(MoYin)Android 客户端 > 版本:0.1.2 | 更新:2026-06-28 面向 [moyin.write2.me](https://moyin.write2.me) 的**无登录、纯离线可用**匿名小说阅读器。 ## 核心特性 - **纯离线语音朗读**:sherpa-onnx 本地 TTS(60MB 中文模型)+ Google TTS 双引擎,无需联网即可朗读;章节切换不中断播放,双击段落切换朗读位置 - **加密本地存储**:SQLCipher AES-256 透明加密,Android Keystore 保护密钥 - **前后台无缝播放**:Foreground Service + MediaSession,通知栏控制,国产 ROM 电池优化引导 - **沉浸阅读体验**:三套终端风格主题 / 字体行距调节 / 翻页 + 滚动双模式 / Markdown 富文本渲染 - **离线缓存**:章节正文永久缓存,飞行模式下完整可用 - **本地书架**:收藏 / 分组 / 拖拽排序 / 下载状态标识 / 搜索 ## 技术栈 | 层次 | 选型 | |------|------| | 语言 | Kotlin 2.0.21 | | UI | Jetpack Compose + Material3 (BOM 2024.12.01) | | DI | Hilt 2.52 | | 数据库 | Room 2.6.1 + SQLCipher 4.5.4 | | 网络 | Retrofit 2.11.0 + kotlinx.serialization | | 图片 | Coil 3.0.4 | | 后台 | WorkManager 2.9.1 | | 离线 TTS | sherpa-onnx 1.13.2 (arm64-v8a) | | 测试 | JUnit4 + MockK + Room in-memory | ## 项目结构 ``` app/src/main/java/com/moyin/app/ ├── data/ # 数据层 │ ├── local/db/ # 6 个 DAO + Room + SQLCipher │ ├── local/entity/ # 5 个 Entity │ ├── remote/ # Retrofit API (公开 GET 接口) │ ├── repository/ # 5 个 Repository │ └── keystore/ # DatabaseKeyManager ├── service/ │ ├── TTSPlaybackService.kt # 前台 Service + MediaSession │ └── TtsEngineManager.kt # TTS 引擎管理 ├── tts/ │ └── SherpaOnnxTtsEngine.kt # sherpa-onnx 离线引擎 ├── ui/ │ ├── home/explore/detail/reader/bookshelf/settings/ │ ├── components/ # TerminalHeader + StateComponents │ ├── theme/ # 3 套终端风格主题 │ └── navigation/ # 底部四 Tab 导航 ├── worker/ │ ├── ChapterPreloadWorker.kt │ └── DownloadBookWorker.kt └── util/ └── BatteryOptimizationHelper.kt ``` ## 开发环境 - Android Studio (JDK 17) - Kotlin 2.0.21 + AGP 8.5.2 - Gradle 8.9 (wrapper) - Android SDK: `E:\\tools\\android-sdk` - 测试设备: Xiaomi 25042PN24C (Android 16, arm64-v8a) ## 构建 ```bash # Debug APK ./gradlew app:assembleDebug # Release APK (arm64-v8a only, ~110MB) ./gradlew app:assembleRelease # 运行单元测试 (58 个, 全部通过) ./gradlew app:testDebugUnitTest ``` ## 测试 | 测试文件 | 数量 | |----------|------| | RepositoryTest.kt | 25 | | HomeViewModelTest.kt | 4 | | ExploreViewModelTest.kt | 5 | | DaoTest.kt (Instrumented) | 17 | | ReaderViewModelTest.kt | 8 | | BookshelfViewModelTest.kt | 6 | | SherpaOnnxTtsEngineTest.kt | 10 | | **合计** | **58 ✅** | ## 开发计划 详见 [`docs/dev-plan.md`](docs/dev-plan.md) ## 许可证 [GNU Affero General Public License v3.0](https://www.gnu.org/licenses/agpl-3.0.html)