NodeLoc APP更新日志(当前v0.3.4)

NodeLoc App 版本更新日志

仓库地址:GitHub - lezi-fun/nodeloc-app: NodeLoc.com 的第三方 Android 原生客户端 · GitHub

NodeLoc App v0.3.4

NodeLoc App v0.3.4

本次更新基于 v0.3.3,重点带来 Discourse 风格通知中心Android 系统通知
聊天入口,同时修复 onebox 图片、话题顶 / 降投票、签到和应用更新检测等问题。
通知从应用内延伸到了系统界面,帖子投票也改为与 Discourse Post Voting 一致的真实行为。


重点内容:你现在可以

  • 从首页直接处理通知:右上角头像显示未读数量,点击后快速浏览最近通知
  • 在系统通知栏收到提醒:点击 Android 系统通知可直达应用通知中心
  • 从侧边栏进入聊天:NodeLoc Chat 会继续使用当前登录状态
  • 使用真正的顶 / 降投票:不再显示回应列表,也不再通过长按选择表情
  • 正确查看 onebox 图片:缩略图、全尺寸图片和延迟加载图片会按实际结构展示

概览

这一版的第一条主线是通知体验。首页新增用户头像与未读角标,头像菜单、完整通知页和
Android 系统通知共享同一套通知数据;阅读单条通知只更新对应项目,“全部已读”仍由用户
主动触发。应用启动、回到前台和后台周期任务都会检查新通知,Android 13 及以上系统会在
首次打开应用时尝试请求通知权限。

第二条主线是对齐 Discourse 的真实行为。onebox 图片重新区分左侧缩略图与全宽图片,并支持
延迟加载地址;话题顶 / 降改为使用 Discourse Post Voting 接口和服务端状态,不再复用表情
回应逻辑。同时修复正式版本检测、签到请求以及正文大图展示问题。

发布日期:2026-09-06

更新规模:6 commits | 20 files changed | +1,165 / -215 lines


新功能

Discourse 风格通知中心

首页右上角现在显示当前用户头像和未读通知数量。点击头像会先打开原生通知菜单,
可以快速浏览最近通知,而不是直接跳转到新页面。

  • 展示来源用户、头像、话题标题、发生时间和未读状态
  • 点击单条通知后,仅将该通知标记为已读并跳转到对应话题
  • 提供完整通知列表和由用户主动触发的“全部已读”操作
  • 打开通知列表不会自动清空未读通知
  • 阅读通知后会及时刷新首页未读角标

Android 系统通知

NodeLoc 的新通知现在可以同步显示在 Android 通知栏中。

  • 点击系统通知可直接进入应用通知中心
  • 多条通知会合并展示,减少通知栏占用
  • 已提醒的通知会被记录,避免重复打扰
  • 应用启动、回到前台以及后台周期任务都会检查新通知
  • Android 13 及以上系统会在首次打开应用时尝试请求通知权限

聊天入口

侧边栏新增“聊天”入口,使用当前登录状态打开 NodeLoc Chat,无需再次登录。
当前版本使用应用内网页承载聊天,后续版本将继续完善原生聊天体验。


修复

onebox 图片正确显示

修复 onebox 中包含图片时无法正确渲染的问题,并按 Discourse 的实际结构区分图片形态。

  • 普通 .aspect-image 按左侧缩略图显示
  • .aspect-image-full-size 按全宽大图显示
  • 支持 data-srcdata-original-srcdata-lazy-src 和延迟加载 srcset
  • 优先使用真实图片地址,避免把数据占位图当成最终图片

话题顶 / 降恢复为真正的投票

顶 / 降操作现已接入 Discourse Post Voting 的投票接口和状态,不再复用表情回应逻辑。

  • 不再显示回应用户列表
  • 移除长按选择其他回应的操作
  • 再次点击相同方向会撤销当前投票
  • 切换投票方向时会正确更新票数和选中状态
  • 仅在启用 Post Voting 的话题中显示投票控件

应用更新提示恢复正常

  • 自动构建版本改为预发布版本,不再覆盖 GitHub 上的正式最新版
  • 版本比较只识别 v1.2.3 这类正式版本号
  • 构建标签不会再被误判为比当前版本更旧或更新的正式版本

签到稳定性修复

  • 修正签到请求随机标识的长度
  • 补齐站点来源信息,解决部分情况下签到请求被服务端拒绝的问题

正文图片显示修复

正文中的大图恢复为完整图片展示,不再错误显示成缩略图加链接。


升级提醒

  • 可以直接从 v0.3.3 升级到 v0.3.4,无需清除应用数据
  • Android 13 及以上用户首次打开新版时,请允许通知权限以接收系统通知
  • 如果此前拒绝了通知权限,可以在 Android 系统设置的应用通知页面重新开启
  • Android 后台任务由系统统一调度,省电模式下通知检查可能延迟
  • 当前聊天入口仍使用应用内网页,尚未提供完整原生聊天界面

下载与安装

访问 GitHub Releases 下载对应版本。
应用要求 Android 8.0(API 26)及以上版本

文件 适用设备 建议
nodeloc-universal-v0.3.4.apk 所有受支持设备 推荐,不确定架构时选择此版本
nodeloc-arm64-v8a-v0.3.4.apk 大多数现代 Android 手机和平板 ARM64 设备可优先选择
nodeloc-armeabi-v7a-v0.3.4.apk 较旧的 32 位 ARM 设备 仅旧设备需要
nodeloc-x86_64-v0.3.4.apk 64 位 x86 模拟器或设备 主要用于测试环境
nodeloc-x86-v0.3.4.apk 32 位 x86 模拟器或设备 主要用于旧测试环境

下载完成后可直接覆盖安装现有版本。如果系统阻止安装,请在 Android 设置中允许当前下载来源
安装未知应用。

完整变更

v0.3.3…v0.3.4


NodeLoc App v0.3.3

NodeLoc App v0.3.3

这一版是还账的一版:把上一版里"看着能用、其实没跑通"的几处逐一拆开,对照 Discourse 官方源码(discourse/discoursefrontend/discourse-markdown-itapp/lib/composer/toolbar.tscommon/base/onebox.scss 等)重写。Markdown 预览此前一律报"找不到请求的资源"——根因是 POST /posts/preview.json 这个端点在 Discourse 上并不存在,官网 composer 的预览本来就跑在浏览器里,于是改为本地 CommonMark 渲染,并按 setup.js 的选项对齐单换行、原始 HTML 与 :emoji: 图片属性;第三方登录此前的自定义 scheme 回跳永远不会触发(redirect_uri 注册在提供商侧,实测指向站点自己的 /auth/{provider}/callback),改为应用内 WebView 走完授权后接管会话 cookie;onebox 链接卡片按官网 SCSS 实测值重写,区分外链卡片与站内话题引用两种形态。界面侧把编辑器工具栏补齐成官网 composer 的菜单结构(标题 / 列表 / + 三个弹出菜单),Markdown 与渲染视图的切换换成官网那个分段滑动开关,表情按钮从带头发的脸换成官网的 far-face-smile,选择面板改成裸图网格。功能侧新增帖子投票(顶 / 踩,替代点赞)、发私信复制 Markdown退出登录

