欢迎光临
我们一直在努力

Zorv AI 系统级浮窗与特权架构全解析:LSPosed / ADB 深度拆解

1. 项目简介

项目:Zorv AI(包名 com.ai.assistance.quro) 开源地址:https://github.com/Quor-a/ZorvAI 适用版本:v1.0.77 更新日期:2026-09-02

Zorv AI 是一款深度整合系统能力的 AI 助手,其核心亮点在于突破 Android 系统边界,实现跨应用感知、系统级浮窗常驻与高特权操作。本文将从架构层面拆解其三大核心能力:LSPosed / Xposed 模块注入、ADB 高特权通道以及系统级浮窗(对话框 / 浏览器化小窗)。


2. 范围与定位

本章覆盖三类"穿透系统边界"的能力:

能力角色是否必需
LSPosed / Xposed 跨应用注入桥,补齐"前台 App 感知"等盲区 可选(opt-in)
ADB 无线调试 / 授权 / 调用系统组件的高特权通道 按需启用
系统级浮窗 对话框、浏览器以 TYPE_APPLICATION_OVERLAY 常驻屏幕 核心能力

关键事实:核心能力(无障碍 / Shizuku / 设备管理员 / ROOT / ADB)走 Zorv AI 自有管线;LSPosed 只是"可选增强",用于解决"获取前台 App"等少数盲区,模块启停仍在 LSPosed Manager 完成。


3. 特权获取总览(自有管线 + 可选 LSPosed)

#mermaid-svg-poKZo4siKbiQnzPU{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-poKZo4siKbiQnzPU .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-poKZo4siKbiQnzPU .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-poKZo4siKbiQnzPU .error-icon{fill:#552222;}#mermaid-svg-poKZo4siKbiQnzPU .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-poKZo4siKbiQnzPU .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-poKZo4siKbiQnzPU .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-poKZo4siKbiQnzPU .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-poKZo4siKbiQnzPU .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-poKZo4siKbiQnzPU .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-poKZo4siKbiQnzPU .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-poKZo4siKbiQnzPU .marker{fill:#333333;stroke:#333333;}#mermaid-svg-poKZo4siKbiQnzPU .marker.cross{stroke:#333333;}#mermaid-svg-poKZo4siKbiQnzPU svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-poKZo4siKbiQnzPU p{margin:0;}#mermaid-svg-poKZo4siKbiQnzPU .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-poKZo4siKbiQnzPU .cluster-label text{fill:#333;}#mermaid-svg-poKZo4siKbiQnzPU .cluster-label span{color:#333;}#mermaid-svg-poKZo4siKbiQnzPU .cluster-label span p{background-color:transparent;}#mermaid-svg-poKZo4siKbiQnzPU .label text,#mermaid-svg-poKZo4siKbiQnzPU span{fill:#333;color:#333;}#mermaid-svg-poKZo4siKbiQnzPU .node rect,#mermaid-svg-poKZo4siKbiQnzPU .node circle,#mermaid-svg-poKZo4siKbiQnzPU .node ellipse,#mermaid-svg-poKZo4siKbiQnzPU .node polygon,#mermaid-svg-poKZo4siKbiQnzPU .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-poKZo4siKbiQnzPU .rough-node .label text,#mermaid-svg-poKZo4siKbiQnzPU .node .label text,#mermaid-svg-poKZo4siKbiQnzPU .image-shape .label,#mermaid-svg-poKZo4siKbiQnzPU .icon-shape .label{text-anchor:middle;}#mermaid-svg-poKZo4siKbiQnzPU .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-poKZo4siKbiQnzPU .rough-node .label,#mermaid-svg-poKZo4siKbiQnzPU .node .label,#mermaid-svg-poKZo4siKbiQnzPU .image-shape .label,#mermaid-svg-poKZo4siKbiQnzPU .icon-shape .label{text-align:center;}#mermaid-svg-poKZo4siKbiQnzPU .node.clickable{cursor:pointer;}#mermaid-svg-poKZo4siKbiQnzPU .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-poKZo4siKbiQnzPU .arrowheadPath{fill:#333333;}#mermaid-svg-poKZo4siKbiQnzPU .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-poKZo4siKbiQnzPU .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-poKZo4siKbiQnzPU .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-poKZo4siKbiQnzPU .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-poKZo4siKbiQnzPU .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-poKZo4siKbiQnzPU .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-poKZo4siKbiQnzPU .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-poKZo4siKbiQnzPU .cluster text{fill:#333;}#mermaid-svg-poKZo4siKbiQnzPU .cluster span{color:#333;}#mermaid-svg-poKZo4siKbiQnzPU div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-poKZo4siKbiQnzPU .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-poKZo4siKbiQnzPU rect.text{fill:none;stroke-width:0;}#mermaid-svg-poKZo4siKbiQnzPU .icon-shape,#mermaid-svg-poKZo4siKbiQnzPU .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-poKZo4siKbiQnzPU .icon-shape p,#mermaid-svg-poKZo4siKbiQnzPU .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-poKZo4siKbiQnzPU .icon-shape .label rect,#mermaid-svg-poKZo4siKbiQnzPU .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-poKZo4siKbiQnzPU .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-poKZo4siKbiQnzPU .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-poKZo4siKbiQnzPU :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

