TCL/雷鸟电视 ADB 安装拦截排查与永久放行

1820 字
9 分钟
TCL/雷鸟电视 ADB 安装拦截排查与永久放行

本文档记录一次针对 TCL 电视(mt5879 方案,Android 11)「ADB 无法安装应用,必须先禁用安装器」问题的完整排查过程与最终解法。 适用设备: TCL 电视(mt5879_cn 方案,Android 11,其他 TCL/雷鸟机型可参考) 适用人群: 会使用 ADB 的电视用户 / 运维玩家


1. 问题现象#

TCL 电视通过 Wi-Fi ADB 连接后,安装应用直接报错:

Terminal window
adb connect 192.168.5.6
adb install xxx.apk

报错内容:

adb.exe: failed to install xxx.apk: Failure [INSTALL_FAILED_VERIFICATION_FAILURE]

只有先禁用系统安装器 com.android.packageinstaller 才能安装;但安装完成后必须重新启用,否则电视无法开机。整个流程繁琐且有翻车风险。

警告

com.android.packageinstaller 是开机关键组件,任何时候都不要让电视在「安装器被禁用」的状态下重启。


2. 排查过程#

2.1 缩小范围:排除 TCL 安全守护#

先怀疑的是 TCL 安全守护 com.tcl.guard,但实测它的启停与拦截无关;只有禁用 com.android.packageinstaller 才能放行安装,说明拦截逻辑在安装器应用自身。

2.2 复现拦截并抓取日志#

保持安装器启用状态,安装一个真实 APK 并抓取系统日志:

Terminal window
adb logcat -c
adb install -r xxx.apk
adb logcat -d > block.log

日志中出现关键线索:

Start proc com.android.packageinstaller for broadcast
{com.android.packageinstaller/com.android.packageinstaller.verifier.VerifierReciver}
Foreground service started ...: service com.android.packageinstaller/.verifier.StrategyService
Config:Grabber:InstallConfig: Currrent content from Db is :[{"enable":"true","strategies":[...]}]
D ConfigProvider: feature:content://com.tcl.providers.config/InstallConfig

拦截者浮出水面:TCL 在系统安装器里内置了一个验证组件,其策略来自一个内容提供者。

2.3 拉取安装器 APK 分析#

Terminal window
adb shell pm path com.android.packageinstaller
MSYS_NO_PATHCONV=1 adb pull /system/priv-app/PackageInstaller/PackageInstaller.apk .
unzip -o -q PackageInstaller.apk -d apk

提取 dex 字符串确认:

  • com.android.packageinstaller.verifier.VerifierReciver 监听 android.intent.action.PACKAGE_NEEDS_VERIFICATION,持有 android.permission.PACKAGE_VERIFICATION_AGENT 权限(全系统仅它持有);
  • StrategyService 每次安装时从 content://com.tcl.providers.config/InstallConfig 读取策略 JSON。

查询该配置:

Terminal window
adb shell content query --uri content://com.tcl.providers.config/InstallConfig
Row: 0 project_id=InstallConfig, config_content=[{"enable":"true","strategies":[
{"name":"safeStrategy","enable":"true","priority":"0"},
{"name":"blackListStrategy","enable":"true","packages":[],"priority":"1"},
{"name":"thridStrategy","enable":"false","packages":[...],"priority":"2"},
{"name":"launcherStrategy","enable":"true","packages":[],"priority":"3"},
{"name":"overDueStrategy","enable":"true","packages":[],"priority":"4"},
{"name":"pmStrategy","enable":"true","priority":"5"}]}]
重要

组件级禁用(pm disable-user com.android.packageinstaller/.verifier.VerifierReciver)会被系统拒绝(Shell cannot change component state),但 shell 对这个配置提供者有写权限——这就是突破口。


3. 拦截机制原理#

enable=true 且策略生效

enable=false 无策略可用

adb install

PackageManagerService 创建安装会话

发送 PACKAGE_NEEDS_VERIFICATION 广播

VerifierReciver 接收

StrategyService 启动

读取 InstallConfig

verifyPendingInstall 拒绝

INSTALL_FAILED_VERIFICATION_FAILURE

不返回拒绝裁决

安装继续,Success

enable=true 且策略生效

enable=false 无策略可用

adb install

PackageManagerService 创建安装会话

发送 PACKAGE_NEEDS_VERIFICATION 广播

VerifierReciver 接收