发布日期:2026-09-01

更新规模:30 commits | +1,969 / -805 lines


重点内容:你现在可以

  • 正常使用 Markdown 预览:创建话题、楼层回复、编辑帖子三处的预览都改为本地渲染,不再依赖不存在的服务端端点,加粗、斜体、列表、表格、删除线、自动链接与 :emoji: 简码均可预览,单换行按站点设置渲染成换行。
  • 在应用内完成第三方登录:点击 Google / GitHub / X / Telegram 后在应用内打开授权页,授权完成、从提供商跳回站点域时自动取回会话并关闭页面,不再跳出到外部浏览器、也不再卡在回调上。
  • 看到与官网一致的链接卡片:外链 onebox 显示来源域名、按原始宽高比铺满的缩略图、标题与描述;站内话题引用显示头像、话题标题、分类徽章与摘要,两者形态分开。
  • 用官网那套编辑器工具栏:标题、列表各有弹出菜单(含任务清单),+ 菜单提供代码块 / 插入表格 / 应用 wrap,最左侧是 Markdown 与渲染视图的分段切换开关。
  • 给帖子投票、给用户发私信:顶 / 踩按钮替代原来的点赞,帖子本身计 1 票;用户资料页可直接发私信。

新功能

编辑器工具栏对齐官网 composer 的菜单结构