可选增强

Zorv AI 自有特权管线(核心)

无障碍 AccessibilityService

Shizuku

设备管理员 DeviceAdmin

ROOT

ADB 无线调试

LSPosed 模块(QuroXposedModule)

前台 App 感知盲区

QuroLsposeBridgeReceiver补全 get_foreground_app

  • 自有管线覆盖绝大多数系统操作(点击、启动 Activity、读设置等)。
  • 仅当"需要知道当前前台是哪个 App"这类信息原生不可得时,才由 LSPosed 桥接补全。

4. LSPosed / Xposed 模块架构

4.1 组件与文件

组件说明
QuroXposedModule opt-in Xposed 模块入口(LSPosed 识别)
QuroLSPosed 作用域判定:isAppInScope() 读取标记文件 .lsposed_scope 真实判定作用域
QuroLsposeTool AI 可调用的 lsposed 工具:支持 status / foreground / enable / disable
QuroLsposeBridgeReceiver 接收 ACTION_APP_OPENED 广播(com.ai.assistance.quro.LSPOSED_APP_OPENED)收集前台 App

4.2 启用流程(enable)

QuroLsposeBridgeReceiver

外部存储根

QuroLsposeTool

AI 引擎

QuroLsposeBridgeReceiver

外部存储根

QuroLsposeTool

AI 引擎

