Repository navigation
NetPilot 1.5.2 — Shizuku 通道日志补全 + 日志页正序/倒序 + 界面内切制式 + 孤儿进程清扫修复 + release 开 R8
本版 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,623B / SHA-2567b1692384ee7df0175cb01f3b3af2ea736fa40aa4716a72d9ffa601dda7a81b9(MD5e67e539a2f77163cf6c4fb6993bdfb92) - 开启 R8 前后对照:APK
33,283,737→4,152,623B(-87.5%);dex 3 个 /32,272,936→ 1 个 /3,148,116B;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-25634100875b45d7c4dc9928030b3329b5490869a236155f9ce08b1dc70c7434c4c(与 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.py7 对文件全 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(推荐)