Skip to content

Releases: Lokeily/Earthquake-Sentinel

地震哨兵 v1.4.3 — 先到先发 · 官方源优先 · 告警页对齐 ICL

Choose a tag to compare

@Lokeily Lokeily released this 27 Aug 18:26

v1.4.3 更新说明 — 回归初衷:最快、最稳、官方源优先

一句话总结:移除多源融合引擎,改为先到先发——首报烈度达标立即全屏告警,不再等任何第二源;同时接入 CENC 官方目录与 ICL 官方 1 秒增量轮询,官方源优先、wolfx 降为补充与兜底。告警页全面对齐 ICL / 国家标准呈现。


一、告警决策:先到先发(核心)

  • 移除多源融合决策引擎(EewFusion):v1.3.x 的"首报进 1.5s 窗口等第二源交叉验证"会让每场地震的首次告警被人为推迟——在预警盲区边缘,这就是避险时间
  • 现在:任一源首报烈度达标(GB/T 四级:蓝<3° / 黄3-4° / 橙5-6° / 红≥7°)→ 立即全屏告警
  • 修正报到达 → 立即刷新 震级 / 烈度 / 报数 / 倒计时(上修下修均实时更新)
  • 误报防护改由事件归并去重承接:跨机构事件归并(±90s / ≤40km)、同源报数只增不减、同报数跨源去重、10 分钟去重窗口

二、官方实时源:ICL 1 秒增量轮询(近推送延迟)

  • 逆向确认 ICL API 的 start_at 服务端增量过滤语义(updateAt > start_at)
  • 以「已见最大 updateAt」为游标增量拉取:静止期响应仅 ~33B,轮询间隔从 3s 压到 1s
  • 平均接收延迟 1.5s → 0.5s,逼近推送级;带宽从 ~345MB/天降到 ~2.8MB/天
  • ICL 为官方预警发布机构直连域名,完全独立于 wolfx

三、接入 CENC 官方目录(权威数据,最高优先级)

  • 逆向中国地震台网官网 SPA,发现官方数据接口 www.ceic.ac.cn/data/data.json
  • 免鉴权 / HTTPS 有效证书 / 大陆可达;实测 795 条官方目录、覆盖近 8 个月、震级 1.7~7.9
  • 成为历史 / 预警回放的第一优先级数据源;wolfx 镜像按官方 eventId 去重,仅作补充

四、Wolfx 故障自动 HTTP 降级(源异常不再吓人)

  • 实测确认 wolfx 为四个机构均提供与 WS 同构的 HTTP EEW 端点(cenc/sc/cq/cwa_eew.json)
  • WS 连续失败 ≥2 次 → 自动启用同机构 HTTP 轮询(4s),恢复后自动切回
  • 主页状态分层:官方源带「官方」标签;转发源异常且官方在线时显示「转发异常·官方源可用」,
    HTTP 降级时显示「HTTP降级·接收中」——用户能看出预警并未中断,不再满屏惊悚的「源异常·503」

五、告警页对齐 ICL / 国家标准

  • 顶部:预警等级横幅(红色/橙色/黄色/蓝色预警)
  • 中部:大号倒计时 + 「地震波将于 X 秒后到达」提示横幅(每秒实时刷新,抵达后切「地震波已抵达 · 请立即避险」)
  • 震中 / 震级 / 震源深度·距您X公里 + 分级避险指引(一句话行动指令,随等级联动)
  • 倒计时扣除「发震→收报」官方延迟,不再重复计入已流逝时间

六、可靠性

  • Android 15+ dataSync 前台服务 6h 超时 → 自动以 specialUse 类型续期,7×24 常驻不失联
  • 服务僵尸态防护(START_STICKY 拉起但监听已关时自停);主页前台自愈(开关已开但服务未运行 → 自动恢复)
  • 证书固定降级逃生舱全链路接入(WS / ICL / 目录抓取 / 降级轮询 / 更新下载)

七、测试

84 项单元测试全部通过(CoreLogic 78 + 预警链路一致性 6)。


免责声明:本项目仅供学习和研究使用。地震预警涉及生命安全,请以官方预警渠道为准。

地震哨兵 v1.3.2 — 融合引擎 v2.4 完整版

