Skip to content

NetPilot 1.5.2 — Shizuku 通道日志补全 + 日志页正序/倒序 + 界面内切制式 + 孤儿进程清扫修复 + release 开 R8

Choose a tag to compare

@katiusu katiusu released this 05 Oct 20:23
· 4 commits to main since this release

本版 versionName = "1.5.2"、versionCode = 2026100600;只提供 release 包(本版不产出 debug 包)。判定语义、默认值、写入顺序(ITelephony → 权威存储 → settings)与写后回读校验一律未变。

这一版改了什么

  • Shizuku 通道的日志终于看得见:Shizuku 的用户服务跑在独立进程(com.katiusu.netpilot:np_service)里,以前它写的诊断行只进那个进程的内存,应用日志页永远看不到(只看得到一句 false)。现在用户服务把日志缓存在自己进程内,每次 binder 调用结束后由应用侧取回(AIDL 新增 drainDiag()),按等级还原成日志页里的 DEBUG / WARN / ERROR;取回超时只记一条提示,不影响这次调用的结果。
  • 日志页筛选换成显示顺序:去掉「仅详细」这档(详细模式记下的过程行在「全部」里就能看到),新增正序(旧→新)/ 倒序(新→旧)切换,默认正序(与 1.5.1 及更早的默认一致)。
  • 界面内直接切制式:功能页 →「策略」→「切换网络制式」,一次列出全部 34 种内置制式(按 5G / 4G / 3G / 2G 分组,当前值带 ✓),点按即写入当前默认数据卡;没有可用数据卡(subId 无效)时禁用并说明原因。
  • 修掉 Shizuku 孤儿进程清扫失效(本版最大的内存项):两条清扫路径(启动清扫、probe() 成功后的清扫)原来共用同一个 pruneOnce 标志,同进程内 CAS 先到者赢 —— 启动清扫几乎总先赢,于是 probe() 后那条实际从不生效。孤儿用户服务进程每个约 40 MB(实测曾累积 4 个 ≈180–200 MB,而主进程只有 16 MB),现在两条路径各用一个独立标志。
  • 日志导出改流式写:不再先把整份日志拼成一个 String 再转字节数组(上限 80 万字符 ⇒ 主线程峰值 4–5.6 MB),改成逐条 append 写文件,峰值只跟「一行」有关;导出文件内容与旧写法逐字节一致。
  • release 构建开启 R8:与参考模板 MiuixGuiExample 的 release 配置一致(isMinifyEnabled = true + proguard-android-optimize.txt)。本工程有两处入口是被外部进程按类名加载的(root 的 app_process 命令行入口、Shizuku 用户服务 + AIDL),所以额外写了 5 条 keep(app/proguard-rules.pro)——这类遗漏不会编译报错、只会在真机上静默失效,构建后已在成品 dex 里逐个核对。

需要你留意

  • 流畅度请用 release 包体感验收:本版一度为「切页发顿」改过日志页的写法(稳定 key / 滚动跟随 / 筛选缓存 / 导出线程),最终全部回滚,改由构建层的 R8 承担 —— 依据是参考模板逐页对比的结论「页面代码逐行相同,掉帧不是页面写法问题」。所以请不要用 debug 包测流畅度(debug 带调试信息、也不含依赖库基线配置,本来就更慢)。
  • R8 回归自测(本版必须做一次):Root 与 Shizuku 两条通道各跑一次「程序自检」和「切一次制式」,确认混淆没有伤到上面那两个按类名加载的入口。
  • 可直接覆盖安装 1.5.1(同一把 release key、versionCode 更高)。
  • 本轮没有真机 profiler 数据:体积与 dex 规模是硬测量,「体感是否更流畅 / 内存是否下降」需要你按验收清单自测。

验证

  • release 4,152,623 B / SHA-256 7b1692384ee7df0175cb01f3b3af2ea736fa40aa4716a72d9ffa601dda7a81b9(MD5 e67e539a2f77163cf6c4fb6993bdfb92)
  • 开启 R8 前后对照:APK 33,283,737 → 4,152,623 B(-87.5%);dex 3 个 / 32,272,936 → 1 个 / 3,148,116 B;method_ids 143,536 → 15,408、class_defs 20,326 → 3,157、string_ids 162,160 → 12,119
  • aapt2 dump badging:versionCode='2026100600' versionName='1.5.2'、minSdkVersion 34 / targetSdkVersion 36 / compileSdkVersion 37;apksigner verify 通过,证书 SHA-256 34100875b45d7c4dc9928030b3329b5490869a236155f9ce08b1dc70c7434c4c(与 1.3.0 以来同一把 key)
  • 解包核对:APK 150 个条目、AndroidManifest.xml 与 resources.arsc 完好(android.enableResourceOptimizations=false 沿用,避开 build-tools 36 的 aapt2 空 resources-release-optimize.ap_ 坑);PrivilegedCli / ShizukuControllerService / IShizukuController$Stub$Proxy 等 keep 目标均在成品 dex 中;R8 映射表留在 app/build/outputs/mapping/release/mapping.txt(306,113 行,崩溃栈可用它还原)
  • 自查:tools/check_provenance.py 7 对文件全 OK(最坏重复率 15.2%)

自测清单

按 docs/TESTING.md §21 走:§21.1(Shizuku 日志)、§21.2(正序 / 倒序)、§21.3(界面内切制式)、§21.4(用 release 包测流畅度 + R8 回归)、§21.5(孤儿进程 / PSS / 导出)、§21.6(产物与哈希)。机制分析、实测对照与「为什么回滚改写 R8」见 docs/POWER_REPORT.md §10,其中 §10.7 专门写了回滚理由与 keep 依据。

下载

  • NetPilot-1.5.2-2026100600-release.apk(推荐)