一台给孩子上网课的小新 Pad Plus 卡到想换:TB-J607F 系统体检与精简实录
家里这台联想小新 Pad Plus(TB-J607F)是给孩子上网课、平时用微信的。6GB 内存,按理说不该卡,但最近的情况是:开个相机要等两三秒,切回微信经常白屏重载,孩子上着课喊着「卡了」。
最初的念头很直接——9008 线刷,降回 ZUI 12.6。后来花了半个晚上做体检,结论变了:这台机器根本不需要刷机,问题不在系统版本上。最后全程只用 ADB 做完,可用内存从 1.17 GiB 回到 2.63 GB,顺手还从 81GB 存储里挖回了 14GB。
记录一下,顺便把几个差点踩进去的坑写清楚。文末还附了一段跟精简本身没什么关系的插曲——给孩子找一个能用的 ChatGPT——因为那才是这台机器真正把我耗到半夜的地方。
一、先说结论:这台机器不该刷机
想刷机的理由很朴素:「新系统拖老硬件,降回老版本就快了」。但查完这台机器的状态,这条路性价比极低:
ro.boot.flash.locked = 1 (BL 已上锁)
ro.boot.verifiedbootstate = green (官方未篡改)
ro.boot.veritymode = enforcing
ro.boot.vbmeta.device_state= locked
三层原因:
- BL 是锁的,而且是「干净」的锁。 verifiedboot 是 green,说明 boot 分区没被改动过。这台机器将来要保修、要送修,这个状态是有价值的——刷机等于把它换成一个 9008 的未知状态。
- 跨大版本回退有 ARB 风险。 TB-J607F 出厂是 ZUI 12.6(Android 11),现在跑 ZUI 14(Android 12)。从 12 降回 11 属于跨大版本回退,遇到防回滚(anti-rollback)就是硬砖,而且 9008 包必须严格匹配国行版本,海外包不能混用。
- 最关键的:卡顿的根因不在系统版本。 我拿到数据之后发现,这台机器是「31 天没重启 + 一批被系统白名单强制常驻的垃圾后台」,不是「ZUI 14 太重」。刷机解决不了这两件事。
所以方向定为:免刷机的 ADB 深度精简 + 冻结系统更新,9008 作为兜底但基本用不上。
二、确认机器的底子
接上 ADB 先读设备信息,这些数据后面判断「该不该动」都要用:
型号 Lenovo TB-J607F / product: LenovoTB-J607F_PRC
系统 ZUI 14.0.428 / Android 12 / SDK 31
构建 TB-J607F_CN_OPEN_USER_Q00012.0_S_ZUI_14.0.428_ST_230411(2023-04-12)
内存 MemTotal 5,598,928 kB ≈ 5.34 GiB(标称 6GB)
存储 /data 共 104G,已用 81G,剩 23G(79%)
开机时长 31 天 1 小时
顺手把电池也查了,因为「卡」有时候是电池老化导致的降频:
满电容量 6961 mAh / 设计 7701 mAh ≈ 90.4%
循环次数 191
health 2(良好)
温度 24.4°C
这一项直接排除了硬件嫌疑。 90% 的健康度、191 次循环,电池才刚到中年,卡顿跟它没关系。如果这里显示 70% 出头,那思路就得完全换一套。
三、环境准备:Windows 上的两个坑
电脑上没有 adb,用 winget 装官方的:
winget install --id Google.PlatformTools --accept-source-agreements --accept-package-agreements
装完会有两个坑:
坑一:PATH 不会立刻生效。 安装器写了环境变量,但当前这个 shell 读不到,adb 依然「不是内部或外部命令」。要么重开终端,要么直接用绝对路径:
%LOCALAPPDATA%\Microsoft\WinGet\Packages\Google.PlatformTools_*\platform-tools\adb.exe
坑二:PowerShell 执行策略是 Restricted。 我写了个 .ps1 采集脚本,双击跑、命令行跑都直接退出、连报错都不给(exit code 1,零输出),一开始以为是脚本写错了。真相是被执行策略拦了。用进程级放行,只影响当前进程、不改系统设置:
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
插上没反应,先别怀疑驱动
第一次插线,adb devices 是空的。注意这里有个重要的区分:
- 显示
unauthorized→ 线是通的,只是没点「允许」,去平板点弹窗 - 什么都没有,且设备管理器里也找不到 Android 设备 → 电脑压根没看见它,问题在物理链路
我当时是第二种。查了 Windows 的设备枚举,USB 上只有键鼠、蓝牙适配器和集线器,一个 Android 接口都没有。这种时候换驱动是白费功夫,按命中率排:换数据线(最常见,很多线只有电源针脚)→ USB 用途选「传输文件」而不是「仅充电」→ 关掉再打开 USB 调试 → 直插主机后置口别过 Hub。
这台最后就是换了根线就好了,插上立刻出现 unauthorized,平板上点「一律允许」即可。
四、体检:三个数字决定了方向
真正让我改变主意的,是这三个数:
MemAvailable 1,226,048 kB ≈ 1.17 GiB(占总量 21.9%)
Swap 已换出 2,029,772 kB ≈ 1.94 GiB
ZRAM 物理占用 662,156 kB
6GB 的机器只剩 1.17 GiB 可用,而且 3GB 的 swap 已经用掉三分之二,ZRAM 实打实压了 662MB 物理内存——这是典型的长时间不重启导致的堆积,不是内存泄漏。
然后用 ps 看谁在吃内存,结果很反直觉:
| 进程 | RSS | 说明 |
|---|---|---|
com.tencent.mobileqq |
65 MB | QQ 本体 |
com.tencent.mobileqq:MSF |
37 MB | QQ 推送服务 |
com.quark.browser |
53 MB | 夸克浏览器,后台常驻 |
com.lenovo.lsf |
40 MB | 联想服务框架 |
com.zui.bugtogo |
11 MB | 日志上报,在系统永不休眠白名单里 |
com.zui.net.data.monitor |
10 MB | 流量统计 |
com.tencent.mm:push |
0.6 MB | 微信——干净得出乎意料 |
微信其实是冤枉的。 它只有个 0.6MB 的推送进程在跑,真正的大户是 QQ(103MB)、夸克(53MB)和联想自己那几个后台。
还有个细节值得记:dumpsys deviceidle whitelist 里,bugtogo、xlog、sdac、uface 赫然在列。进了这个白名单的包,系统不会让它休眠,等于强制常驻。这类包清掉的收益,比清普通应用高得多。
五、清预装:哪些能停,哪些千万别动
原则和清手机预装一样:pm disable-user --user 0,用户级停用,不碰系统分区,随时可恢复。
A 档:纯后台,零功能损失
| 包名 | 是什么 |
|---|---|
com.zui.ota |
系统更新(冻结,防自动升级) |
com.zui.bugtogo / com.zui.xlog |
日志抓取上传,在白名单里常驻 |
com.zui.net.data.monitor |
流量统计守护进程 |
com.zui.userexperience / com.lenovo.ue.device / com.lenovo.udcplatform |
用户体验计划、数据上报 |
com.zui.sdac / com.zui.radioinfo |
工程/射频测试页,无 UI |
com.zui.legalinfo / com.zui.feedback |
法务声明、反馈入口 |
com.longcheertel.midtest / sarauth / com.motorola.motocit |
工厂测试与硬件 CIT |
com.lenovo.levoice.trigger / _agent |
语音助手,顺便解决网课抢麦克风 |
com.lenovo.browser.hd |
联想自带浏览器 |
com.zui.game.service / com.lenovo.hyperengine |
游戏服务与游戏加速引擎 |
B 档:第三方预装
Vivaldi、网易云音乐、酷安、Google Earth、Trello、ChatGPT、Synology DS video、OPlayer、hhvideo、微软远程桌面——这些都是可以停的第三方预装。
但要保留的也有一批:应用商店(停了好歹装不了软件)、Sketchbook(画画)、Office 的 OneNote 和 OfficeHub(看课件)。
补一句后话:这份清单后来动过两次。
com.vivaldi.browser和com.quark.browser都在里面,但清完才发现,这台机器上能打开 ChatGPT 网页版的只剩 Vivaldi,夸克又得留着给孩子扫题——两个最后都从脚本和 manifest 里撤了出来,改成用appops限制后台。原因写在第十一节。
⚠️ 三个差点犯的错
这三个是这次最有价值的教训,比清掉多少包重要:
1. 差点把默认输入法停了。 com.baidu.input 在预装列表里看着就像冗余,但 settings get secure default_input_method 显示它就是当前默认输入法。停了孩子直接打不了字,而且很多精简教程会漏掉这条。判断方法很简单:先查默认输入法是谁。
2. 差点把教育 App 当预装清了。 com.gkid.crazyrope、com.drpanda.chineseacademy.b2b、com.tiantianlexue...、com.weicai.mokaoMasterPro、com.tal.publish.book、com.putao.block.cn 这些名字看着都像垃圾包,实际上全是学习类应用,很可能是孩子正在用的。名字长得像广告 SDK 的教育 App,一个都没动。
3. 安全中心和天骄学堂是红线。 com.zui.safecenter(安全中心)停了会导致权限管理和开机异常;com.lenovo.lfh.tianjiao.tablet 是天骄学堂本体,正是孩子上课用的东西。这两个连碰都不碰。
顺便说个反直觉的点:「平行视界」在 ZUI 14 是 framework 层能力(ActivityEmbedding),根本没有独立包名。 我一开始担心停掉某个包会毁掉分屏,查完发现压根不存在这个包,不用担心误伤。
六、可逆性比精简本身更重要
我做了一件事,事后觉得是最值的:写脚本而不是手敲命令。
脚本里除了冻结列表,还硬编码了一份保护名单,执行前先做二次拦截——即使以后手滑把 com.zui.safecenter 加进数组,也会被 [SKIP-PROTECTED] 挡掉。每次执行成功一个包,就往 debloat_manifest.txt 追加一行,回滚时读这个文件逐个 pm enable:
# 先预览,什么都不改
.\zui14_debloat.ps1 -Level AB
# 真正执行
.\zui14_debloat.ps1 -Level AB -Apply
# 全量回滚
.\zui14_debloat.ps1 -Rollback
冻结完先做了一次红线校验,确认 13 个关键包里没有一个被误伤,才敢重启。这一步别省。
七、效果:重启后才是真实水平