#mermaid-svg-VLOUQyDc4TVkFBu7{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-VLOUQyDc4TVkFBu7 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-VLOUQyDc4TVkFBu7 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-VLOUQyDc4TVkFBu7 .error-icon{fill:#552222;}#mermaid-svg-VLOUQyDc4TVkFBu7 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-VLOUQyDc4TVkFBu7 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-VLOUQyDc4TVkFBu7 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-VLOUQyDc4TVkFBu7 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-VLOUQyDc4TVkFBu7 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-VLOUQyDc4TVkFBu7 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-VLOUQyDc4TVkFBu7 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-VLOUQyDc4TVkFBu7 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-VLOUQyDc4TVkFBu7 .marker.cross{stroke:#333333;}#mermaid-svg-VLOUQyDc4TVkFBu7 svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-VLOUQyDc4TVkFBu7 p{margin:0;}#mermaid-svg-VLOUQyDc4TVkFBu7 .actor{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-VLOUQyDc4TVkFBu7 text.actor>tspan{fill:black;stroke:none;}#mermaid-svg-VLOUQyDc4TVkFBu7 .actor-line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-VLOUQyDc4TVkFBu7 .innerArc{stroke-width:1.5;stroke-dasharray:none;}#mermaid-svg-VLOUQyDc4TVkFBu7 .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#mermaid-svg-VLOUQyDc4TVkFBu7 .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#mermaid-svg-VLOUQyDc4TVkFBu7 #arrowhead path{fill:#333;stroke:#333;}#mermaid-svg-VLOUQyDc4TVkFBu7 .sequenceNumber{fill:white;}#mermaid-svg-VLOUQyDc4TVkFBu7 #sequencenumber{fill:#333;}#mermaid-svg-VLOUQyDc4TVkFBu7 #crosshead path{fill:#333;stroke:#333;}#mermaid-svg-VLOUQyDc4TVkFBu7 .messageText{fill:#333;stroke:none;}#mermaid-svg-VLOUQyDc4TVkFBu7 .labelBox{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-VLOUQyDc4TVkFBu7 .labelText,#mermaid-svg-VLOUQyDc4TVkFBu7 .labelText>tspan{fill:black;stroke:none;}#mermaid-svg-VLOUQyDc4TVkFBu7 .loopText,#mermaid-svg-VLOUQyDc4TVkFBu7 .loopText>tspan{fill:black;stroke:none;}#mermaid-svg-VLOUQyDc4TVkFBu7 .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-VLOUQyDc4TVkFBu7 .note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-VLOUQyDc4TVkFBu7 .noteText,#mermaid-svg-VLOUQyDc4TVkFBu7 .noteText>tspan{fill:black;stroke:none;}#mermaid-svg-VLOUQyDc4TVkFBu7 .activation0{fill:#f4f4f4;stroke:#666;}#mermaid-svg-VLOUQyDc4TVkFBu7 .activation1{fill:#f4f4f4;stroke:#666;}#mermaid-svg-VLOUQyDc4TVkFBu7 .activation2{fill:#f4f4f4;stroke:#666;}#mermaid-svg-VLOUQyDc4TVkFBu7 .actorPopupMenu{position:absolute;}#mermaid-svg-VLOUQyDc4TVkFBu7 .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#mermaid-svg-VLOUQyDc4TVkFBu7 .actor-man line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-VLOUQyDc4TVkFBu7 .actor-man circle,#mermaid-svg-VLOUQyDc4TVkFBu7 line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;stroke-width:2px;}#mermaid-svg-VLOUQyDc4TVkFBu7 :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

lsposed(action="enable", pkg="…")

写 lsposed_bridge.json\\n(跨应用注入桥 + 可选 system_redirect)

模块读取并注册监听

后续前台 App 变化经广播回传

  • enable 写入外部存储根 lsposed_bridge.json:跨应用注入桥 + 可选 system_redirect。
  • disable 移除桥配置。
  • status 查询当前桥/作用域状态。
  • foreground 补 get_foreground_app 盲区(经广播回传当前前台 App)。

模块本身的"启用 / 停用 / 作用域勾选"仍在 LSPosed Manager 内操作;Zorv AI 只负责驱动桥配置与读取状态。


5. ADB 通道

ADB 在 Zorv AI 中作为"高特权系统通道"使用,典型场景:

场景说明
无线调试授权 通过 adb tcpip / 配对码获取 shell 级权限
授予特殊权限 给自身或受控端授权(如 WRITE_SECURE_SETTINGS)
调用系统组件 启动 Activity / Service / 发送广播
与浮窗配合 ADB 取得权限后,浮窗可稳定常驻、免被系统收回

ADB 与无障碍 / Shizuku / ROOT 共同构成"自有特权管线",与 LSPosed 互为补充。


6. 对话框「化小窗」架构

用户可把正在进行的 AI 对话收起为屏幕角落的小窗,继续在其它 App 中操作,需要时再点开。