Choose a tag to compare

@Lokeily Lokeily released this 05 Aug 21:34

一句话总结:v1.3.1 的发布包实际跑的是精简版融合逻辑;v1.3.2 才是第一个真正搭载完整版融合引擎的发布版本,同时修掉了一个会影响长期常驻稳定性的内存泄漏。

无破坏性变更,可直接覆盖安装。建议所有用户升级。

版本对比总览:v1.3.1 → v1.3.2

维度 v1.3.1 v1.3.2 影响
融合算法 加权平均 加权中位数 单源报错震级不再拖偏融合结果
融合窗口 固定 1500 ms 动态 1000–1500 ms 多源活跃时抢回约 0.5 s 预警时间
震级校准 无 预训练分桶画像(源 × 震级区间),钳制 ±0.5 级 修正各源系统性高估 / 低估
源权重 静态可靠性权重 可靠性 × 稳定性因子 + 趋势积分 历史波动大的源自动降权
初报/终报 混合处理 分轨建模 预警第一时间的判断不被终报数据污染
版本推送 仅按时间 修正幅度 > ±0.4 级强制推送 避免用户停留在过时判断
长跑内存 🐛 事件状态表只增不减 30 min TTL 淘汰 常驻数月不再持续吃内存
单元测试 66 项 98 项 新增校准与融合专项覆盖
黄色告警标题 「强有感」 「强有感地震」 与其余三级措辞体例一致
告警页震中距 中部 + 底部重复两处 仅底部脚注一处 消除信息冗余
数据源状态 仅「已连接 / 连接中」 新增橙色「源异常·503」 分清"对方挂了"与"我在连"
交互动效 系统默认切换 全局统一转场 + 列表级联入场 观感整体升级
返回控件 文字「‹ 返回」 图标按钮(带水波纹) 三个页面与「更多设置」统一

一、融合引擎 v2.4(核心)

1.1 完整版引擎搭载

v1.3.1 的发布包使用的是兼容精简版融合逻辑(加权平均 + 坐标选优 + 去重)。v1.3.2 起,发布包搭载完整版多源融合决策引擎:

  • 加权中位数融合 —— 取代简单加权平均,从根本上抗单源异常值污染
  • 动态融合窗口 —— ≥2 源近期活跃时窗口由 1500 ms 缩短至 1000 ms,为多源场景抢回约 0.5 s 预警时间;单源时保持保守等待
  • 动态趋势积分 —— 追踪各源震级相对共识的偏移趋势,连续偏高/偏低即动态调权
  • 校准-权重协同 —— 源权重 = 可靠性权重 × 稳定性因子,历史波动大的源自动降权
  • 初报/终报分轨 —— 初报偏差才是预警第一时间真正关心的,分开建模避免混合污染
  • 版本锁机制 —— 修正幅度 > ±0.4 级时强制推送更新

1.2 震级校准模块

新增内置预训练分桶画像,开机即用,无需等待样本积累:

  • 以国际权威地震目录(ISC / USGS FDSN)的中国区正式解作为真值基准,离线统计各数据源相对真值的系统性偏差,按「源 × 震级区间」分桶建模
  • 已知偏差方向:速报目录类源倾向低估,EEW 预警初报类源倾向偏高——引擎按源分别反向修正
  • 修正量钳制 ±0.5 级,防止校准本身成为新的风险源
  • 坐标不修正:实测各源震中与真值偏差已在可接受范围内

在线自学习默认关闭(当前用户规模下在线样本趋近于零,收益不足以抵消开销)。引擎进化改为在开发机本地用训练管道完成,随版本更新内置。

1.3 🐛 内存泄漏修复(重要)

问题:融合引擎中 4 张按事件累积的状态表(lastOutput、eventVersion、eventTrendBonus、eventTrendStreak)此前只增不减。作为常驻前台服务,其占用随累计处理的地震次数单调增长,长周期运行(数月不重启)下会持续吃掉内存。

修复:引入事件级 lastTouch 时间戳,超过 30 分钟无活动的事件状态随 cleanupStale 周期一并淘汰,使内存占用在长周期运行下有界。