StrategyService 启动

读取 InstallConfig

verifyPendingInstall 拒绝

INSTALL_FAILED_VERIFICATION_FAILURE

不返回拒绝裁决

安装继续,Success

要点:

组件作用
com.android.packageinstallerTCL 改造的系统安装器,同时是开机关键组件
.verifier.VerifierReciver接收系统安装验证广播
.verifier.StrategyService按策略决定放行/拒绝
com.tcl.providers.config/InstallConfig策略配置存储,shell 可读写

4. 永久放行方案#

把 InstallConfig 的总开关改写为 false,验证器读不到可用策略即放行。安装器全程保持启用,开机无影响,重启后依然生效。

电脑 / 手机两个渠道任选其一

下面给出电脑(PowerShell)和手机(甲壳虫 ADB)两种写法,效果完全相同,选一个执行即可,不要都执行。 手机端有一个前置条件:先在甲壳虫里连接电视并确认设备在线。连接断开后输入的任何命令都会报 no devices/emulators found,且报错会被界面吞掉——这是「命令没生效」最常见的原因。

电脑(PowerShell)——第一条改配置:

Terminal window
adb shell content update --uri content://com.tcl.providers.config/InstallConfig --bind config_content:s:false

电脑(PowerShell)——第二条重启验证器:

Terminal window
adb shell am force-stop com.android.packageinstaller

手机(甲壳虫 ADB)——第一条改配置:

Terminal window
content update --uri content://com.tcl.providers.config/InstallConfig --bind config_content:s:false

手机(甲壳虫 ADB)——第二条重启验证器:

Terminal window
am force-stop com.android.packageinstaller
建议

两个渠道的命令都设计成零引号:false 值不含引号和冒号,解析器读到它同样走「解析异常 → 无策略 → 放行」路径,效果与完整 JSON 等价。电脑端也用同款零引号写法——Windows PowerShell 5.1 与 7 给外部程序传参的行为不同,带多层引号的长命令在 5.1 上会丢引号导致写入坏数据,零引号写法在两个版本行为完全一致。每条命令执行前都确认设备在线。

验证写入结果:

Terminal window
adb shell content query --uri content://com.tcl.providers.config/InstallConfig --projection config_content

输出应为(电脑 / 手机端相同):

Row: 0 config_content=false

之后安装直接:

Terminal window
adb install xxx.apk
提示

content 命令的 --bind 参数按冒号分段解析,任何含 JSON 的命令里冒号都必须转义——这也是第 5 节恢复命令比解锁复杂的原因。解锁因为用了零引号的 false 值,两个渠道都天然免疫此问题。


5. 恢复原始拦截#

想恢复 TCL 原始策略时,把配置写回完整的原厂策略数组即可。

注意

恢复必须写回下面完整的策略 JSON。只写 {"enable":"true"} 这种短形式,解析器照样按异常处理,拦截并不会恢复。恢复命令含引号和转义,若在手机端执行失败,改用电脑端即可(不影响已解锁状态)。

电脑(PowerShell)——本地生成恢复脚本 → 推送到电视 → 执行(三行按顺序,PowerShell 5.1 和 7 均实测可用):

Terminal window
Set-Content -NoNewline -Encoding Ascii $env:TEMP\restore.sh 'content update --uri content://com.tcl.providers.config/InstallConfig --bind ''config_content:s:[{"enable"\:"true","strategies"\:[{"name"\:"safeStrategy","enable"\:"true","priority"\:"0"},{"name"\:"blackListStrategy","enable"\:"true","packages"\:[],"priority"\:"1"},{"name"\:"thridStrategy","enable"\:"false","packages"\:["com.dangbeimarket","com.shafa.market","com.ant.store.appstore"],"priority"\:"2"},{"name"\:"launcherStrategy","enable"\:"true","packages"\:[],"priority"\:"3"},{"name"\:"overDueStrategy","enable"\:"true","packages"\:[],"priority"\:"4"},{"name"\:"pmStrategy","enable"\:"true","priority"\:"5"}]}]'' --where "project_id=''InstallConfig''"'
Terminal window
adb push $env:TEMP\restore.sh /data/local/tmp/restore.sh
Terminal window
adb shell sh /data/local/tmp/restore.sh

手机(甲壳虫 ADB):