#mermaid-svg-ysI3t4mTkwAfMRgL{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-ysI3t4mTkwAfMRgL .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-ysI3t4mTkwAfMRgL .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-ysI3t4mTkwAfMRgL .error-icon{fill:#552222;}#mermaid-svg-ysI3t4mTkwAfMRgL .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-ysI3t4mTkwAfMRgL .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-ysI3t4mTkwAfMRgL .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-ysI3t4mTkwAfMRgL .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-ysI3t4mTkwAfMRgL .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-ysI3t4mTkwAfMRgL .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-ysI3t4mTkwAfMRgL .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-ysI3t4mTkwAfMRgL .marker{fill:#333333;stroke:#333333;}#mermaid-svg-ysI3t4mTkwAfMRgL .marker.cross{stroke:#333333;}#mermaid-svg-ysI3t4mTkwAfMRgL svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-ysI3t4mTkwAfMRgL p{margin:0;}#mermaid-svg-ysI3t4mTkwAfMRgL .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-ysI3t4mTkwAfMRgL .cluster-label text{fill:#333;}#mermaid-svg-ysI3t4mTkwAfMRgL .cluster-label span{color:#333;}#mermaid-svg-ysI3t4mTkwAfMRgL .cluster-label span p{background-color:transparent;}#mermaid-svg-ysI3t4mTkwAfMRgL .label text,#mermaid-svg-ysI3t4mTkwAfMRgL span{fill:#333;color:#333;}#mermaid-svg-ysI3t4mTkwAfMRgL .node rect,#mermaid-svg-ysI3t4mTkwAfMRgL .node circle,#mermaid-svg-ysI3t4mTkwAfMRgL .node ellipse,#mermaid-svg-ysI3t4mTkwAfMRgL .node polygon,#mermaid-svg-ysI3t4mTkwAfMRgL .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-ysI3t4mTkwAfMRgL .rough-node .label text,#mermaid-svg-ysI3t4mTkwAfMRgL .node .label text,#mermaid-svg-ysI3t4mTkwAfMRgL .image-shape .label,#mermaid-svg-ysI3t4mTkwAfMRgL .icon-shape .label{text-anchor:middle;}#mermaid-svg-ysI3t4mTkwAfMRgL .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-ysI3t4mTkwAfMRgL .rough-node .label,#mermaid-svg-ysI3t4mTkwAfMRgL .node .label,#mermaid-svg-ysI3t4mTkwAfMRgL .image-shape .label,#mermaid-svg-ysI3t4mTkwAfMRgL .icon-shape .label{text-align:center;}#mermaid-svg-ysI3t4mTkwAfMRgL .node.clickable{cursor:pointer;}#mermaid-svg-ysI3t4mTkwAfMRgL .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-ysI3t4mTkwAfMRgL .arrowheadPath{fill:#333333;}#mermaid-svg-ysI3t4mTkwAfMRgL .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-ysI3t4mTkwAfMRgL .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-ysI3t4mTkwAfMRgL .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-ysI3t4mTkwAfMRgL .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-ysI3t4mTkwAfMRgL .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-ysI3t4mTkwAfMRgL .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-ysI3t4mTkwAfMRgL .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-ysI3t4mTkwAfMRgL .cluster text{fill:#333;}#mermaid-svg-ysI3t4mTkwAfMRgL .cluster span{color:#333;}#mermaid-svg-ysI3t4mTkwAfMRgL div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-ysI3t4mTkwAfMRgL .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-ysI3t4mTkwAfMRgL rect.text{fill:none;stroke-width:0;}#mermaid-svg-ysI3t4mTkwAfMRgL .icon-shape,#mermaid-svg-ysI3t4mTkwAfMRgL .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-ysI3t4mTkwAfMRgL .icon-shape p,#mermaid-svg-ysI3t4mTkwAfMRgL .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-ysI3t4mTkwAfMRgL .icon-shape .label rect,#mermaid-svg-ysI3t4mTkwAfMRgL .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-ysI3t4mTkwAfMRgL .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-ysI3t4mTkwAfMRgL .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-ysI3t4mTkwAfMRgL :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