这是本次更新中唯一影响长期稳定性的实质缺陷修复。本应用的主要使用方式正是"把旧手机插电当哨兵"长期常驻,建议所有用户升级。

1.4 测试覆盖

单元测试由 66 项提升至 98 项,全部通过(CoreLogic 66 + FusionCalibration 27 + EewFusion 5)。


二、告警页修正

  • 黄色等级文案:预估烈度 3–4° 的告警标题由「强有感」修正为「强有感地震」,与红/橙/蓝三级措辞体例一致
  • 移除重复震中距:告警页此前存在两处震中距展示,本次移除中部冗余行,底部脚注作为唯一距离信息源保留完整内容(第 X 报 · 来源 · 距您 XX km · 时间)。「我已安全 / 停止警报」按钮区域未做任何改动

三、界面与动效

位置 动效
页面转场 淡入 + 轻微缩放(0.96→1.0,280 ms)
底部 Tab 切换 Fragment 淡入淡出(200 / 150 ms)
更多设置 右侧滑入 + 淡入(300 ms),返回反向滑出
历史列表 逐项级联入场(上移 16 dp + 淡入)
设置页浮层 上浮缩放入场 → 停留 2.2 s → 下沉淡出

⚠️ 告警页刻意不加任何动画。全屏告警是生命安全场景,任何入场动效都是对逃生时间的浪费——保持瞬时弹出。

此外:免责声明 / 使用引导 / 测试报警三页的返回控件统一为图标按钮;移除设置页卡片下方的冗余说明小字。


四、连接状态显示

数据源状态新增服务端异常独立展示:源返回 HTTP 错误(如 503)时显示橙色「源异常·503」,与灰色「连接中…」区分开,让用户一眼分清"是对方服务器挂了"还是"我这边网络在连"。源恢复后自动转回绿色「已连接」。


五、发布前安全审计

审计项 结果
密钥泄露(git 历史 / 当前跟踪) ✅ 无 .jks / local.properties / keystore
硬编码令牌扫描 ✅ 无任何硬编码 API Key / Token / 密码
组件导出面 ✅ 仅 Launcher MainActivity 导出,其余全部 exported=false
FileProvider ✅ exported=false + 路径白名单
数据备份 ✅ allowBackup=false
明文流量 ✅ usesCleartextTraffic=false,全链路 HTTPS/WSS
权限清单 ✅ 11 项权限均有实际使用点,无冗余申请
API 21–22 兼容 ✅ canDrawOverlays 三处调用点均有版本守卫
R8 资源保留 ✅ keep.xml 覆盖全部动态引用的 raw 音频资源
单元测试 ✅ 98/98 通过

六、已知限制

  1. Wolfx 单点依赖:CENC / 四川局 / 重庆局 / CWA 四条 WebSocket 均托管于 ws-api.wolfx.jp 单一域名,该网关故障时四源同时不可用(近期 503 即属此情形)。此时 ICL 官方源(mobile-new.chinaeew.cn)为唯一独立实时链路,仍可正常预警。引入第二家互不包含的中转商已列入后续版本计划。
  2. 在线自学习关闭:为主动设计决策,非缺陷。

校验信息

项 值
文件 Dianguard-v1.3.2.apk
大小 9,341,580 bytes (8.91 MB)
SHA-256 ceb06dc0e7ef7159f16d41c21d4c09cc5f6ab1acd53951e3e5fab7c57f374ea1
versionCode 25
minSdk / targetSdk 21 (Android 5.0) / 34 (Android 14)

完整更新细则见仓库内 CHANGELOG-v1.3.2.md。


免责声明:本项目仅供学习和研究使用。地震预警涉及生命安全,请以官方预警渠道为准。

v1.3.1

Choose a tag to compare

@Lokeily Lokeily released this 04 Aug 17:30

v1.3.1 更新说明

🎯 本版核心:预警等级全面对齐中国地震局官方标准

