Repository navigation
Releases: Lokeily/Earthquake-Sentinel
Release list
地震哨兵 v1.4.3 — 先到先发 · 官方源优先 · 告警页对齐 ICL
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 完整版
一句话总结: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 通过 |
六、已知限制
- Wolfx 单点依赖:CENC / 四川局 / 重庆局 / CWA 四条 WebSocket 均托管于
ws-api.wolfx.jp单一域名,该网关故障时四源同时不可用(近期 503 即属此情形)。此时 ICL 官方源(mobile-new.chinaeew.cn)为唯一独立实时链路,仍可正常预警。引入第二家互不包含的中转商已列入后续版本计划。 - 在线自学习关闭:为主动设计决策,非缺陷。
校验信息
| 项 | 值 |
|---|---|
| 文件 | 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
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
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)
recordBatchupsert 落盘修复:批内全为已有地震修正报时更新不再丢失- 融合缓存
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
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写入容错