用户点 化小窗

ChatScreen 对话

QuroMiniWindowManager(进程级单例)

QuroMiniWindowServicespecialUse 前台保活

WindowManager.addViewTYPE_APPLICATION_OVERLAY

对话浮窗 View(常驻: show/hide 只 add/remove)

关键点:

  • QuroMiniWindowService:以 specialUse 前台服务保活,避免被后台回收。
  • QuroMiniWindowManager:进程级单例,统一收纳/恢复浮窗。
  • 常驻不重建:显示/隐藏只做 addView / removeView,浮窗 View 全程不销毁、不丢状态。

7. 浏览器「化小窗」架构

内置浏览器同样可化为小窗,且复用全局单 WebView,避免重复加载:

#mermaid-svg-oFzprelmjdr7pqml{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-oFzprelmjdr7pqml .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-oFzprelmjdr7pqml .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-oFzprelmjdr7pqml .error-icon{fill:#552222;}#mermaid-svg-oFzprelmjdr7pqml .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-oFzprelmjdr7pqml .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-oFzprelmjdr7pqml .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-oFzprelmjdr7pqml .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-oFzprelmjdr7pqml .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-oFzprelmjdr7pqml .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-oFzprelmjdr7pqml .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-oFzprelmjdr7pqml .marker{fill:#333333;stroke:#333333;}#mermaid-svg-oFzprelmjdr7pqml .marker.cross{stroke:#333333;}#mermaid-svg-oFzprelmjdr7pqml svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-oFzprelmjdr7pqml p{margin:0;}#mermaid-svg-oFzprelmjdr7pqml .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-oFzprelmjdr7pqml .cluster-label text{fill:#333;}#mermaid-svg-oFzprelmjdr7pqml .cluster-label span{color:#333;}#mermaid-svg-oFzprelmjdr7pqml .cluster-label span p{background-color:transparent;}#mermaid-svg-oFzprelmjdr7pqml .label text,#mermaid-svg-oFzprelmjdr7pqml span{fill:#333;color:#333;}#mermaid-svg-oFzprelmjdr7pqml .node rect,#mermaid-svg-oFzprelmjdr7pqml .node circle,#mermaid-svg-oFzprelmjdr7pqml .node ellipse,#mermaid-svg-oFzprelmjdr7pqml .node polygon,#mermaid-svg-oFzprelmjdr7pqml .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-oFzprelmjdr7pqml .rough-node .label text,#mermaid-svg-oFzprelmjdr7pqml .node .label text,#mermaid-svg-oFzprelmjdr7pqml .image-shape .label,#mermaid-svg-oFzprelmjdr7pqml .icon-shape .label{text-anchor:middle;}#mermaid-svg-oFzprelmjdr7pqml .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-oFzprelmjdr7pqml .rough-node .label,#mermaid-svg-oFzprelmjdr7pqml .node .label,#mermaid-svg-oFzprelmjdr7pqml .image-shape .label,#mermaid-svg-oFzprelmjdr7pqml .icon-shape .label{text-align:center;}#mermaid-svg-oFzprelmjdr7pqml .node.clickable{cursor:pointer;}#mermaid-svg-oFzprelmjdr7pqml .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-oFzprelmjdr7pqml .arrowheadPath{fill:#333333;}#mermaid-svg-oFzprelmjdr7pqml .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-oFzprelmjdr7pqml .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-oFzprelmjdr7pqml .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-oFzprelmjdr7pqml .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-oFzprelmjdr7pqml .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-oFzprelmjdr7pqml .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-oFzprelmjdr7pqml .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-oFzprelmjdr7pqml .cluster text{fill:#333;}#mermaid-svg-oFzprelmjdr7pqml .cluster span{color:#333;}#mermaid-svg-oFzprelmjdr7pqml div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-oFzprelmjdr7pqml .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-oFzprelmjdr7pqml rect.text{fill:none;stroke-width:0;}#mermaid-svg-oFzprelmjdr7pqml .icon-shape,#mermaid-svg-oFzprelmjdr7pqml .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-oFzprelmjdr7pqml .icon-shape p,#mermaid-svg-oFzprelmjdr7pqml .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-oFzprelmjdr7pqml .icon-shape .label rect,#mermaid-svg-oFzprelmjdr7pqml .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-oFzprelmjdr7pqml .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-oFzprelmjdr7pqml .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-oFzprelmjdr7pqml :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