🚨 分级标准修正(v1.3.1)

  • 预警等级改按「本地预估烈度」划分(此前误用震级对应颜色,已彻底移除):
    • 🔴 Ⅰ级 红色:本地预估烈度 ≥ 7度(灾害性预警)
    • 🟠 Ⅱ级 橙色:本地预估烈度 5–6度(灾害性预警)
    • 🟡 Ⅲ级 黄色:本地预估烈度 3–4度(告知性预警)
    • 🔵 Ⅳ级 蓝色:本地预估烈度 < 3度(告知性预警)
  • 删除按震级分级的 warningLevel(震级) 函数,全应用(告警页 / 历史页 / 配色 / 语音分级)统一走烈度判定
  • 历史记录页新增 recordLevel():解析记录中的预估烈度值着色;无烈度数据的备用源速报以灰色占位
  • 「轻微地震」标签改为纯蓝色等级(烈度 < 3°)判断

🔧 随附修复(自 v1.3.0)

  • 告警阈值默认 3°(避免告警疲劳);取消云南普洱兜底坐标
  • 未设置参考位置时阻断开启预警监听
  • 证书固定(Certificate Pinning)6 域名双 pin,防中间人注入虚假预警
  • 签名密钥 / 密码从版本库历史彻底清除(环境变量注入)

⚠️ 升级提示:升级后历史记录列表的等级颜色将按「预估烈度」重新着色(烈度数据缺失的历史条目显示为灰色),这是对齐官方标准后的预期行为。

v1.3.0

Choose a tag to compare

@Lokeily Lokeily released this 04 Aug 17:06

v1.3.0 更新说明

🎯 与 v1.1.0 的核心变化(跨 v1.2.0 → v1.3.0 两大版本)

🧠 全新 EewFusion 多源融合决策引擎(v1.3.0 最大亮点)

  • 加权中位数震级融合:多个数据源视为独立"专家",抗异常值,单个源偏差不会主导结果
  • 坐标选优(Centroid Selection):取权重最高源的原始坐标,严禁加权平均,保证物理意义正确
  • 1.5s 融合窗口:窗口内收集多源报文交叉验证,单源初报标记 isPreliminary 禁止触发红色预警
  • 动态趋势积分:连续 2 次高于共识 → 权重 +10%(震级爬坡期奖励);连续 3 次不变 → 归零;单事件加成封顶 ±20%
  • 15km 坐标死区:防止倒计时高频抖动;按 quakeKey 版本隔离,余震不覆盖主震状态

📡 数据源升级:真正的双路域名独立冗余(v1.3.0)

  • 新增 ICL 成都高新减灾研究所官方源(mobile-new.chinaeew.cn,HTTP 3s 轮询)——中国官方预警系统,31 省覆盖,域名与 Wolfx 完全独立
  • Wolfx CENC WebSocket 秒级推送(ws-api.wolfx.jp)继续为主实时源
  • 两路实时源报文共同进入 EewFusion 融合引擎交叉验证,单点故障不再导致预警失效
  • Project Podris 解析器已就绪并接入调用链(待取得 wsUrl 即可启用第三路)
  • 移除 BeeCLD·2v8(令牌改由用户自行填写)与 FAN Studio(需 API 密钥)

🔒 安全加固(v1.3.0)

  • 证书固定(Certificate Pinning):wolfx / chinaeew / usgs / emsc / bigdatacloud 全部双 pin(leaf + 中间 CA),防中间人注入虚假地震预警
  • 签名密钥泄露治理:dianguard-release.jks 与含密码的 local.properties 从版本库历史彻底清除(此前 v1.1.2 起误入仓库);签名凭据改支持环境变量注入(DIANGUARD_STORE_PASSWORD 等)
  • 默认烈度阈值由 2° 上调至 3°(明显有感),避免告警疲劳(狼来了效应)
  • 取消云南普洱兜底坐标:未设置参考位置时不再用错误坐标计算,服务端兜底只记录不告警
  • 未设置参考位置时阻断开启预警监听(弹窗引导前往设置页获取位置)

🐛 关键缺陷修复(v1.3.0)

  • recordBatch upsert 落盘修复:批内全为已有地震修正报时更新不再丢失
  • 融合缓存 pendingFusionMeta 泄漏清理
  • 解析回退链接入 parsePodrisEew,Podris 格式报文可被识别