优化前后三项核心指标:可用内存翻了一倍半,Swap 占用几乎清零,存储释放 14 GB。
冻结 31 个包之后重启,静置 2 分钟再测:
| 指标 | 优化前 | 优化后 |
|---|---|---|
| MemAvailable | 1,226,048 kB(1.17 GiB) | 3,052,124 kB(2.91 GiB) |
| Used RAM | 4,122,164 kB | 2,876,878 kB |
| Swap 占用 | 1.94 GiB | 147 MB |
| ZRAM 物理占用 | 662,156 kB | 18,864 kB |
可用内存 +1.74 GiB,翻了一倍半;swap 占用降了 92.6%,ZRAM 几乎归零。
这里必须强调「重启」这一步。 冻结包带来的收益里,有相当一部分其实是重启本身给的——31 天不重启,swap 和 ZRAM 里全是历史包袱,不清空的话只冻结包是看不到这个数字的。两台机器同样的精简,一台重启一台没重启,测出来的数可能差一倍。
桌面渲染抽了一次 dumpsys gfxinfo:Janky frames 0(0.00%),50 分位 7ms,90/95/99 分位都是 17ms,Missed Vsync 0。
不过这个数据要打个折说清楚:重启后桌面没被操作过,样本只有 4 帧,只能说明「没有掉帧」,不能当压测结论。顺带提一句,输出里的 50th gpu percentile: 4950ms 是 Android 在没有 GPU 帧记录时的占位值,不是真实的 4950 毫秒延迟,别被它吓到。
八、81GB 存储去哪了:微信一个人吃掉 30GB
内存搞定了,顺手查存储。这块的发现比内存更让人意外。
先看 /sdcard,总共才 29.4 GB:
Android 21.0 GB(其中 Android/data 20.6 GB)
Pictures 5.26 GB
DCIM 1.68 GB
Movies 638 MB
Download 326 MB
但 /data 用了 81GB。差了 50 多个 G,说明大头不在用户可见的目录里。
答案在 dumpsys diskstats——它会把已经安装的每个包的 APK 体积、应用数据、缓存分别列成三个数组。把包名和数值按下标对齐,得到了真相:
| 应用 | 总占用 | 其中缓存 |
|---|---|---|
微信 com.tencent.mm |
30,458 MB | 4,885 MB |
com.gkid.crazyrope(教育) |
11,230 MB | 4,954 MB |
| 7,342 MB | 967 MB | |
| 夸克浏览器 | 2,790 MB | 129 MB |
| 网易云音乐 | 1,929 MB | 145 MB |
com.tal.publish.book(教育) |
1,728 MB | 203 MB |
| 酷安 | 1,583 MB | 145 MB |
| 百度输入法 | 1,488 MB | 334 MB |
微信一个应用占了 30.5 GB,接近总占用的 37%。 而且它 29.2 GB 的主体在 /data/data/com.tencent.mm,不在 /sdcard——所以只看 sdcard 目录永远找不到这个大头,它连 /sdcard/Android/data/com.tencent.mm 里都只有 5 GB。
⚠️ diskstats 有缓存,别被它骗了
清理完之后我再看了一次 dumpsys diskstats,数字一模一样,一点没变。当时以为自己操作失败了,白折腾一趟。
真相是 diskstats 的分应用数据有缓存延迟,不是实时刷新的。验证空间变化只认 df 和 du:
adb shell df -h /data # 总账
adb shell du -sk /storage/emulated/0/Android/data/xxx # 单个目录
九、无损清缓存:腾出 14GB
缓存和数据的区别,是这一步安全的前提。pm trim-caches 清的是各应用的 cacheDir,账号、登录态、聊天记录都在主数据区,不在缓存目录里。
# 彻底清掉两个已经冻结、不再使用的应用数据
adb shell pm clear com.netease.cloudmusic
adb shell pm clear com.coolapk.market
# 全机缓存回收(把每个应用的 cacheDir 都扫一遍)
adb shell pm trim-caches 999G
trim-caches 这类操作是逐个应用调 freeStorage,机上两百多个包扫下来只花了 9 秒。结果:
| 项目 | 前 | 后 |
|---|---|---|
| /data 已用 | 81 GB | 67 GB |
| /data 剩余 | 23 GB(79%) | 37 GB(65%) |
| /sdcard 总量 | 29.4 GB | 21.6 GB |
| 微信 Android/data | 5,173 MB | 2,297 MB |
| gkid Android/data | 6,344 MB | 4,857 MB |
| 网易云 / 酷安 | 322 / 1,207 MB | 0 / 0 |
一共腾出 14 GB,存储占用从 79% 降到 65%。微信那边被清掉约 2.9 GB,全是缓存,打开后聊天记录、登录态都在,只是看过的缩略图要重新加载一次。
十、几个通用的坑,记下来备用
- 系统相机的组件名不是通用名。
com.android.camera.CameraLauncher在 ZUI 14 上会静默失败,正确的是com.zui.camera/.CameraLauncher。判断方法:pm resolve-activity --brief -c android.intent.category.LAUNCHER com.zui.camera。 - 熄屏状态下
am start是无效的。 我拉起微信和相机都没反应,一开始怀疑是精简把组件搞坏了。查dumpsys power才发现mWakefulness=Dozing——屏幕是灭的,Activity 根本进不了前台。先input keyevent KEYCODE_WAKEUP+wm dismiss-keyguard再测。 - 想限制后台,
appops比 disable 合适。 夸克要留着给孩子看网盘动画和扫题,不能停,但可以按住:bash adb shell cmd appops set com.quark.browser RUN_IN_BACKGROUND ignore adb shell cmd appops set com.quark.browser RUN_ANY_IN_BACKGROUND ignore - 停用不等于清数据。
pm disable-user只是让包不跑,占的空间一点没少。冻结之后要单独pm clear才能真回收——但pm clear会连登录态一起清,前提是确认这个应用不再用了。
十一、插曲:孩子要的 ChatGPT,比精简本身更难伺候
精简完第二天,孩子说想用 ChatGPT 对答案。我以为是「装个 App」的事,结果在这台机器上绕了整整一圈,最后的落点是浏览器里的一个网页快捷方式。
这段值得单独记,因为它把「预装应用」的另一面翻了出来:有些包不是垃圾,是残次品。
1. 机上那个 ChatGPT,根本没有启动入口
平板上确实装着 com.openai.chatgpt,版本 1.2026.265。点开没反应,也不报错——就是什么都不发生。
先确认它到底能不能被启动:
adb shell pm resolve-activity --brief -c android.intent.category.LAUNCHER com.openai.chatgpt
# 无输出
再用 dumpsys package 翻它的 intent-filter,真相出来了:MainActivity 只挂了 MAIN 加分享用的 SEND,唯独没有 android.intent.category.LAUNCHER。系统里没有任何入口能把它拉起来。
两条命令互相印证:
adb shell am start -n com.openai.chatgpt/.MainActivity
# Error: Activity class {...} does not exist.
adb shell monkey -p com.openai.chatgpt 1
# No activities found to run, monkey aborted.
再去看 minSdkVersion——29。而同一版本的官方包要求 32。这是个被改过的包:把 minSdk 强行压到 29 好让它能在 Android 12 上装进去,顺手把启动入口弄没了。
判断一个包能不能用,别信它在应用列表里存不存在,只信 pm resolve-activity --brief -c android.intent.category.LAUNCHER——有输出才算有入口。
2. 官方版装不上:差一个 SDK 版本号
那就装官方的。结果撞在另一堵墙上:官方 ChatGPT 客户端从 1.2026.2xx 起把 minSdk 提到了 32(Android 12L),而这台机器是 SDK 31(Android 12)。
按版本号往回翻,一个一个试:
| 版本 | minSdk | 结果 |
|---|---|---|
| 1.2026.293 | 32 | INSTALL_FAILED_OLDER_SDK |
| 1.2026.265 | 32 | 同上 |
| 1.2026.230 | 32 | 同上 |
| 1.2026.202 | 32 | 同上 |
| 1.2026.048 | 29 | 能装,但同样是改包,同样没有启动入口 |
这条路是死的,而且不是「下载渠道不对」那种死。 官方客户端从某个版本起就不再支持 Android 12 了,再往下翻只会翻到更早的改包。
(顺带:查 minSdk 根本不用装机试,aapt dump badging xxx.apk | grep sdkVersion 一分钟出结果。我是装了两轮才想起来查。)
3. 安装过程的两个坑
pm install 读不了 /sdcard。 直接 pm install /sdcard/Download/chatgpt.apk 会失败——system_server 没有 FUSE 权限,看不到用户存储里的路径。先拷进 /data/local/tmp 再装:
adb push chatgpt.apk /data/local/tmp/
adb shell pm install -r -d /data/local/tmp/chatgpt.apk
被安装校验拦。 报错信息不一定直白,但可以先关掉 ADB 安装校验再试:
adb shell settings put global verifier_verify_adb_installs 0
4. 退回网页版,又被夸克拦了一次
客户端没戏,那就用网页版。孩子平时开夸克,结果 chatgpt.com 直接给一屏:
此网站可能包含不适合你浏览的内容
夸克把它拦了。这是浏览器的内容风控,不是网络问题——同一台机器、同一个 WiFi,换 Vivaldi 打开就完全正常,账号还登着,历史对话都在。
这里有个回头看挺讽刺的地方:我在 B 档里把 Vivaldi 列进了「可以停的第三方预装」,清完才需要用上它。它后来被从脚本和 manifest 里撤了出来,必须保持启用——这台机器上唯一能稳定打开 chatgpt.com 的就是它。
5. ⚠️ 添加到主屏失败:被一个看不见的 AppOp 拦了
网页版能用之后,孩子嫌每次要开浏览器、翻书签麻烦,让我「加到主屏」。点了「添加到主屏幕」,桌面没多出图标,也不报错、不弹窗。
这种「点了没反应」只能看日志:
adb logcat -d | grep -iE "shortcut|pinshortcut"
抓到关键的一行:
requestPinShortcut or Widget Denied by AppOps for com.vivaldi.browser
requestPinShortcut() 需要 CREATE_SHORTCUT 这个 AppOp,而 Vivaldi 在这台机器上是被默认拒的。注意它不是运行时权限——所以在「权限」页面的普通权限列表里根本找不到它,也不会弹窗,用户侧的感受就是「点了没反应」。
第一反应当然是用命令改:
adb shell cmd appops set com.vivaldi.browser CREATE_SHORTCUT allow
命令不报错,但 cmd appops get 一看还是 deny。 ZUI 对「桌面快捷方式」这个 AppOp 做了额外保护,ADB 改不进去。
最后是在设置里点开的:设置 → 应用 → Vivaldi → 权限 → 把「在桌面上创建快捷方式」改为允许,回浏览器重新点「添加到主屏幕」,图标才落到桌面上。
这条值得单独记:AppOps 里的项不一定都能用
cmd appops set改,尤其是带 UI 开关的那几个(桌面快捷方式、悬浮窗、自启动)。命令不报错、改完却毫无变化时,别在命令行里耗,去设置里找那个开关,三十秒的事。
6. 还有一个绕不开的东西:学习模式
这台机器开着 ZUI 的学习模式(家长管控):有密码、每天限 3 小时(learn_mode_total_used_time=10800)、网页访问还开了限制。孩子用 ChatGPT 的时间照样被这个时长扣着,换浏览器也绕不过去。
这个我没动。给孩子的设备,「能用」和「放开」是两件事:前者是我该干的活,后者得家长自己定。
十二、留个后路
所有改动只有 pm disable-user 和 appops,没有碰系统分区,也没有刷任何东西,所以全都能回退。脚本的 -Rollback 会读 manifest 逐个恢复。
现在实际冻结的是 29 个包,不是第七节实测那时的 31 个——Vivaldi 和夸克后来为了第十一节的需求被撤了出来,两个都改成用 appops 限制后台。
留了一份完整的体检报告(优化前后对比、每个包的功能说明、验收记录、回滚方法),以后想复现或者换设备照抄流程都有据可查。
还有两条建议:
- 每 7–10 天重启一次。 这次最大的收益来源其实是重启,不是精简。这条不用装任何软件,成本为零。
- 别长期开着 USB 调试。 尤其是给孩子用的设备,调试口开着等于把系统接口交出去了。用完就在开发者选项里关掉,顺手点一下「撤销 USB 调试授权」,把调试选项总开关也关了,孩子找不到入口。
最后
这台机器的硬件其实一点都不差:6GB 内存、90% 的电池健康、191 次循环,还年轻得很。它卡,是因为两年里装了太多不需要的东西,又 31 天没重启过,swap 和 ZRAM 里堆满了历史垃圾。
一开始我满脑子想的是「刷个老系统让它重生」,最后发现最有效的一步根本不是刷机,是重启。刷机的代价是把一台 verifiedboot 还是 green 的干净机器,换成一个 9008 状态未知的机器,还要赌 ARB 不炸——而收益,可能还不如先看一眼哪些包在白名单里强制常驻。
还有个意外收获。我原本以为「预装应用」只有两种:能用的和垃圾。清完才发现还有第三种——装得上、跑不起来、也没有入口的残次品。它占着空间、在应用列表里躺着,但你永远点不开它。这种包比垃圾更麻烦,因为垃圾你至少能确认它没用,残次品却会让人以为自己装错了或者机器坏了。
老设备的价值不在于跑得动最新的东西,而在于把它的能力边界摸清楚,然后在边界内用得舒服。这次折腾最大的收获,其实是弄明白了「卡」到底卡在哪:不是系统太重,是后台太多,外加一个 30GB 的微信。至于孩子要的 ChatGPT,折腾到最后落成桌面上的一个网页图标——也算给「精简」补了个反面:不是所有东西都该被清掉,清之前最好先弄清它到底是什么。