browserUrl=nullbrowserFloatUrl=u

重挂不重建/不重载

AI 调用 browser_act(open)

QuroMiniWindowManager

QuroBrowserViewHost(全局单 WebView)

WindowManager.addView

浏览器浮窗

  • AI 用 browser_act 的 open 默认化小窗:browserUrl=null; browserFloatUrl=u。
  • QuroBrowserViewHost 持有全局唯一 WebView,化小窗时只是"重挂"到浮窗容器,不重建、不重载页面,保住登录态与滚动位置。

8. 浮窗公共机制(WindowManager / flags / 常驻)

两类浮窗共享同一套底层机制:

机制取值 / 行为效果
窗口类型 TYPE_APPLICATION_OVERLAY 系统级浮层,覆盖其它 App
保活 QuroMiniWindowService(specialUse 前台) 不被后台回收
焦点 flag FLAG_NOT_FOCUSABLE 不抢焦点,不影响其它 App 输入
输入法兼容 FLAG_ALT_FOCUSABLE_IM 浮窗内可正常唤起键盘
触摸穿透 FLAG_NOT_TOUCH_MODAL 浮窗外区域仍可操作原 App
全屏布局 FLAG_LAYOUT_IN_SCREEN 浮窗可铺满/贴边
生命周期 show/hide = addView / removeView 视图常驻,状态不丢