按官网 frontend/discourse/app/lib/composer/toolbar.tsthis.groups 重排分组顺序为 fontStyles → insertions → extras。标题与列表改为弹出菜单而非直接插入:标题菜单 6 项(标题 1-4 / 正文 / 小号文字,分别对应 applyHeading(1..4)、level 0 去掉行首 #<small></small>),列表菜单 3 项(无序 / 有序 / 任务清单,后者是官网 checklist 插件注入 list 菜单的 - [ ] )。新增 + 菜单,对应官网 popupMenuOptions 里与排版相关的项:代码块、插入表格、应用 wrap([wrap]…[/wrap])。代码按官网 if (!this.capabilities.touch) 的做法从触屏主栏移出,改由 + 菜单提供。MarkdownEditing 新增 insertTable,插入 GFM 表格骨架并选中首个表头单元格。(e5ba705

Markdown / 渲染视图的分段切换开关

复刻官网 composer 工具栏最左侧的 ComposerToggleSwitchcomponents/composer/toggle-switch.gjs):灰底滑轨上一块浅色滑块,左格是 Font Awesome brands 的 markdown 标记、右格是字母 A,滑块位置表示当前视图。尺寸与配色照 common/components/composer-toggle-switch.scss 取值——轨道 52×26、滑块 24×22(轨道高减 --space-half / --space-1)、内缩 2px、Markdown 态滑块 x=2px、另一态 x=26px(轨道宽减轨道高)。左格图标用 Font Awesome free brands 的 markdown 原始路径构造 ImageVector,与官网 dIcon "fab-markdown" 同源。开关渲染在所有工具栏按钮之前,与 d-editor.gjs 的顺序一致,原来的眼睛按钮与状态文字行一并移除。新增 ComposerToggleSwitch.kt。(751e778

帖子投票(顶 / 踩)

新增投票 API 与界面,投票按钮替代原来的点赞按钮而非与其并存。帖子本身计作 1 票,初始分数为 1。顶 / 踩箭头改用官网 arrow-big-up / arrow-big-down 的原始 SVG 路径构造 ImageVector,不再用 Material Icons 的细箭头。(88ba1fa, 59486af, c49dc5b, 24a1aa8

发私信

新增 DiscourseApi.sendPrivateMessage(),通过 archetype=private_message 发送。用户资料页新增"发私信"入口,配套 SendMessageDialog 组件用于撰写。(74bd6c2

复制 Markdown 与退出登录

帖子"更多"菜单新增复制 Markdown 原文。设置界面新增退出登录。(d04e1a0, e849af8

回复与编辑体验

DiscourseApi.createPost() 改为返回新建的 PostDto,回复成功后在本地直接插入新楼层而不是整页刷新,嵌套模式下自动更新父帖的子回复列表,避免页面跳动与闪烁。编辑帖子时自动预填充原内容。(289cf14, 99125c8


修复

Markdown 预览:改为本地渲染

此前点击预览一律报"找不到请求的资源。"。根因是 POST /posts/preview.json 在 Discourse 上并不存在——实测该路径与 /posts/preview/composer/preview.json 都返回 404,官网 composer 的预览本来就是浏览器里 markdown-it 客户端渲染,没有服务端预览端点。改为本地渲染:新增 MarkdownPreview.kt,用 CommonMark 走同一份规范,并补上 GFM 表格、删除线、自动链接扩展,产出的 HTML 交给 CookedText,与帖子正文共用同一套排版和图片 / 链接处理。创建话题、楼层回复、编辑帖子三处预览统一切过来,删掉已无调用点的 previewPostPostPreviewDto。(d64adce, 747f774, e645917

预览渲染细节对齐 discourse-markdown-it

frontend/discourse-markdown-it/src/setup.jsmarkdownItOptions 逐项核对,纠正三处不一致:softbreak 渲染成 <br>(官网 breaks: !traditional_markdown_linebreaks,本站未开该设置,帖子 cooked 里单换行确实是 <br>,而 CommonMark 默认行为不同);escapeHtml(false) 对齐 html: true,正文里的原始 HTML 交给 CookedText 处理而非在渲染层转义;:emoji: 图片属性照 features/emoji.js 与站点实际 cooked 对齐——emoji_setunicode 而非 twitter、版本号 ?v=15title / alt 带冒号、固定 20×20。(060aec0

第三方登录:改为应用内 WebView 完成

原实现有两处硬伤:用 CustomTabs 跳外部浏览器、靠 nodeloc://auth?payload= 回跳,但 Discourse 的 redirect_uri 注册在提供商侧(实测 /auth/github 302 到 GitHub 时带的是 https://2hkj2sa2kedse.pages.dev/auth/github/callback),不会跳自定义 scheme,这个 deeplink 永远不触发;兑换调用打的 /session/current_user_confirm_session 实测 404。Discourse 的 OAuth 会话完全建立在服务端,授权后回到站点 /auth/{provider}/callback 时下发 _t / _forum_session cookie——没有 token 要兑换,也不能后台重放 callback(OAuth 的 state 一次性)。改为新增 OAuthLoginDialog:应用内 WebView 加载 /auth/{provider},用户在提供商页面授权,检测到从提供商跳回站点域即取 CookieManager 里的会话 cookie 并关闭 WebView,再由 SessionStore.adoptCookieHeader 同步进 OkHttp 的 CookieJar,最后经 /session/current.json 确认登录态。删掉失效的 nodeloc://auth deeplink、AuthCallbackHandlerloginWithPayload。(b7c82f5

第三方登录:以"跳回站点域"为完成信号

上一步的判定盯的是 /auth/*/callback 这个具体路径,但流程第一步加载的 /auth/{provider} 本身也在站点域下,一旦 WebView 里残留 _t cookie 就会被误判成已完成。改成按提供商跳转的实际形态判定:先记录是否已离开站点域(即已进入提供商授权页),只有离开过再跳回站点才算走完授权,不再依赖 callback 的路径拼写;站点域改用主机名比对,避免 www / 尾斜杠差异;拿不到 _t 时保持 WebView 打开(首次登录可能要补注册表单),后续页面加载会再判一次而不是直接失败。(3fb43b4

onebox:对齐官网的内 / 外链两种形态

照站点真实 cooked HTML 取样重写。外链 aside.onebox:标题链接改取 h3 > a(原实现取第一个 <a>,实际拿到的是 header.source 里的域名链接);来源域名取 header.source;缩略图按 .aspect-image--aspect-ratioimg 的 width / height 铺满卡片宽度,原实现固定 64dp 方图,与官网差别明显。站内 aside.quote[data-topic]:新增独立的 InternalTopicQuote,24px 头像 + 话题链接 + 分类徽章 + blockquote 摘要,徽章颜色解析官网内联的 --category-badge-color / --category-badge-text-color;原先并入通用 QuoteBlock,把 .title 压成一行纯文本,头像、链接、徽章全丢了。inline-onebox 经核对无需改动——官网它只是把裸 URL 换成页面标题的普通行内链接,不是卡片。(c512b6f

onebox:按 SCSS 实测值校正

补做样式核对(common/base/onebox.scsscommon/base/topic-post.scsscommon/base/discourse.scss),改掉三处凭猜写错的地方。外链卡片删掉左侧 3px 强调色竖线——这条线根本不属于它,onebox-shadow mixin 是 border: 0box-shadow: 0 0 0 1px --onebox-border-color, 0 0 0 4px --onebox-shadow-color,改用 1px 描边 + 4px 浅色外圈还原;border-left 只在 blockquote { aside.onebox { … } } 即被引用块包住时出现,这种情形单独判断后才加。缩略图分两种形态:有 .aspect-image 包裹才铺满宽度,没有包裹时是 float:left; max-width:35%(窄屏); max-height:170px,文字排在右侧,原实现一律铺满。站内引用补上属于它的 border-left--d-post-aside-border-left: 5px solid var(--primary-300),5px 中性灰而非强调色),标题与正文共用同一块 --d-post-aside-background 底色,删掉自行加的分隔线与两段不同背景。(f157bc1

表情:按钮图标与选择面板尺寸

工具栏表情按钮原用 Icons.Filled.Face,那是带头发的脸;官网 enable-emoji.js 用的是 far-face-smile——只有圆圈轮廓加两点眼睛和嘴,没有头发,已换成 Icons.Outlined.SentimentSatisfiedAlt。选择面板原用 Material 的 AssistChip 包每个表情,多出一圈边框和填充背景;官网 emoji picker 是 grid 排布的纯图片按钮,只有 hover / focus 时才出现浅色底与圆角,已改成裸图网格。单元格尺寸按 common/components/emoji-picker.scss 实测值取——.emoji { width: 24px; height: 24px; padding: 6px },即图片 24dp、单元格 36dp,间距由单元格内边距提供,网格不再额外留 gap;分区标题按 .emoji-picker__section-titlefont-down-2padding: 0.5rem。(4da98b9, f581f05

帖子渲染问题

修复 Markdown 图片语法 ![alt](url) 的渲染支持;小程序改为显示可点击卡片,点击后在独立 Activity 中打开;修复 <details> 标签导致的崩溃(Jsoup 不支持 :scope 选择器)。(f704883

点赞图标与按钮状态

点赞按钮从 emoji 图片改为 Material Icons:未点赞显示中空心形(FavoriteBorder),点赞后显示实心红色心形(Favorite),与官网行为一致。同时修复点赞后回复按钮暂时消失——用 key(post.id, canReply) 包裹操作按钮区域,确保点赞触发重组时按钮状态稳定。(8cf3bd9, 84bed62

话题界面登录提示闪烁

loggedIn 状态从 Boolean 改为 Boolean?,初始 null 表示未知。在登录状态检查完成前不渲染回复区域,避免从"登录后回复"跳变成回复输入框。(5936f34

搜索类型选择

补上用户与分类搜索结果的显示逻辑,按搜索类型(话题 / 帖子、用户、节点 / 标签)展示对应结果列表,新增 UserResultRowCategoryResultRow 组件;排序选项只在话题 / 帖子搜索时出现;新增 onOpenProfile 参数支持点击用户结果跳转资料页。(c8f4a9b


技术架构

本地 Markdown 渲染管线

新增依赖 org.commonmark:commonmark:0.22.0 及 GFM 表格 / 删除线 / 自动链接三个扩展。新增 MarkdownPreview.kt 作为单一渲染入口:Parser + HtmlRenderer 按官网 markdownItOptions 配置(softbreak("<br>\n")escapeHtml(false)),输出 HTML 后再做 :emoji: 简码展开,交给既有的 CookedText 渲染。这样预览与帖子正文共用同一条渲染路径,图片、链接、代码块、引用的表现天然一致。

会话 cookie 接管

SessionStore 新增 adoptCookieHeader(),解析 CookieManager.getCookie() 返回的 k=v; k=v 串,取出 _t_forum_session 写入自身,并清空旧 CSRF token(会话已换人)。SessionRepo 新增 adoptWebViewSession(),先接管 cookie 再经 /session/current.json 拉取当前用户确认登录态。WebView 与 OkHttp 由此共享同一份会话。

Discourse 图标的 ImageVector 移植

官网用 Font Awesome 与自有 SVG sprite,Material Icons 里没有对应字形的按钮,改为按原始 path 数据构造 Compose ImageVector:投票的 arrow-big-up / arrow-big-down 取自站点 SVG sprite,切换开关左格的 markdown 标记取自 Font Awesome free brands 的 markdown.svg

CSS 变量解析

CookedText 新增两个小工具:aspectRatioOf() 解析 style="--aspect-ratio:690/361" 得到宽高比,cssVarColor() 解析 --category-badge-color: #F7941D 这类内联 CSS 变量颜色(支持 3 / 6 / 8 位十六进制)。分类徽章与 onebox 缩略图比例都靠它还原官网取值。

清理

删除已失效的代码:DiscourseApi.previewPostPostPreviewDtoAndroidManifest.xml 里的 nodeloc://auth deeplink、AuthCallbackHandlerDiscourseApi.loginWithPayload。删除仓库根目录遗留的 5 个临时测试脚本(test_device_info.sh 等),以及 README 中过时的功能列表。(5226990, b055507


已知限制

  • bbcode 与 onebox 不进本地预览[quote][details][wrap][spoiler] 等 Discourse 自有语法,以及链接的 onebox 卡片,CommonMark 不认,预览里会显示为原文。发布后由服务端正常渲染,不影响最终效果。
  • :emoji: 简码没有名单校验:官网 emoji.js 只在简码命中内置 emoji 表时才替换成图片,未命中保留原文;本地没有那份表,只按"长度合理的简码"近似处理,因此打错的简码在预览里会显示为裂图。
  • 第三方登录的收尾未实测:已验证点击后应用内 WebView 正常停在提供商授权页(未跳出外部浏览器),但"授权完成后跳回站点域并取回 cookie"这一步需要真实账号授权才能走通,尚未实测。
  • 表情选择面板缺分类导航与肤色选择:官网 emoji picker 另有分类导航栏与 Fitzpatrick 肤色选择器,本版只对齐了单元格与分区版式。

下载与安装

访问 Releases 下载对应版本,或从官网获取。

Android

支持 arm64-v8aarmeabi-v7ax86_64x86 四种架构,同时提供 universal APK(包含所有架构)。

架构 文件名
Universal(推荐) nodeloc-v0.3.3-universal.apk
ARM64 nodeloc-v0.3.3-arm64-v8a.apk
ARM32 nodeloc-v0.3.3-armeabi-v7a.apk
x86_64 nodeloc-v0.3.3-x86_64.apk
x86 nodeloc-v0.3.3-x86.apk

安装方式:下载后直接安装,首次安装需允许"安装未知应用"权限。


NodeLoc App v0.3.2

NodeLoc App v0.3.2

这一版围绕实时性与自动化补两笔硬账:应用自动更新系统——启动时自动检查 GitHub Release 最新版本,Material 3 风格更新提示对话框显示版本号和更新内容,一键下载 universal APK 并自动触发安装,支持版本号智能比较(x.y.z 格式),后台下载进度通知,完成后弹出系统安装界面;MessageBus 实时消息推送——完整实现 Discourse MessageBus 长轮询机制,支持 15+ 个频道类型订阅(/latest、/topic/{id}、/categories 等),自动重连机制(指数退避策略),话题详情页动态订阅收到更新时自动刷新。用户体验侧新增发帖设备信息显示,根据 post_source_level 设置自动添加设备信息,话题详情页显示发帖设备徽章(平台、品牌、型号),圆角背景徽章样式与称号样式保持一致。本版初始版本设为 v0.0.1,版本号统一管理支持通过 -PappVersion 或环境变量指定。

发布日期:2026-08-30

更新规模:15 commits | +2,800 / -150 lines


重点内容:你现在可以

  • 启动时自动检查应用更新:应用启动时自动检查 GitHub Release 最新版本,发现新版本时弹出 Material 3 风格对话框,显示版本号和更新内容,点击"前往下载"后台下载 universal APK,下载完成自动弹出系统安装界面。
  • 实时接收社区消息推送:完整的 MessageBus 长轮询系统,支持订阅话题更新、新帖提醒、私信通知等 15+ 个频道,自动重连机制(指数退避),话题页动态订阅实时刷新。
  • 查看发帖设备信息:话题详情页显示每条帖子的发帖设备徽章(平台、品牌、型号),圆角背景样式与称号保持一致,发帖时根据设置自动添加设备信息。

新功能

应用自动更新系统

启动时自动检查 GitHub Release 最新版本,Material 3 风格更新提示对话框显示版本号和更新内容。点击"前往下载"后台下载 universal APK 并自动触发安装,支持版本号智能比较(x.y.z 格式)。后台下载进度通知,完成后弹出系统安装界面。新增 AppUpdateManager.kt 管理 GitHub API 集成与版本比较,ApkDownloadManager.kt 处理 DownloadManager + BroadcastReceiver,AppUpdateDialog.kt 提供 Material 3 对话框。添加 FileProvider 支持 Android 7.0+ APK 安装,新增 REQUEST_INSTALL_PACKAGES 权限。(1a09e42, 4b73a63, 37abe97

MessageBus 实时消息系统

完整实现 Discourse MessageBus 长轮询机制,用于接收服务端实时推送的消息。支持 15+ 个频道类型订阅(/latest、/topic/{id}、/categories、/delete、/recover、/destroy、/global/asset-version、/file-change、/site/banner、/site/read-only、/private-messages 等)。自动重连机制(指数退避策略),话题详情页动态订阅,收到更新时自动刷新。新增 MessageBusClient.kt 实现长轮询客户端,MessageBusProvider.kt 提供全局实例管理,LocalMessageBus 作为 Compose 组合本地变量。(43bdaff, eb0b17f

发帖设备信息显示

发帖时根据 post_source_level 设置自动添加设备信息(平台、品牌、型号)。话题详情页显示发帖设备徽章,圆角背景徽章样式与称号样式保持一致。新增 DeviceInfoManager.kt 获取设备信息,PostSourceLevel 枚举定义显示级别,CookedText.kt 渲染设备徽章。(1a09e42, 56d13a5

第三方登录系统

完整实现 OAuth 第三方登录流程,支持 Google、GitHub、Discord 等平台。新增 OAuthActivity 处理授权回调,MainActivity 接收第三方登录结果,AuthRepository 管理登录状态与会话。登录页显示第三方登录按钮,点击后跳转授权页面,授权成功后自动返回应用并完成登录。(de43f6b, f95b046, 9b0b31f

设置页面与小程序 WebView

新增设置页面,支持主题切换、通知设置、账号管理等功能。小程序 WebView 优化加载体验,支持加载进度显示、错误提示、刷新重试。侧边栏小程序列表完善,显示小程序图标、名称、描述。(1a4f904

搜索类型选择与发帖来源 API

搜索页新增类型选择器,支持按话题、帖子、用户、标签等类型筛选搜索结果。发帖来源 API 集成,支持获取发帖设备信息配置,根据服务端设置决定是否显示设备信息。(adccf33


修复

User-Agent 完全模拟真实 Android Chrome

修正 User-Agent 字符串,完全模拟真实 Android Chrome 浏览器,包含完整的设备型号、Android 版本、Chrome 版本等信息,确保与官网后端兼容。(74c1f69

签到请求格式修正

修正签到请求格式,确保 POST 请求参数与官网后端完全一致,解决签到失败问题。同时修复签到后的响应处理,正确显示签到结果提示。(3ccd9fe, 8d87224

表情选择器与 Markdown 预览

修复表情选择器和 Markdown 预览功能,表情选择器按名称前缀正确分组,只显示 NodeLoc 自定义表情过滤系统表情。表情分组显示友好名称,提升用户体验。(197fac8, 273adcc, f098f4d, 8069c34, 46ec296

侧边栏交互优化

禁用侧边栏滑动手势避免误触,点击侧边栏用户头像可打开个人资料页面。(572b85b, 5fc7c31


技术架构

版本号统一管理

初始版本设为 v0.0.1,版本号统一管理支持通过 -PappVersion 或环境变量 APP_VERSION 指定。app/build.gradle.kts 默认版本号从 0.0.1 开始,自动移除 v 前缀。(27c698a

FileProvider 配置

添加 FileProvider 支持 Android 7.0+ APK 安装,AndroidManifest.xml 配置 androidx.core.content.FileProviderfile_paths.xml 定义外部下载目录路径。新增 REQUEST_INSTALL_PACKAGES 权限。

APK 下载管理器

实现 APK 下载管理器,使用 DownloadManager 后台下载,BroadcastReceiver 监听下载完成,FileProvider 共享 APK 文件,ACTION_VIEW 触发系统安装。


下载与安装

访问 Releases 下载对应版本,或从官网获取。

Android

支持 arm64-v8aarmeabi-v7ax86_64x86 四种架构,同时提供 universal APK(包含所有架构)。

架构 文件名
Universal(推荐) nodeloc-v0.3.2-universal.apk
ARM64 nodeloc-v0.3.2-arm64-v8a.apk
ARM32 nodeloc-v0.3.2-armeabi-v7a.apk
x86_64 nodeloc-v0.3.2-x86_64.apk
x86 nodeloc-v0.3.2-x86.apk

安装方式:下载后直接安装,首次安装需允许"安装未知应用"权限。


NodeLoc App v0.3.1

NodeLoc App v0.3.1

这一版围绕表情系统与节点图标补两笔硬账:站点自定义表情完整支持——表情选择器按分组显示 NodeLoc 自定义表情,按名称前缀正确分组,显示友好分组名称,过滤系统表情只显示自定义表情;节点图标真实化——无图片节点显示默认图标,侧边栏小程序列表完善显示图标名称描述。功能侧新增后台检查 GitHub 新版本,静默检查不打扰用户,为后续自动更新功能奠定基础。体验侧修复侧边栏"查看更多内容"按钮对齐、编辑器附件上传参数补全、小程序 WebView 加载改善、创建话题编辑器操作修复、打赏能量图标颜色对齐、抽奖长按与图片链接展示修正、抽奖卡片交互对齐、外部链接安全提示增加、帖子图片与链接渲染改善、抽奖购票数量校验修复,全面完善帖子编辑器与社区交互。

发布日期:2026-08-XX

更新规模:20 commits | +1,500 / -200 lines


重点内容:你现在可以

  • 使用 NodeLoc 站点自定义表情:表情选择器完整支持 NodeLoc 自定义表情,按分组显示友好名称,快速插入常用表情。
  • 后台静默检查应用更新:应用后台检查 GitHub Release 最新版本,为后续自动更新功能奠定基础,不干扰用户正常使用。
  • 看到真实的节点图标:无图片节点显示默认图标,侧边栏小程序列表完善显示,提升视觉一致性。

新功能

站点自定义表情完整支持

表情选择器完整支持 NodeLoc 自定义表情,按分组显示友好名称(如"基础表情"、“动物”、"食物"等),按名称前缀正确分组。过滤系统表情只显示自定义表情,提升插入效率。表情选择器界面优化,支持快速滚动与搜索。(a19d324, f098f4d, 273adcc, 8069c34, 46ec296

后台检查 GitHub 新版本

应用后台静默检查 GitHub Release 最新版本,不干扰用户正常使用。为后续自动更新功能奠定基础,支持版本号比较、Release Notes 获取、APK 下载链接解析。新增 GitHubReleaseChecker.kt 管理版本检查逻辑。(066e4f9

帖子编辑器与社区交互完善

完善帖子编辑器与社区交互,修复创建话题编辑器操作、补全编辑器附件上传参数、改善帖子图片与链接渲染。增加外部链接安全提示,点击外部链接前弹出确认对话框,显示目标域名和安全提示。(6cd47da, 3e433d6, 66155af, 6b43c5c, caea6ae


修复

节点图标真实化

无图片节点显示默认图标,不再显示空白或占位符。侧边栏小程序列表完善显示图标、名称、描述,提升视觉一致性。(1776f8a, 3956f2e

侧边栏查看更多内容对齐

对齐侧边栏"查看更多内容"按钮位置,修复按钮位置偏移问题,与官网保持一致。(a5fe9c7

小程序 WebView 加载改善

改善小程序 WebView 加载体验,支持加载进度显示、错误提示、刷新重试。优化 WebView 配置,提升加载速度与稳定性。(28aa35f

打赏能量图标颜色对齐

对齐打赏能量图标颜色,与官网保持一致,修复颜色偏差问题。(e32c02a

抽奖功能修复族

修正抽奖长按与图片链接展示,对齐抽奖卡片交互体验,修复抽奖购票数量校验。抽奖卡片按钮布局优化,购票数量输入框边界检查,随缘按钮长按反馈。(21038a4, 8475994, 11d2b5c, e6f1c66


下载与安装

访问 Releases 下载对应版本。


NodeLoc App v0.3.0

NodeLoc App v0.3.0

这一版是功能爆发版,围绕管理员/版主权限系统动态配置系统用户主页打赏能量多样化反应创建话题回复增强抽奖功能小程序/小游戏九大模块全面对齐官网。楼层操作菜单新增管理功能(锁定、设为 Wiki、重新渲染、取消隐藏、变更所有者、永久删除),楼层操作(收藏、举报、删除、恢复、点赞)完全跟随服务端权限。侧栏节点、标签、小程序改为跟随服务端配置不再本地硬编码,创建话题的节点选择器改为可搜索的底部弹层。支持阅读进度上报(screen-track),对齐官网 POST /topics/timings 触发规则。支持编辑自己发过的帖子(PUT /posts/{id}),复用 Markdown 编辑器保持一致体验。用户主页完整展示头像、称号、简介、统计信息、最近帖子,支持称号动效(discourse-custom-badge 渐变流光文字)。完整支持 discourse-reward 打赏能量,话题和评论楼层均可打赏展示累计获赏能量。支持 discourse-reactions 帖子反应,单击切换默认赞长按弹出 7 种表情选择。主页右下角新建话题按钮进入创建话题界面(节点+标题+Markdown 正文)发布。回复栏支持插入 GIF(KLIPY 搜索经站点后端代理),Markdown 工具栏按官网 D-Editor 行为规范重实现粗体/斜体/标题/链接/引用/代码/列表。完整支持 discourse-lottery 帖子内抽奖,展示卡片、参与购票/随缘、发起者开奖与结束。支持渲染帖子内嵌小程序/小游戏(discourse-apps),用 WebView 加载官网自包含 webview 页面。话题列表和详情页的节点标签改用官网上传的图标图片不再是纯色圆点占位。抽屉用户区改用青铜/白银/黄金/钻石/王者会员称号不再显示 TL0~TL4。修复 TagDto 序列化器循环初始化导致主页加载崩溃。表单 POST 遇 403 时清空 CSRF 缓存并自动重试一次规避会话轮换导致的失败。兼容对象数组格式的话题标签列表与详情页渲染为官网风格标签胶囊。去掉主页顶部主题筛选条对齐官网仅保留新话题横幅与列表。主页顶部对齐官网登录用户显示签到图标+头像未登录显示绿色登录按钮。详情页底部回复真正可用 POST /posts 发送、失败文案、成功后刷新未登录回复栏引导登录。高级搜索筛选器改为不跨会话记忆进入搜索页自动折叠。头像等站点图片显式持久缓存内存 25% 堆 + 磁盘 64MB 冷启动直接命中。支持 workflow_dispatch 手动填版本号触发部署 APK/tag/Release 按版本号命名。删除早期设计探索目录 design/(首页方案画布原型已不再使用)。忽略 Playwright MCP 调研留下的本地快照/日志目录。

发布日期:2026-08-XX

更新规模:32 commits | +8,500 / -1,200 lines


重点内容:你现在可以

  • 作为管理员/版主管理社区内容:楼层操作菜单新增锁定、设为 Wiki、重新渲染、取消隐藏、变更所有者、永久删除等管理功能,所有操作完全跟随服务端权限。
  • 创建话题并发布到社区:主页右下角新建话题按钮,选择节点、填写标题、编写 Markdown 正文,一键发布到社区。回复栏支持插入 GIF、Markdown 工具栏(粗体/斜体/标题/链接/引用/代码/列表)。
  • 查看完整的用户主页:用户主页展示头像、称号(支持渐变流光动效)、简介、统计信息、最近帖子,全面了解用户信息。
  • 给帖子打赏能量:话题和评论楼层均可打赏能量,展示累计获赏能量,支持 discourse-reward 插件。
  • 使用多样化表情反应:帖子反应支持 7 种表情,单击切换默认赞,长按弹出表情选择器,支持 discourse-reactions 插件。
  • 参与帖子内抽奖:完整支持 discourse-lottery 抽奖,展示抽奖卡片、参与购票/随缘、发起者开奖与结束。
  • 玩帖子内小程序/小游戏:支持渲染帖子内嵌小程序/小游戏(discourse-apps),用 WebView 加载官网自包含 webview 页面。
  • 编辑自己发过的帖子:支持编辑自己发过的帖子(PUT /posts/{id}),复用 Markdown 编辑器保持一致体验。

新功能

管理员/版主专属功能

楼层操作菜单新增管理功能:锁定、设为 Wiki、重新渲染、取消隐藏、变更所有者、永久删除。楼层操作(收藏、举报、删除、恢复、点赞)完全跟随服务端权限,非管理员/版主用户不显示管理功能。新增 PostActionButton.kt 渲染操作按钮,PostRepository.kt 调用管理 API。(0f6b44b, 752af3c

动态配置系统

侧栏节点、标签、小程序改为跟随服务端配置,不再本地硬编码。创建话题的节点选择器改为可搜索的底部弹层,无需滚动查找。新增 SiteConfigRepository.kt 获取服务端配置,CategoryListScreen.kt 动态渲染节点列表。(32ec29a, f66e384

阅读进度上报

支持 screen-track 阅读进度统计,对齐官网 POST /topics/timings 触发规则。新增 ReadingProgressTracker.kt 追踪阅读进度,TopicDetailScreen.kt 集成进度上报。(0958a3a

帖子编辑功能

支持编辑自己发过的帖子(PUT /posts/{id}),复用 Markdown 编辑器保持一致体验。楼层操作菜单显示"编辑"按钮(仅作者可见),点击进入编辑界面,修改后提交更新。(af7478f

用户主页

完整的用户资料页面:头像、称号、简介、统计信息、最近帖子。支持称号动效(discourse-custom-badge 渐变流光文字)。新增 UserProfileScreen.kt 渲染用户主页,UserRepository.kt 获取用户信息,BadgeText.kt 渲染称号动效。(3c38682

打赏能量系统

完整支持 discourse-reward 打赏能量,话题和评论楼层均可打赏,展示累计获赏能量。新增 RewardButton.kt 渲染打赏按钮,RewardRepository.kt 调用打赏 API。(8cf3756

多样化反应

支持 discourse-reactions 帖子反应,单击切换默认赞,长按弹出 7 种表情选择。新增 ReactionButton.kt 渲染反应按钮,ReactionRepository.kt 调用反应 API。(bec3e42

创建话题

主页右下角新建话题按钮,进入创建话题界面(节点+标题+Markdown 正文)发布。新增 CreateTopicScreen.kt 渲染创建界面,TopicRepository.kt 调用创建 API。(67bbd44

回复增强

回复栏支持插入 GIF(KLIPY 搜索,经站点后端代理)。Markdown 工具栏按官网 D-Editor 行为规范实现粗体/斜体/标题/链接/引用/代码/列表。新增 GifPickerDialog.kt 渲染 GIF 选择器,MarkdownToolbar.kt 渲染工具栏。(e0c0060, a96eeff

抽奖功能

完整支持 discourse-lottery 帖子内抽奖,展示抽奖卡片、参与购票/随缘、发起者开奖与结束抽奖。新增 LotteryCard.kt 渲染抽奖卡片,LotteryRepository.kt 调用抽奖 API。(ddd1d5f

小程序/小游戏

支持渲染帖子内嵌小程序/小游戏(discourse-apps),用 WebView 加载官网自包含 webview 页面。新增 MiniAppWebView.kt 渲染 WebView,MiniAppRepository.kt 获取小程序配置。(f3c3397

内容本地化

显示帖子翻译提示条,支持查看原文。新增 TranslationBanner.kt 渲染翻译提示,TranslationRepository.kt 调用翻译 API。(a5d5b73


修复

节点标签图标真实化

话题列表和详情页的节点标签改用官网上传的图标图片,不再是纯色圆点占位。新增 CategoryIcon.kt 加载节点图标,coil-svg 支持 SVG 图标。(0b3ec4c

会员称号更新

抽屉用户区改用青铜/白银/黄金/钻石/王者会员称号,不再显示 TL0~TL4 信任等级。称号样式与官网保持一致,显示会员等级图标。(7c7016f

TagDto 序列化器修复

修复 TagDto 序列化器循环初始化导致主页加载崩溃。序列化器改为延迟初始化,避免循环依赖。(d08ffdb

CSRF 自动重试

表单 POST 遇 403 时清空 CSRF 缓存并自动重试一次,规避会话轮换导致的失败。新增 CsrfInterceptor.kt 拦截器处理 CSRF 错误。(ac3e6d3

话题标签兼容

兼容对象数组格式的话题标签,列表与详情页渲染为官网风格标签胶囊。修复标签解析错误导致的崩溃。(6027e81

主页顶部对齐官网

去掉主页顶部主题筛选条,对齐官网仅保留新话题横幅与列表。主页顶部对齐官网,登录用户显示签到图标+头像,未登录显示绿色登录按钮。(5055c3e, bfe85e2

回复功能完善

详情页底部回复真正可用:POST /posts 发送、失败文案、成功后刷新。未登录回复栏引导登录。修复回复失败后的错误提示,成功后自动刷新话题内容。(70e13b3

搜索筛选器改进

高级搜索筛选器改为不跨会话记忆,进入搜索页自动折叠。避免历史筛选条件干扰新搜索。(29a5e98

图片缓存优化

头像等站点图片显式持久缓存:内存 25% 堆 + 磁盘 64MB,冷启动直接命中。减少网络请求,提升加载速度。(10d3ad2


清理

删除设计探索目录

删除早期设计探索目录 design/(首页方案画布原型,已不再使用)。清理过时文件,减少仓库体积。(e4c1aa3

忽略调研目录

忽略 Playwright MCP 调研留下的本地快照/日志目录。避免调研文件提交到仓库。(937719a


CI/CD

手动触发部署

支持 workflow_dispatch 手动填版本号触发部署,APK/tag/Release 按版本号命名。新增 release.yml 工作流支持手动触发。(6d17592


下载与安装

访问 Releases 下载对应版本。


NodeLoc App v0.2.0

NodeLoc App v0.2.0

这一版是基础能力完善版,围绕登录系统搜索功能抽屉导航新话题提示动图支持权限与访问控制六大模块全面对齐官网。官网风格登录页面(两阶段 TOTP)与抽屉用户区:登录入口、头像等级、登出确认。会话基础设施:CookieJar 持久化 _t,CSRF/登录/登出/当前用户 API 与 SessionRepo。搜索页对齐官网全页搜索:类型筛选、高级筛选器(分类、标签、状态、作者、时间等)、排序选项、帖子模式。右上角搜索接入全站搜索(防抖 + 匹配片段)。抽屉分类改为真实节点列表并加载站点 logo(coil-svg 支持 SVG 图标)。抽屉节点改用站点上传的分类真实图标,缺失时回退分类色点。添加原生字标加载动画。主页对齐官网新话题提示:定期检查并显示绿色横幅,点击静默刷新回顶。帖子流头像支持动图(官网 _2.gif 版),全局 Coil 挂载 GIF/SVG 解码。列表受限话题显示锁图标。登录态变色:等级达标绿色 #4CAF50,未登录/不达标金色 #FF9800。列表锁图标改用官网 lc-lock 线框锁(未登录统一金色 #FF9800)。无权访问/不存在话题展示官网风格专用页面。全局字号较 Material 默认下调一档,贴近官网移动端观感。列表标记对齐官网:置顶显示图钉,信任等级限制话题显示锁。主页滑到底部自动加载下一页,失败后停止避免无限重试。详情页头部标题改用接口返回的最新话题名。加载动画按实际墨迹包围盒居中,消除水平偏移。自定义表情改行内 20px 不再遮挡文字。正文图片应用内缩放预览。等级限制帖渲染官网同款锁提示卡片。加载字标默认高度 64dp 调整为 44dp。顶栏 logo 按官网实测校准至 30dp/条高 52dp。修复分类色崩溃、身份徽章硬编码与协议相对 URL。修复 Compose 与 Jsoup 编译错误。对齐 Discourse 回复与主题分页。对齐嵌套回复与富文本渲染。

发布日期:2026-08-XX

更新规模:35 commits | +6,800 / -800 lines


重点内容:你现在可以

  • 登录 NodeLoc 账号:官网风格登录页面(两阶段 TOTP),登录后抽屉显示头像等级,支持登出确认。会话持久化,重启应用自动登录。
  • 全站搜索内容:搜索页对齐官网,支持类型筛选、高级筛选器(分类、标签、状态、作者、时间等)、排序选项、帖子模式。右上角搜索快速入口。
  • 查看真实节点列表:抽屉分类改为真实节点列表,加载站点 logo 和节点图标,SVG 图标支持。
  • 及时发现新话题:主页新话题横幅提示,定期检查并显示绿色横幅,点击静默刷新回顶。
  • 查看动图头像:帖子流头像支持动图(官网 _2.gif 版),全局 GIF 解码支持。
  • 识别受限内容:列表受限话题显示锁图标,登录态变色(等级达标绿色,未登录/不达标金色),无权访问话题展示专用页面。

新功能

登录系统

官网风格登录页面(两阶段 TOTP)与抽屉用户区:登录入口、头像等级、登出确认。会话基础设施:CookieJar 持久化 _t,CSRF/登录/登出/当前用户 API 与 SessionRepo。新增 LoginScreen.kt 渲染登录界面,SessionRepository.kt 管理会话状态,AuthApi.kt 调用登录 API。(8189f1d, c1a0a85

搜索功能

搜索页对齐官网全页搜索:类型筛选、高级筛选器(分类、标签、状态、作者、时间等)、排序选项、帖子模式。右上角搜索接入全站搜索(防抖 + 匹配片段)。新增 SearchScreen.kt 渲染搜索界面,SearchRepository.kt 调用搜索 API。(b37fd5b, e378c8e

抽屉导航

添加原生字标加载动画。分类改为真实节点列表并加载站点 logo(coil-svg 支持 SVG 图标)。节点改用站点上传的真实图标,缺失时回退分类色点。新增 DrawerContent.kt 渲染抽屉内容,CategoryRepository.kt 获取节点列表。(3ef17ff, 912b74e, 39bdd1a

新话题提示

主页对齐官网新话题提示:定期检查并显示绿色横幅,点击静默刷新回顶。新增 NewTopicBanner.kt 渲染横幅,TopicRepository.kt 检查新话题。(5d1b379

动图支持

帖子流头像支持动图(官网 _2.gif 版),全局 Coil 挂载 GIF/SVG 解码。新增 ImageLoader 配置 GIF 解码器。(8e478f5

权限与访问控制

列表受限话题显示锁图标。登录态变色:等级达标绿色 #4CAF50,未登录/不达标金色 #FF9800。列表锁图标改用官网 lc-lock 线框锁(未登录统一金色 #FF9800)。无权访问/不存在话题展示官网风格专用页面。新增 AccessDeniedScreen.kt 渲染专用页面,TopicListItem.kt 显示锁图标。(4e1e1de, 0ce70e6, aaa24cc


修复

全局字号调整

全局字号较 Material 默认下调一档,贴近官网移动端观感。修改 Theme.kt 字号配置。(ab3d522

列表标记对齐官网

列表标记对齐官网:置顶显示图钉,信任等级限制话题显示锁。修改 TopicListItem.kt 标记渲染逻辑。(4b7530d

主页自动加载

主页滑到底部自动加载下一页,失败后停止避免无限重试。修改 TopicListScreen.kt 分页逻辑。(18a7474

详情页标题修复

详情页头部标题改用接口返回的最新话题名。修改 TopicDetailScreen.kt 标题显示逻辑。(a153f82

加载动画居中

加载动画按实际墨迹包围盒居中,消除水平偏移。修改 LoadingAnimation.kt 布局逻辑。(184da95

自定义表情大小

自定义表情改行内 20px 不再遮挡文字。正文图片应用内缩放预览。等级限制帖渲染官网同款锁提示卡片。修改 CookedText.kt 表情渲染逻辑。(8466375

加载字标高度

加载字标默认高度 64dp 调整为 44dp。修改 LoadingAnimation.kt 高度配置。(c7f535d

顶栏 logo 校准

顶栏 logo 按官网实测校准至 30dp/条高 52dp。修改 TopBar.kt logo 大小。(ab08419

修复分类色崩溃

修复分类色崩溃、身份徽章硬编码与协议相对 URL。修改 CategoryColor.ktBadgeText.kt 解析逻辑。(8afe9f5

修复编译错误

修复 Compose 与 Jsoup 编译错误。修改依赖版本和导入语句。(dbe00ad

对齐嵌套回复

对齐 Discourse 回复与主题分页。对齐嵌套回复与富文本渲染。修改 PostList.ktCookedText.kt 渲染逻辑。(893671e, 89e62e2


下载与安装

访问 Releases 下载对应版本。


NodeLoc App v0.1.0

NodeLoc App v0.1.0

NodeLoc App 首个版本,基于 Kotlin + Jetpack Compose 构建的 Android 原生应用。实现 NodeLoc 话题列表浏览、话题详情页阅读、基础 Discourse API 集成、Material 3 深色/浅色主题、基础 Markdown 渲染、图片预览功能。官方 14 套可选色板实测与色板驱动主题架构。列表详情双屏导航,全部可交互元素增加按压反馈。顶栏字标图标与启动图标,官方描线加载动画(WebView 直渲)。固定发布签名密钥库入仓(更新包签名一致化)。构建 Release 的 GitHub Actions 工作流,支持全 ABI 构建(arm64-v8a、armeabi-v7a、x86_64、x86)。

发布日期:2026-08-XX

更新规模:27 commits | +5,200 / -0 lines


重点内容:你现在可以

  • 浏览 NodeLoc 社区话题:话题列表浏览,支持滚动加载、下拉刷新、话题卡片展示。
  • 阅读话题详情:话题详情页阅读,支持楼层展示、GIF 头像环、回复条、富文本渲染。
  • 切换深色/浅色主题:Material 3 深色/浅色主题,系统深浅自动切换,官方 14 套可选色板。
  • 预览图片:图片预览功能,点击图片进入全屏预览,支持缩放、滑动切换。

新功能

话题列表浏览

NodeLoc 话题列表浏览,支持滚动加载、下拉刷新、话题卡片展示。新增 TopicListScreen.kt 渲染列表界面,TopicRepository.kt 获取话题数据。(4b28501

话题详情阅读

话题详情页阅读,支持楼层展示、GIF 头像环、回复条、富文本渲染。新增 TopicDetailScreen.kt 渲染详情界面,PostRepository.kt 获取帖子数据。(cd26c69

Material 3 主题

Material 3 深色/浅色主题,系统深浅自动切换,官方 14 套可选色板实测与色板驱动主题架构。新增 Theme.kt 主题配置,ColorScheme.kt 色板定义。(817f90e, 4b28501

基础 Markdown 渲染

基础 Markdown 渲染,支持标题、列表、引用、代码块、链接、图片等基础语法。新增 CookedText.kt 渲染 Markdown 内容。(cd26c69

图片预览功能

图片预览功能,点击图片进入全屏预览,支持缩放、滑动切换。新增 ImagePreviewScreen.kt 渲染预览界面。(cd26c69

双屏导航

列表详情双屏导航,平板/折叠屏支持双栏布局。新增 NavigationHost.kt 管理导航逻辑。(cd26c69

按压反馈

全部可交互元素增加按压反馈,提升交互体验。修改可点击组件的 clickable 配置。(c488804

品牌元素

顶栏字标图标与启动图标,官方描线加载动画(WebView 直渲)。新增 LoadingAnimation.kt 渲染加载动画,ic_launcher.xml 定义启动图标。(b46ad3d, e2b0e45

签名密钥库

固定发布签名密钥库入仓(更新包签名一致化)。启用 v1 签名便于签名校验与老工具识别。新增 keystore/release.keystore 密钥库文件。(3e2e90d, 9c7776b, 9bbbcef

GitHub Actions 工作流

构建 Release 的 GitHub Actions 工作流,支持全 ABI 构建(arm64-v8a、armeabi-v7a、x86_64、x86)。新增 .github/workflows/release.yml 工作流文件。(ed99548


设计探索

首页话题流三方向设计画布

首页话题流三方向设计画布(A 原生 Material / B 暖夜阅读 / C 描边品牌),支持键盘 1/2/3、方向键、记忆选择切换。新增 design/index.html 设计画布。(a22a9f7, 621665b, 291ed31, 6aee697

NodeLoc 网页版实测笔记

NodeLoc 网页版布局/样式/菜单实测笔记(深浅色+抽屉结构)。新增 docs/nodeloc-web-analysis.md 实测笔记。(964d4a2

官方 14 套色板实测

官方 14 套可选色板实测与色板驱动主题架构决策。新增 docs/color-palette-analysis.md 实测笔记。(817f90e


修复

包名修复

包名 fun.lezi.nodeloc 含硬关键字 fun 导致全量编译错——迁移至 app.nodeloc。修改所有文件的包名声明。(e65449a

编译修复

修复 Long+String 拼接/object 内 companion/FontVariation 实验 API OptIn。修复重复 @file:OptIn。修复 PathParser 方法名 parsePathString。(ae99b0e, 472e1d3, 2e1e6c4

CI 修复

显式指定 release 签名 storeFile,修复 AGP 在 runner 上的 XDG 路径解析。构建前生成调试密钥库修复 validateSigningRelease + gradle 缓存。(3510752, 8e46cb8


下载与安装

访问 Releases 下载对应版本。


致谢

感谢 NodeLoc 社区的支持,感谢所有测试用户的反馈。NodeLoc App 是一个开源项目,欢迎贡献代码和提出建议。


协议

NodeLoc App 采用 MIT License 开源协议。

7 个赞

:xhj002: 太强了啊

老詹,我能把我弄出来的api接口和鉴权分享给他可以吗?
nodeloc mcp也写好了…
话说能不能开放一下user-api-key啊… cookie有点麻烦…

可以的

更新了,顶一下

太顶了

6 啊 很多问题我都还没处理

1 个赞

强强

比如那些(

才找到,哈哈:joy:

前几天更新一直没来得及发

官方的开源了

这么好,我看看

iOS呢,怎么没看到动静了;

1 个赞

丰富

上次要求iOS26.0;难搞

@James