Repository navigation
Releases
eSIM-Matrix v1.4.7 — 虚拟定位与代理独立控制台 + 定位远程通道
🆕 eSIM-Matrix v1.4.7 (build 147)
这一版把虚拟定位和代理从"切卡流程的附属品"变成了两个能独立使用的工具,并给虚拟定位补上了远程通道。
🧭 两个独立控制台(不需要写卡)
底部标签栏新增 虚拟定位 与 代理,管理页顶栏也有入口。
虚拟定位
| 区块 | 内容 |
|---|---|
| 状态 | 注入状态、当前坐标、生效通道(真实注册的测试 Provider)、双通道权限 |
| 通道 | 系统模拟位置 / Shizuku 注入,可切换 |
| 注入 | 一键注入 / 停止注入 |
| 地点 | 常用模板(可搜索、可删自定义)/ 手动经纬度(带范围校验、可存模板) |
| 联动 | 切卡时自动注入对应国家定位 |
代理控制台
控制器地址 / Secret / 策略组 → 策略组下拉 → 当前节点 → 节点列表(类型徽章、延迟徽章、单点测速、全部测速、切换)→ 自动化开关。控制器不可达时降级为提示,不抛异常。
📡 虚拟定位可以远程操作了
之前代理有完整的 HTTP + Telegram 通道,定位一条都没有。
GET /api/v1/location 状态(注入中、坐标、通道、权限)
POST /api/v1/location { latitude, longitude, label?, mode? }
DELETE /api/v1/location 停止
Telegram:
/location 状态 + 用法
/location 22.3193 114.1694 香港尖沙咀
/location 22.3193,114.1694 逗号也认
/location_stop 停止
Web 面板新增「虚拟定位」卡片与顶部状态胶囊;纯文本 /status 也会显示 📍 虚拟定位:🟢 正在注入【香港尖沙咀】 (22.3193, 114.1694)。
注入失败会如实返回 409 {success:false, error:"injection_failed"},不会用 200 让人以为位置变了。
🔒 注入不再随时消失
新增前台服务:注入期间进程被系统保活,通知栏显示当前虚拟位置,并带一个「停止定位」按钮。
此前注入只是内存里每秒推一次,进程被回收后定位会静默失效,而界面还写着「🟢 正在注入」——这是谎报。
🎯 修掉会误导人的地方
| 问题 | 修复 |
|---|---|
代理节点列表把 PASS、REJECT-DROP 和组外节点一起列出,点了被控制器拒绝 |
只显示当前策略组的成员,标题写明组名与数量 |
| 没有任何测试 Provider 注册成功时仍报「注入成功」 | 如实返回失败,并把 Provider 列表回传给界面 |
Shizuku 模式每秒 fork 一次 cmd location 进程 |
改为 5 秒节流 |
| 控制台每次打开都跳回第一个内置模板 | 记住上次注入的坐标 |
| 「全部测速」串行,7 个节点最坏 35 秒 | 并发 4 路 |
| 联动开关在三个页面各有一份,互不同步 | 只保留在各自控制台,并监听设置变化 |
🧹 短信转发页精简
- 删掉与代理控制台重复的三个输入框和两个测试按钮,换成两个跳转按钮;
- 6 个开关改为即时保存(原来改了不点保存等于没改);
- 历史记录、远程下卡/切卡/删卡、切卡自动化三张卡片默认折叠,页面从 5 屏回到 1 屏。
✅ 验证
| 检查 | 结果 |
|---|---|
dart analyze lib test |
No issues found |
| 全量测试 | 984 项全部通过 |
| 实机(25102RKBEC / Android 16) | 注入后 dumpsys location 确认 network/fused provider 均为 mock 坐标;停止后消失 |
| 实机代理 | 连上 FlClash v1.19.33,切节点后控制器 now 同步变化,测速返回真实新值 |
| 三证书 v2 签名 | ESTK C47350… + 9eSIM D1C0F4… + SakuraSIM 65D057… 全部匹配 |
📦 安装说明
- APK:
eSIM-Matrix-v1.4.7.apk(arm64-v8a),可直接覆盖升级并保留全部数据。 - 已安装 1.4.6 及更早版本的用户会通过应用内更新检查收到本次更新。
- 虚拟定位的两种通道:系统模拟位置需在「开发者选项 → 选择模拟位置信息应用」中选择本应用;Shizuku 模式需启动并授权 Shizuku。
eSIM-Matrix v1.4.6 — 读卡自动复位与更准确的失败提示
🆕 eSIM-Matrix v1.4.6 (build 146)
🩺 读卡自动复位(不用再重启手机)
背景:卡片的逻辑通道若被「中途被杀掉的进程」留在半开状态,之后所有 SELECT 都会被拒,界面显示「不支持该卡」。此前的恢复手段只有「关闭全部通道后重试一次」,对半开会话无效——只有重启手机才能恢复。
本次改动(lib/adapter/omapi/omapi_adapter.dart):
- 关通道重试仍失败时,再升级一步:断开会话 → 重新连接 → 重新开通道(等效于重启对这张卡做的事,但只需 1~2 秒);
- 该升级带 10 秒冷却,避免连续失败时反复抖动;
- ARA-M 明确拒绝时不重试——那是权限问题,重连没有意义,仍然直接报权限错误;
- 成功后写日志
openChannel for <AID> recovered after a session reset,便于排查。
💬 读卡失败提示更准确
原来的文案只说「此卡可能不是有效的 eUICC」,会让人误判卡坏了。现在改为:
找不到 eUICC 管理应用程序 (ISD-R)。此卡可能不是 eUICC;若刚崩溃、切卡中途退出或被其他程序占用,请切一次飞行模式或重启手机后再试。
(英文与繁体中文同步更新)
✅ 验证
| 检查 | 结果 |
|---|---|
dart analyze lib test |
No issues found |
test/services + test/pages |
242 项全部通过 |
| 更新源选择测试 | 5 项通过(指向 1.4.6 / build 146) |
| 沙箱构建 + 三证书签名 | 成功,62.5 MB |
📦 安装说明
- APK 文件:
eSIM-Matrix-v1.4.6.apk(arm64-v8a,三证书 v2 签名:ESTKC47350...+ 9eSIMD1C0F4...+ SakuraSIM65D057...),可直接覆盖升级并保留全部数据。 - 已安装 1.4.4 / 1.4.5 的用户会通过应用内更新检查收到本次修复。
eSIM-Matrix v1.4.5 — 修复网络状态页偶发空白
🆕 eSIM-Matrix v1.4.5 (build 145)
🐞 修复:「网络状态」偶发空白,必须清后台重开
现象:进入「网络状态」页有时不显示任何数据,切走再切回无效,只能杀进程重进。
根因(不是网卡、不是权限):
页面在订阅事件流之后同一帧就调用 refresh()。此时平台侧的 onListen 可能还没送达,插件的处理是:
if (eventSink == null) {
result.error("not_listening", ...) // ← 直接报错返回
return
}页面收到 not_listening 后进入错误态,且没有任何重试;而 startMonitoring() 的首帧 publish() 又可能早于 Dart 侧真正挂上监听,于是这一页就永远停在空白,直到进程重启。
修复:
refresh不再因为订阅尚未就绪而报错:它会主动启动监听,并直接回传实时快照;- 新增
snapshot方法,作为一次性的兜底读取; - 页面拿到返回值即渲染,若调用仍失败则静默重试一次(400 ms)。
✅ 验证
| 检查 | 结果 |
|---|---|
| 冷启动后立即点开「网络状态」 | 无 not_listening、无 E flutter |
| 新增单元测试(refresh/snapshot 契约) | 3 项通过 |
dart analyze lib test |
No issues found |
全量 test/services + test/pages |
243 项通过 |
📦 安装说明
- APK 文件:
eSIM-Matrix-v1.4.5.apk(arm64-v8a,与旧版相同的三证书 v2 签名:ESTKC47350...+ 9eSIMD1C0F4...+ SakuraSIM65D057...),可直接覆盖升级并保留全部数据。 - 已安装 1.4.4 的用户会通过应用内更新检查收到本次修复。
eSIM-Matrix v1.4.4 — 修复 QRTR 读卡器 JNI 符号错位
🆕 eSIM-Matrix v1.4.4 (build 144)
🐞 关键修复:QRTR 读卡器完全不可用
改包名后,Rust 侧 5 个 JNI 导出函数仍按上游包名注册,导致 QrtrUserService 的原生方法一个都找不到:
E JavaBinder: java.lang.UnsatisfiedLinkError: No implementation found for
int io.github.hg552.esimmatrix.QrtrUserService.nativeOpenBus()
E AndroidRuntime: FATAL EXCEPTION: binder:17562_1
- 根因:
rust/src/qrtr_bus.rs中nativeOpenBus/nativeBusNode/nativeSend/nativeReceive/nativeCloseBus的符号名仍是Java_ee_nekoko_nlpa2_QrtrUserService_*,而 Kotlin 类已迁至io.github.hg552.esimmatrix.QrtrUserService。 - 实际影响:
- QRTR 通道彻底失效——在 Qualcomm 机型上,这是 ROM 未把卡槽暴露给应用 OMAPI 时的主要兜底读卡路径;
- 每次探测都让
shell用户的服务进程抛FATAL EXCEPTION并被重启,实测约每秒一次,持续刷日志、空耗 CPU。
- 修复:5 个符号全部改为
Java_io_github_hg552_esimmatrix_QrtrUserService_*,与当前包名一致。
✅ 实机验证(Redmi 25102RKBEC / SM8850 / Android 16 / HyperOS V816 / KernelSU)
| 检查项 | 结果 |
|---|---|
| 安装与启动 | 1.4.4 (144) 覆盖安装成功,进程稳定无崩溃 |
| Root / Shizuku | KernelSU uid=0 正常;Shizuku 服务常驻 |
| eUICC 读取 | omapi:SIM2 正常,卡内 4 个 Profile 全部枚举 |
| QRTR 原生符号 | 修复后不再出现 UnsatisfiedLinkError,服务进程不再反复崩溃 |
📦 安装说明
- APK 文件:
eSIM-Matrix-v1.4.4.apk(arm64-v8a,与旧版相同的三证书 v2 签名:ESTKC47350...+ 9eSIMD1C0F4...+ SakuraSIM65D057...,可直接覆盖升级并保留全部数据)。 - 已安装 1.4.3 的用户会通过应用内更新检查收到本次修复。
eSIM-Matrix v1.4.3 — APDU大写规范化与基带搜网加速保底
🆕 eSIM-Matrix v1.4.3 (build 143)
🚀 APDU 大写规范化(规避冷门基带 Modem 异常)
- 零拷贝高性能 Hex 编码器:新增
HexUtils.bytesToHexUpper,直接在字节级直写大写十六进制字符,消除二次堆内存分配开销。 - 底层通信通道全链路大写:
TelephonyAdapter、OmapiAdapter、NBridgeAdapter、AdbBridgeAdapter、RemoCardAdapter、CcidAdapter、SimLinkAdapter全面升级为发送大写十六进制 APDU;- Android Kotlin 原生插件(
TelephonyPlugin.kt、OmapiPlugin.kt、AdbBridgeServer.kt)的ByteArray.toHex()统一修正为"%02X",彻底杜绝部分 Unisoc(紫光展锐)或老旧高通 Modem 固件拒收小写 Hex 报ERROR的隐形兼容性缺陷。
⚡ 基带漫游搜网加速保底机制(Kick Fallback)
- 状态机自动超时踢网保底:切卡进入
waiting_for_service状态后,异步定时器持续监测搜网耗时;若跨国漫游基站握手超过 25 秒 仍未注册基站,状态机全自动触发一次基带射频快速刷新(无感飞行模式瞬切),强制基带对物理 SIM 芯片重新发起握手与位置更新(Location Update),大幅缩短冷启动搜网时间。 - 一键快捷加速控制:
- Telegram Bot:新增
/kick指令;在切卡等待提示中新增[ ⚡ 刷新基带搜网 ]内联快捷按钮,随时一键强制让基带重新握手; - REST API:开放
POST /api/v1/network/kick接口供 Web 仪表盘和自动化脚本远程调用; - 非特权/特权自适应:具备 Root/KernelSU 时执行无感射频重启,无 Root 环境自动降级调用
TelephonyManager.requestCellInfoUpdate强行激活 RIL 小区全量重扫。
- Telegram Bot:新增
🛠️ 持续集成与稳定性修复
- GitHub Actions 工作流修复:修复各 CI/CD 工作流硬编码
master分支导致的 checkout 失败问题,全部修正为默认main分支。 - 全局液态玻璃(Liquid Glass)UI:全应用 24 个界面、导航栏、读卡器下拉菜单、核心卡片与各类弹窗支持高斯模糊与极光透射。
📦 安装说明
- APK 文件:
eSIM-Matrix-v1.4.3.apk(arm64-v8a,使用与旧版相同的三证书 v2 签名,包含 ESTKC47350...+ 9eSIMD1C0F4...+ SakuraSIM65D057...,支持无缝覆盖安装且保留所有数据)。
eSIM-Matrix v1.4.2 — 液态玻璃视觉升级与全栈稳定性修复
🆕 eSIM-Matrix v1.4.2 (build 142)
✨ 视觉与交互升级
- 液态玻璃(Liquid Glass)视觉模式:在「设置 → 显示设置」中新增液态玻璃开关,首页 Profile 卡片、弹窗与预览页面支持高斯模糊、菲涅尔亮边与深色极光背景底板,关闭开关时保持零开销原样渲染。
- Telegram 社区交流群入口:README 新增官方 Telegram 交流群徽标与链接。
🛠️ 核心网关与 3D 异构环境联动修复
- 流量卫士(Data Guard)特权 API 修复:修复
CellularDataGuardianPlugin反射调用隐藏TelephonyManager.setDataEnabled / setDataRoamingEnabled时将标量误传为IntArray / BooleanArray的问题,现在切卡时可正常通过特权 API 关闭目标卡移动数据与数据漫游。 - 虚拟定位(Mock Location)主线程 ANR 修复:将
MockLocationPlugin中所有Shizuku进程调用移至带 3 秒超时与强杀保护的独立后台单线程,彻底消除每秒刷新位置时的 UI 主线程阻塞;停止虚拟定位时同步清理gps、network、fused三个 test provider。 - 切卡联动触发与失败回滚补全:
- 修复仅开启「虚拟定位联动」而未开启「Clash 代理联动」时切卡不触发虚拟定位的问题;
- 切卡异常失败进入回滚分支时,同步恢复已提前切换的 Clash 代理节点与虚拟定位;
- 切换 Clash 目标策略组时自动刷新还原快照,并在
ProxyLinkageService中复用单例HttpClient防止句柄泄漏。
- 定时保号(Keep-Alive)防饿死与准确计时:
runKeepAliveNow仅在实际切卡成功后才更新lastRunEpochMillis(冷却锁或读卡异常不再白白跳过一个保号周期);后台轮询单条失效规则报错时继续扫描后续规则,不再阻塞整张保号表。 - 远程下卡(
/download)防抢占主卡:网关远程下载安装新 Profile 后不再强行自动启用新卡把当前常驻主卡踢下线;全程包裹runExclusive互斥锁。 - 卡资源缓存独立过期时钟:拆分
listProfiles(10s)与getCardResourceInfo(30s)的缓存时间戳,修复 EID 与剩余 NVRAM 空间缓存永不过期的问题。
🔌 底层读卡器、协议与短信转发加固
- 无头后台引擎 Telephony 可用性修复:
TelephonyPlugin在onAttachedToEngine阶段即初始化后台线程与TelephonyManager,修复后台无 Activity 时所有调用报错的问题,并修复simStateReceiver与OmapiPluginEventChannel 流处理器泄漏。 - ISO 7816-4 APDU 严格分型解析:修复
BaseAdapter.sendApdu、TelephonyPlugin与OTBridge中对 Case 2/3/4 APDU 的切片逻辑——不再因 Case 3 数据末尾为0x00而误删字节,也不再将 Case 4 末尾的Le字节拼入数据载荷。 - USB CCID 与 BLE 读卡器修复:
- 修复
Ccid.kt在读卡器返回按端点最大包长补齐的短响应(如90 00)时触发ArrayIndexOutOfBoundsException崩溃的问题; - 放行仅支持
T=1协议的 USB CCID 读卡器; - 修复
SimLinkAdapter与RedBle2Adapter将硬件报错当作空成功响应返回导致上层RangeError的问题,并支持跨 BLE 分包的 UTF-8 字符解码; - 修复
BeeSimAdapter.openChannel忽略调用方自定义 AID 列表的问题。
- 修复
- 短信转发与解码修复:
- 修复 VoWiFi 7-bit 拼接长短信(带 UDH 头)未对齐到下一 septet 边界导致全篇字符偏移 1 bit 乱码的问题,并防御截断的 UDH 头;
SmsRelayReceiver线程池满时改为AbortPolicy,防止静默丢弃任务导致WakeLock泄漏及短信状态永久卡在 pending;RemoteGatewayForegroundService在ContentObserver注册受阻重试时替换而非叠加 3 秒轮询任务;- 修复 Cloudflare Worker 转发模式在历史记录中被误显示为 Telegram 模式的问题;
- 修复
decodeBcd在遇到双 nibble0xFF填充时残留末尾'f'的问题,以及SimpleAsn1Reader对截断 TLV 报文和折叠多字节 Tag 重编码的处理。
📦 安装说明
- APK 文件:
eSIM-Matrix-v1.4.2.apk(arm64-v8a,使用与 v1.4.0 / v1.4.1 相同的三证书 v2 签名,可直接覆盖升级并完整保留数据)。
eSIM-Matrix v1.4.1 — 读卡器扫描不再静默失败
eSIM-Matrix v1.4.1 — 读卡器扫描不再静默失败
本次更新只解决一件事:当某个读卡通道返回 0 个读卡器时,App 必须说清楚为什么,而不是只显示 0 reader(s) 让人误判成 ROM 坏掉。
🔍 扫描明细里的明确原因
| 通道 | 之前 | 现在 |
|---|---|---|
| QRTR | 0 reader(s) |
非高通机型直接点名 SoC:no QRTR bus on MediaTek MT6769Z: QRTR is a Qualcomm-only modem bus,并列出替代方案 |
| QRTR | 只区分 Shizuku 有没有跑 | 再区分「Shizuku 已运行但本应用未授权」 |
| SE HAL | 0 reader(s) |
区分:Shizuku 未运行 / 已运行未授权 / ROM 未发布 android.hardware.secure_element / 已授权但没列出卡槽 |
| Built-in OMAPI | native readers: [] |
追加:该 ROM 未把卡槽暴露给应用 OMAPI,改用 SE HAL / OTBridge / 外接读卡器 |
🧭 新增机型信息探针
platformInfo 现在上报:ro.hardware、SOC_MANUFACTURER、SOC_MODEL、android.hardware.secure_element、android.hardware.se.omapi.uicc。诊断报告据此按芯片给结论,不再靠猜。
📦 安装信息
- 包名(applicationId):
io.github.hg552.esimmatrix.multi(与 v1.4.0 相同,可直接覆盖升级) - 三证书合一:ESTK
C47350...+ 9eSIMD1C0F4...+ SakuraSIM65D057... - 升级后请在 Shizuku 里确认为新包名授权(Shizuku 授权按包名记录)
🔗 链接
- 仓库:https://github.com/hg552/eSIM-Matrix
- 上游:https://github.com/iebb/NekokoLPA2 (MIT License)
eSIM-Matrix v1.4.0 — 3D 异构海外环境联动
eSIM-Matrix v1.4.0 — 全新品牌与 3D 异构海外环境联动
本次发布是项目全面重塑:eUICC-Nexus 正式更名为 eSIM-Matrix,应用名、Web 控制台与 Telegram 主控台全部焕新。
📦 安装包特性
- 三证书合一:单个 APK 同时内置 ESTK(
C47350...)、9eSIM(D1C0F4...)、SakuraSIM(65D057...)三套 ARA-M 出厂证书,插卡即用,无需电脑读卡器写规则。 - 包名(applicationId):
io.github.hg552.esimmatrix.multi(全新独立包名,与原版 NekokoLPA 2 完全隔离,可同机共存)。
✨ 3D 异构海外环境联动
- 维度一 · SIM 身份与物理基带:秒级 Profile 热切换、5 分钟临时接卡自动回滚、CS 语音域 + PS 数据域双域搜网状态机。
- 维度二 · 代理节点联动:FlClash / Mihomo / sing-box 外部控制器联动,支持 ICCID 专属绑定与国家 Emoji/ISO/区号智能推导;内置漫游流量卫士(Data Guard)锁死蜂窝,切回主卡自动快照还原。
- 维度三 · 虚拟定位联动:内置 17 个全球重点城市地标模板,并支持手动输入任意经纬度、保存为常用模板、按卡片定向绑定;切卡激活时即时注入,切回主卡自动复原。
🛠️ 其它
- eUICC 芯片闪存自洁:切卡稳定后静默秒清 Enable/Disable 通知,杜绝 NVRAM 写满与
TRANSMIT_FAILED。 - 全面加入 LINUX DO 社区友链与开源致谢。
🔗 链接
- 仓库:https://github.com/hg552/eSIM-Matrix
- 上游:https://github.com/iebb/NekokoLPA2 (MIT License)