#mermaid-svg-Q1Io5lZyGmURvtGS{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-Q1Io5lZyGmURvtGS .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-Q1Io5lZyGmURvtGS .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-Q1Io5lZyGmURvtGS .error-icon{fill:#552222;}#mermaid-svg-Q1Io5lZyGmURvtGS .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-Q1Io5lZyGmURvtGS .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-Q1Io5lZyGmURvtGS .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-Q1Io5lZyGmURvtGS .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-Q1Io5lZyGmURvtGS .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-Q1Io5lZyGmURvtGS .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-Q1Io5lZyGmURvtGS .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-Q1Io5lZyGmURvtGS .marker{fill:#333333;stroke:#333333;}#mermaid-svg-Q1Io5lZyGmURvtGS .marker.cross{stroke:#333333;}#mermaid-svg-Q1Io5lZyGmURvtGS svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-Q1Io5lZyGmURvtGS p{margin:0;}#mermaid-svg-Q1Io5lZyGmURvtGS .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-Q1Io5lZyGmURvtGS .cluster-label text{fill:#333;}#mermaid-svg-Q1Io5lZyGmURvtGS .cluster-label span{color:#333;}#mermaid-svg-Q1Io5lZyGmURvtGS .cluster-label span p{background-color:transparent;}#mermaid-svg-Q1Io5lZyGmURvtGS .label text,#mermaid-svg-Q1Io5lZyGmURvtGS span{fill:#333;color:#333;}#mermaid-svg-Q1Io5lZyGmURvtGS .node rect,#mermaid-svg-Q1Io5lZyGmURvtGS .node circle,#mermaid-svg-Q1Io5lZyGmURvtGS .node ellipse,#mermaid-svg-Q1Io5lZyGmURvtGS .node polygon,#mermaid-svg-Q1Io5lZyGmURvtGS .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-Q1Io5lZyGmURvtGS .rough-node .label text,#mermaid-svg-Q1Io5lZyGmURvtGS .node .label text,#mermaid-svg-Q1Io5lZyGmURvtGS .image-shape .label,#mermaid-svg-Q1Io5lZyGmURvtGS .icon-shape .label{text-anchor:middle;}#mermaid-svg-Q1Io5lZyGmURvtGS .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-Q1Io5lZyGmURvtGS .rough-node .label,#mermaid-svg-Q1Io5lZyGmURvtGS .node .label,#mermaid-svg-Q1Io5lZyGmURvtGS .image-shape .label,#mermaid-svg-Q1Io5lZyGmURvtGS .icon-shape .label{text-align:center;}#mermaid-svg-Q1Io5lZyGmURvtGS .node.clickable{cursor:pointer;}#mermaid-svg-Q1Io5lZyGmURvtGS .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-Q1Io5lZyGmURvtGS .arrowheadPath{fill:#333333;}#mermaid-svg-Q1Io5lZyGmURvtGS .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-Q1Io5lZyGmURvtGS .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-Q1Io5lZyGmURvtGS .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-Q1Io5lZyGmURvtGS .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-Q1Io5lZyGmURvtGS .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-Q1Io5lZyGmURvtGS .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-Q1Io5lZyGmURvtGS .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-Q1Io5lZyGmURvtGS .cluster text{fill:#333;}#mermaid-svg-Q1Io5lZyGmURvtGS .cluster span{color:#333;}#mermaid-svg-Q1Io5lZyGmURvtGS div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-Q1Io5lZyGmURvtGS .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-Q1Io5lZyGmURvtGS rect.text{fill:none;stroke-width:0;}#mermaid-svg-Q1Io5lZyGmURvtGS .icon-shape,#mermaid-svg-Q1Io5lZyGmURvtGS .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-Q1Io5lZyGmURvtGS .icon-shape p,#mermaid-svg-Q1Io5lZyGmURvtGS .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-Q1Io5lZyGmURvtGS .icon-shape .label rect,#mermaid-svg-Q1Io5lZyGmURvtGS .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-Q1Io5lZyGmURvtGS .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-Q1Io5lZyGmURvtGS .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-Q1Io5lZyGmURvtGS :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

FLAG_NOT_FOCUSABLE

不挡其它 App 输入

FLAG_NOT_TOUCH_MODAL

FLAG_ALT_FOCUSABLE_IM

面板内可唤起键盘

FLAG_LAYOUT_IN_SCREEN

可贴边/全屏


9. 能力对照表

能力触发方式核心类是否可选
对话化小窗 用户/AI 触发 QuroMiniWindowService + QuroMiniWindowManager 核心
浏览器化小窗 browser_act(open) 默认 QuroBrowserViewHost 核心
LSPosed 桥 lsposed 工具 QuroLsposeTool / QuroLSPosed / QuroLsposeBridgeReceiver 可选
前台 App 补全 广播回填 QuroLsposeBridgeReceiver 可选
ADB 高特权 无线调试 / 授权 自有管线 按需

10. 总结

Zorv AI 通过自有特权管线 + 可选 LSPosed 增强的组合策略,在 Android 系统边界上实现了优雅的突破:

  • 核心能力自研:无障碍、Shizuku、设备管理员、ROOT、ADB 全部走自有管线,不依赖外部框架;
  • LSPosed 按需增强:仅在"前台 App 感知"等原生盲区启用,模块启停交给 LSPosed Manager;
  • 浮窗常驻不重建:对话框与浏览器化小窗共享 TYPE_APPLICATION_OVERLAY 机制,视图全程不销毁、状态不丢失。

如果你对跨进程能力框架、小程序渲染或 AI 人格孵化机制感兴趣,欢迎 Star 项目持续关注后续架构解析。

开源地址:https://github.com/Quor-a/ZorvAI

赞(0)
未经允许不得转载:171主机测评 » Zorv AI 系统级浮窗与特权架构全解析:LSPosed / ADB 深度拆解
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址