Luma Reader 是一款面向 Android 的轻量多站点网络小说阅读器。它把 AsianFanfics、 PO18、海棠文学城和 Postype 放进同一套发现、搜索、书架与阅读界面,减少在多个网页 之间反复切换的成本,同时保留各站点原有的账号、权限和付费规则。
Luma 不镜像站点内容,也不提供批量抓取、整本下载或付费权限绕过。作品内容在用户 主动打开时从原站读取;登录、订阅、购买、充值和 Postype 翻译仍由原站最终确认。
当前版本:0.32.0 · 支持 Android 10 及以上
Postype 适配仍处于实验阶段,详见下方支持状态。
同一版本提供两个安装包:
- Luma Reader:通用公开版,包含四站点阅读、书架和同步功能;
- Luma H2H:在通用版基础上增加 Hearts2Hearts「亚网找文」。它使用独立包名, 可以与 Luma Reader 同时安装。
截图已裁去 Android 状态栏和导航栏;账号、余额、Cookie、Token 等私人信息不会出现在 仓库截图中。
四个内容站点的定位、页面结构和账号体系并不相同,但阅读过程中的核心动作高度一致: 找作品、查看详情与目录、收藏、记录进度、等待更新。Luma 为这些动作提供统一界面, 同时把必须由原站处理的登录和交易留在原站完成。
它尤其适合以下使用方式:
- 同时在多个站点阅读,希望用一个书架管理全部作品;
- 更喜欢原生阅读器的排版、连续滚动和进度恢复,而不是直接阅读网页;
- 在不同设备之间切换,需要同步收藏、分类和最近阅读;
- 希望收藏作品更新后收到 Android 通知;
- 只使用其中一两个站点,不希望界面一直显示无关入口。
Luma-Reader-vX.Y.Z-H2H.apk 面向需要 Hearts2Hearts 同人文索引的用户,接入
abouth2h.com 的公开数据:
- 按成员、CP 关系、左右位、无差、NP、梦向、单人向和三角关系筛选;群像、跨团与团向作品另有独立入口;
- 区分人工复核与机器识别结果,并直接在 Luma 中打开作品;
- 可以反馈属性有误、不应收录、遗漏作品或其他问题;
- 所有反馈只进入待审核队列,由维护者复核后再修改公开数据;
- 不包含 Pocket48 管理后台地址、会话、私人 API Token 或直接写入数据的权限;
- 内部待审核数据不会通过 H2H 公开 API 返回。
H2H 版的应用名为 Luma H2H,包名为 com.kmj.afflitereader.h2h。它与普通版
数据区相互独立,因此可以并存,也不会被普通版更新包误覆盖。
- 在同一个搜索页切换 AsianFanfics、PO18、海棠和 Postype;
- 支持站点可用范围内的作品名、作者和标签搜索;
- 对综合搜索、作者结果和作品结果进行结构化展示;
- 接入原站提供的榜单、分页、排序和筛选,避免只对当前一页做本地排序;
- 搜索历史按站点分别保存,点击搜索框即可快速再次搜索;
- 搜索结果统一展示封面、标题、作者、简介、标签、连载状态和收费状态等可获取信息;
- AsianFanfics 支持直接粘贴作品链接打开详情,适合从社交平台收到分享链接的场景。
站点没有提供的筛选或数据不会被伪造成“精确结果”。部分标签筛选需要 Luma 先读取 候选页面,因此速度和结果完整度仍受原站能力影响。
一个书架可以同时维护四个来源的作品,并提供:
- 收藏与最近阅读分栏:收藏用于长期管理,最近阅读用于快速继续;
- 自定义分类:新建自己的书架分类,收藏时选择归属;
- 来源筛选:按站点查看作品,没有收藏内容的来源会显示为不可选;
- 列表与封面布局:两种排版在收藏和最近阅读之间保持同步;
- 更新优先:检测到更新的作品自动排在前面,并显示醒目的更新标识;
- 来源标识:封面模式仍可辨认作品来自哪个站点;
- 文字封面兜底:原站未设置封面时,根据书名生成可辨认的文字封面;
- 阅读时间与章节进度:保留上次阅读章节、章内位置和上次阅读时间。
点击书架作品会优先回到上次实际阅读的位置,而不是强制经过详情页。
- 章节连续滚动,并预加载相邻章节;
- 支持向后继续阅读,也支持向前加载上一章;
- 目录抽屉可直接跳转到任意章节;
- 点击页面中央显示阅读控制栏,再次阅读时恢复沉浸状态;
- 可锁定沉浸模式,避免误触唤出顶栏和底栏;
- 支持滚动、点击翻页等阅读方式;
- 日间与夜间背景可分别配置,也可以跟随系统;
- 字体、字号、行距、段距和首行缩进可调整;
- 提供全局简繁体显示偏好,覆盖标题、检索列表和正文;
- 阅读页菜单可打开作品详情、作者专栏、原站页面,并可收藏或订阅文章;
- 对已解锁或刚完成订阅的章节,可刷新当前章并从章首重新载入。
阅读进度不仅记录“进入了哪一章”,还记录章内位置;滚动至章节末尾时会将完成状态 写回,降低短章节已经读完却仍停留在上一章的问题。
- 使用 Android System WebView 登录原站并保留各站点 Cookie;
- 登录助手可保存账号信息并辅助填写登录页面;
- Postype 邮箱登录仍需要用户手动完成邮箱验证码;
- 检测到登录态失效时给出提示;
- 每个站点都可以单独设置是否发送登录失效提醒;
- PO18 和海棠可在站点允许时读取余额,但充值仍跳转原站;
- 遇到付费或锁定章节时显示 Luma 自己的操作面板,不在后台静默扣费。
首次启动可以只启用自己需要的站点,之后可在设置中随时修改。发现页、搜索页、账号 列表和站点数量都会随启用状态变化。Postype 在选择界面中始终带有“实验性”标识。
Luma 账号独立于四个内容站点,用于在不同设备之间同步:
- 收藏书架;
- 自定义分类;
- 最近阅读;
- 章节与章内阅读位置;
- 客户端加密后的登录助手数据。
邮箱注册使用 8 位、10 分钟有效的验证码。服务端采用 SQLite 持久化、Argon2id 密码 哈希、短期访问令牌和轮换刷新令牌。客户端会自动同步,不要求每次阅读后手动点击; 临时网络故障不会立即清除本地会话,只有服务端明确判定刷新令牌失效时才退出。
站点 Cookie 不会上传到 Luma 云端。登录助手密码先由 Android Keystore 在本地保护, 同步前还会使用 Luma 密码派生密钥再次加密,服务端只保存密文。
Luma 使用 Android JobScheduler 周期检查收藏作品:
- 不要求 APP 一直常驻后台;
- 仅在网络可用时工作;
- 比较章节数量和原站更新时间;
- 检测到更新后,通过系统通知说明具体作品;
- 只检查已启用站点,并限制单轮检查数量,避免对原站造成集中请求;
- 收藏与最近阅读去重,最近阅读只取较近的一部分参与检查。
Android 的电量优化、网络状态和系统调度会影响执行时间,因此通知是周期性检查,不是 原站更新后的秒级推送。
Luma 可以在设置中检查新版本,并完成:
- 读取公开版本清单;
- 在 APP 内下载 APK;
- 校验文件大小和 SHA-256;
- 校验 APK 包名、版本号与签名;
- 交给 Android 系统显示最终安装确认。
更新器不会静默安装,也不会接受其他域名、其他签名或哈希不一致的安装包。
| 来源 | 搜索与榜单 | 详情、目录与正文 | 账号与付费 | 当前说明 |
|---|---|---|---|---|
| AsianFanfics | 支持 | 支持 | 登录、文章订阅 | 免费内容为主;支持原站范围与权限、完结状态识别 |
| PO18 | 支持 | 支持 | 登录、余额、原站解锁 | 免费作品与含付费章节作品分开展示;充值和购买由原站确认 |
| 海棠文学城 | 支持 | 支持 | 登录、余额、原站解锁 | 支持榜单、搜索、目录和正文解析;原站敏感词遮蔽可能原样保留 |
| Postype | 实验性 | 实验性 | 邮箱登录辅助、原站购买与翻译 | 优先请求原站已有的简体中文版本;无官方译文时保留韩文 |
Postype 的内容模型与传统“作品—目录—章节”结构不同,文章可能独立发布,也可能被作者 整理进系列或专栏。当前适配仍可能出现作者、标签、系列归属或章节关系识别不完整的情况。 Luma 不会绕过 Postype 的翻译积分、会员或付费限制,也不能保证每篇文章已有中文译文。
从 GitHub Releases 下载 APK:
Luma-Reader-vX.Y.Z.apk:普通公开版;Luma-Reader-vX.Y.Z-H2H.apk:带只读找文与反馈功能的 H2H 版。 首次安装时 Android 会要求确认来源;应用内更新同样会由系统显示安装确认。
当前最低系统版本为 Android 10(API 29)。安装覆盖新版时必须保持相同应用签名,否则 Android 会拒绝覆盖安装。
需要 JDK 17、Android SDK 34 和 Gradle 8.7;仓库已包含 Gradle Wrapper。
$env:ANDROID_HOME = "$env:LOCALAPPDATA\Android\Sdk"
.\gradlew.bat testDebugUnitTest assembleDebug构建可公开分发的 H2H 安装包:
.\gradlew.bat testH2hUnitTest assembleH2h复制 .env.example 为 .env.local,填写自己的服务地址。.env.local 不应提交:
LUMA_API_URL=https://example.com/api/luma/v1
LUMA_AFF_FINDER_API_URL=
LUMA_AFF_FINDER_API_TOKEN=LUMA_AFF_FINDER_API_URL 和 LUMA_AFF_FINDER_API_TOKEN 属于可选的私有扩展。普通公开
构建保持为空时,相关入口不会显示,也不会影响搜索和阅读。assembleH2h 使用
abouth2h.com 的匿名只读 API 与待审核反馈接口,不读取这两个私有配置值。
server/ 包含 Go 1.22 云端服务,提供:
- 邮箱验证码注册与验证;
- 登录、刷新令牌轮换和退出;
- 加密同步载荷存取;
- SQLite 数据持久化;
- SMTP HTML 验证码邮件;
- systemd 与 Nginx 部署示例;
- 公开更新清单与 APK 下载路由示例。
服务端不会替用户登录内容站点,也不应保存内容站点 Cookie。生产部署应使用 HTTPS、 独立服务用户、受限文件权限、可靠 SMTP 和定期数据库备份。
- 所有原站请求遵守 HTTPS,不忽略 TLS 证书错误;
- WebView 启用安全浏览,Cookie 保存在 Android WebView 数据区;
- 不向 Luma 云端上传站点 Cookie;
- 不在 APK 中硬编码私有账号、密码或 SMTP 授权码;
- 编译进 APK 的固定 Token 可以被逆向提取,公开构建必须留空私有扩展 Token;
- 不提供 Cloudflare 绕过、批量抓取、付费权限绕过、静默购买或自动充值;
- 原站结构变化、登录风控和网络状态都可能导致部分功能暂时不可用。
这是一个仍在持续迭代的个人项目。四个站点都可能调整页面、接口和登录策略,解析适配 无法保证长期不变。提交问题时,建议附上站点、页面类型、复现步骤和脱敏截图,但请勿 公开 Cookie、密码、验证码、余额、邮箱地址或付费内容。
本项目与 AsianFanfics、PO18、海棠文学城及 Postype 均无官方关联。使用本项目时请遵守 各站点条款、著作权规则及所在地法律。