📋 告警系统重构(v1.2.0,自 v1.1.0 起)

  • 告警阈值改为本地烈度判定(汪素云等 2000 短轴衰减),不再按震级一刀切,消除远震误报
  • 四级预警配色标准化(红/橙/黄/蓝),全软件统一
  • 三段式真实语音(短语循环 → 逐秒倒计时 → 警报循环),走 ALARM 流、锁屏/静音最大音量
  • 余震正确切换(onNewIntent)、WakeLock 无条件续期、启动冷静期 15s

📊 历史记录与界面(v1.2.0,自 v1.1.0 起)

  • 历史主源改为中国地震台网速报目录 + USGS/EMSC 双兜底
  • 深色模式默认开启(OLED 纯黑省电);繁体地名自动转简体
  • 设置页只显示中文地名,绝不暴露裸经纬度

🧪 质量与工程

  • 66 项单元测试全部通过(覆盖解析 / 烈度衰减 / 多源融合 / 跨源去重)
  • lint 质量门禁开启(abortOnError=true)
  • 全部权限均有明确功能对应,无冗余;崩溃日志坐标自动脱敏

⚠️ 升级提示:若从 v1.1.0 升级,首次打开会因"未设置参考位置"提示前往设置页获取位置(v1.3.0 新增的强制前置条件),获取后即可正常开启预警监听。默认阈值已调整为 3°,可在设置页切换回 2°(更灵敏)。

v1.2.0

Choose a tag to compare

@Lokeily Lokeily released this 03 Aug 00:25

v1.2.0 更新说明

与 v1.1.0 的关键变化

🚨 告警系统重构(核心安全改进)

  • 告警阈值改为本地烈度判定:不再用震级一刀切,改为按震中距+深度+震级估算用户所在地烈度(汪素云等2000短轴衰减模型),避免远震误报。
  • 四级预警配色标准化:红/橙/黄/蓝严格对应震级分级,全软件统一配色(AlertActivity/HistoryFragment/TestAlarmActivity)。
  • 三段式真实语音播报:采用真实大陆预警录音(非TTS),短语循环 → 逐秒倒计时 → 警报循环,全程走ALARM流、锁屏/静音下最大音量。

📡 数据源全面升级

  • 新增 BeeCLD·2v8 独立主机(api.2v8.cn/ws/cea):中国地震预警网CEA国家级秒级预警源,与Wolfx完全独立,去单点设计。
  • FAN Studio 鉴权握手代码已就绪(需用户配置API密钥后启用)
  • 备用探测源增强:USGS + Wolfx HTTP + EMSC 三级兜底,主链路全断时自动激活。

📋 历史记录大幅改进

  • 主源改为中国地震台网速报目录(api.wolfx.jp/cenc_eqlist.json),中文地名/震级/深度齐全
  • USGS FDSN + EMSC FDSN 双兜底
  • BigDataCloud 免密钥逆地理编码 + 内置省级边界表
  • 顶部特色卡片 + 等级色列表,标注来源与本地预估烈度

🎨 界面与体验

  • 深色模式默认开启(OLED纯黑省电,适配常亮旧手机)
  • 设置页参考位置只显示中文地名(Geocoder → BigDataCloud → 省级表三级兜底),绝不显示裸经纬度
  • 模拟预警以周边真实城市为震中,完整模拟全屏告警流程
  • 告警页排版优化:大数字倒计时、「秒」紧随数字、归零显示「地震波已抵达」
  • 全局字体统一为简体中文(内嵌Noto Sans SC)
  • 繁体地名自动转简体(离线字符映射表)

🔧 工程改进

  • 核心算法抽为顶层纯函数,56个单元测试全部通过
  • 多源连接管理重构(EewConnectionManager/EewAlertManager职责分离)
  • WakeLock无条件续期(消除4小时失效窗口)
  • 启动冷静期15秒(防止BeeCLD补推历史EEW误弹告警)
  • 返回键拦截(告警页只能点「我已安全」解除)
  • 崩溃日志坐标自动脱敏

🔒 安全增强

  • BEECLD_TOKEN从源码硬编码迁移到BuildConfig注入
  • Doze休眠白名单引导
  • 历史记录SP写入容错

v1.1.0

Choose a tag to compare

@Lokeily Lokeily released this 01 Aug 19:54

Earthquake Sentinel v1.1.0 - Multi-source EEW, OLED dark mode, Disclaimer