// readme

LinuxSB

基于对 linux.sb 网页解析制作的第三方 Android 社区客户端,使用 Kotlin + Jetpack Compose 构建,遵循 Material Design 3 设计规范。

本项目仅作学习交流用途,所有数据内容均来自 linux.sb 源站,版权归原网站及发帖用户所有。

功能特性

  • 浏览:首页分类(新评论 / 新帖子 / 精华)、板块列表、搜索、无限滚动与翻页双模式(可按首页 / 板块 / 帖子分类生效)
  • 帖子:楼层跳转与高亮、#楼层号对话串联、代码块折叠与复制、评论排序、打赏弹幕、导出 HTML / Markdown / 长图
  • 互动:登录、发帖、回帖、点赞、投币、举报、每日签到、用户榜单、通知、私信
  • 个性化:HCT 主题引擎(主题色 / 调色风格 / 对比度)、卡片元素级改色、深浅模式与 OLED 纯黑、动态取色
  • 工具:AI 帖子总结(OpenAI 兼容 API)、本地浏览历史、屏蔽词 / 屏蔽用户、本地缓存分析、设置备份(JSON / WebDAV)
  • 更新:应用内检查 GitHub Release 新版本,可配置检查时机

下载

前往 Releases 下载最新版本:

文件名适用设备
LinuxSB-vX.Y.Z-armv8a.apk64 位 ARM 设备(主流现代手机)
LinuxSB-vX.Y.Z-armv7a.apk32 位 ARM 设备(旧设备)
LinuxSB-vX.Y.Z-universal.apk通用版(包含全部架构,体积较大)

构建

# 克隆仓库
git clone https://github.com/Mei-Nagano/LsbViewer.git
cd LsbViewer

# 构建 Debug APK(输出三个架构版本)
./gradlew assembleDebug

# 构建 Release APK(默认使用仓库内测试 keystore,可用环境变量覆盖)
LSB_STORE_FILE=/path/to.jks LSB_STORE_PASSWORD=*** LSB_KEY_ALIAS=*** LSB_KEY_PASSWORD=*** \
  ./gradlew assembleRelease

要求:JDK 17+,Android SDK 35。

推送 v* 标签(如 v1.0.0)后 GitHub…

The Undervalued Score +

How much a project earns versus how much attention it actually gets. Above 50 means the work is outrunning its audience. Recomputed nightly from commit velocity, contributor effort, issue resolution, fork utility, release cadence, and project maturity — divided by a logarithmic reach factor.

score  = signal / reach

signal = 0.25·commit_velocity   // commits in last 90 days (cap 30)
       + 0.20·contributor_work  // unique authors × velocity (cap 100)
       + 0.20·issue_resolution  // closed ÷ total issues
       + 0.20·fork_ratio        // forks ÷ stars (proxy for real usage)
       + 0.10·release_cadence   // releases in 90 days (cap 3)
       + age_bonus              // +0 to +0.30 after 6 months
       + homepage_bonus         // +0.05 if homepage is set

reach  = log₁₀(stars + watchers + 10)
The Health Score +

Is the project alive and maintained right now? A 0–100 pulse recomputed nightly from commit recency, rhythm, how fast issues close, and how quickly PRs get merged.

health = 0.35·recency       // days since last commit (90d decay)
       + 0.25·cadence       // commit rhythm consistency
       + 0.20·issue_health  // closed ÷ total issues
       + 0.20·pr_health     // merged ÷ total PRs
Health bands +

The colour and label on every card come straight from the health score.

Healthy   80 – 100   active, responsive, regular releases
Stable    60 – 79    maintained, steady, no alarms
Quiet     40 – 59    slowing down — watch this one
At Risk    0 – 39    going dark · candidate for rescue
// Tags — what each label means +

Tags are independent behavioral signals computed nightly. A project can hold multiple at once. They drive the home page sections.

solo_builder      one person holds > 80% of commits (last 180d)
needs_contributors has open "help wanted" or "good first issue" labels
hidden_gem        < 100 stars · active in last 3 months · documented
legacy_hero       repo > 5 years old · committed this year
fork_magnet       forks/stars > 0.5 · used as template or dependency
release_machine   5+ releases in the last 90 days
under_pressure    > 10 open issues · ≤ 2 contributors · health ≥ 60
community_watch   watchers > stars · devs tracking before the public
community_hub     GitHub Discussions enabled · > 20 discussions
funded            maintainer has active funding channel
Why rank against stars at all? +

Stars are an outcome, not effort. A project with 8 stars and daily commits is doing more interesting work than one coasting on 8k. We measure the building, then divide by the attention already received — so the genuinely undervalued rise to the top.

// stars   = lagging indicator
// commits = leading indicator
// we rank by the leading one