Terminal window
content update --uri content://com.tcl.providers.config/InstallConfig --bind 'config_content:s:[{"enable"\:"true","strategies"\:[{"name"\:"safeStrategy","enable"\:"true","priority"\:"0"},{"name"\:"blackListStrategy","enable"\:"true","packages"\:[],"priority"\:"1"},{"name"\:"thridStrategy","enable"\:"false","packages"\:["com.dangbeimarket","com.shafa.market","com.ant.store.appstore"],"priority"\:"2"},{"name"\:"launcherStrategy","enable"\:"true","packages"\:[],"priority"\:"3"},{"name"\:"overDueStrategy","enable"\:"true","packages"\:[],"priority"\:"4"},{"name"\:"pmStrategy","enable"\:"true","priority"\:"5"}]}]' --where "project_id='InstallConfig'"

恢复后同样重启验证器:

Terminal window
am force-stop com.android.packageinstaller

验证:查询命令同第 4 节,输出应为 [{"enable":"true","strategies":[...]}]。

原始配置全文(备份用):

[{"enable":"true","strategies":[{"name":"safeStrategy","enable":"true","priority":"0"},{"name":"blackListStrategy","enable":"true","packages":[],"priority":"1"},{"name":"thridStrategy","enable":"false","packages":["com.dangbeimarket","com.shafa.market","com.ant.store.appstore"],"priority":"2"},{"name":"launcherStrategy","enable":"true","packages":[],"priority":"3"},{"name":"overDueStrategy","enable":"true","packages":[],"priority":"4"},{"name":"pmStrategy","enable":"true","priority":"5"}]}]

6. 兜底方案:禁用-安装-恢复#

若上述配置方案因固件更新失效,可回退到传统方案:禁用安装器 → 安装 → 恢复。

Terminal window
adb shell pm disable-user com.android.packageinstaller
adb install -r xxx.apk
adb shell pm enable com.android.packageinstaller
注意

禁用后务必确认恢复:adb shell "dumpsys package com.android.packageinstaller" 输出 enabled=1 才是启用状态(enabled=3 为禁用)。电视在安装器禁用状态下重启可能无法开机。

核心兜底逻辑(PowerShell 脚本要点):

Terminal window
try {
adb shell pm disable-user com.android.packageinstaller
adb install -r $apk
}
finally {
adb shell pm enable com.android.packageinstaller
}

try/finally 保证即使安装失败、甚至 ADB 中途断线,恢复命令也会执行。


7. 故障排查#

Q:写入命令报 Binding not well formed?

JSON 里的冒号转义错了位:手机端恢复命令的冒号必须写成 \:(单反斜杠),写成 \\:(双反斜杠)反而会报这个错。电脑端恢复用「本地脚本 + push」方式,转义已内置,无需手改。解锁则永远可以用零引号写法,天然免疫此问题。

Q:手机端命令执行了但毫无反应?

甲壳虫与电视的连接已断开。先在 app 里重连 192.168.5.6:5555 并确认设备在线,再执行命令;每条命令执行前都确认在线。

Q:写入成功但仍报 INSTALL_FAILED_VERIFICATION_FAILURE?

验证器进程缓存了旧配置,强制重启它:

Terminal window
adb shell am force-stop com.android.packageinstaller

Q:过了一段时间又被拦截了?

TCL 云端配置同步可能覆盖了本地配置,重新执行第 4 节的写入命令即可。可先用第 4 节的查询命令确认当前配置内容。

Q:adb devices 显示 unauthorized?

在电视屏幕上找到「允许 USB 调试」弹窗,勾选「一律允许」并确认;若电视无弹窗,重插网络 ADB 连接触发。


文档版本: 2026-09-05 适用设备: TCL 电视 mt5879_cn 方案(Android 11),其他 TCL/雷鸟机型可参考 适用平台: Wi-Fi ADB / USB ADB

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!

打赏
TCL/雷鸟电视 ADB 安装拦截排查与永久放行
https://blog.zlion.top/posts/tcl-tv-adb-install-unlock/
作者
Shiyan
发布于
2026-08-28
许可协议
CC BY-NC-SA 4.0

评论区

Profile Image of the Author
Shiyan
Hello, I'm Shiyan.
公告
欢迎来到我的博客!
分类
标签
最新动态
站点统计
文章
12
分类
5
标签
37
总字数
29,913
运行时长
0 天
最后活动
0 天前
站点信息
构建平台
Vercel
博客版本
Firefly v6.16.8
文章许可
CC BY-NC-SA 4.0