免ROOT截屏实现原理:深入屏译的MediaProjection、Shizuku与无障碍三条通路
【免费下载链接】overlay-translator无需 ROOT 的开源 Android 屏幕实时翻译工具适合游戏、视觉小说和漫画。支持端侧与云端 OCR、离线 LLM、多种翻译服务和文字朗读TTS译文可直接显示在画面上。Open-source no-root Android real-time screen translator for games, visual novels, and manga. Supports on-device and cloud OCR, offline LLMs, multiple translation services, on-screen translations, and text-to-speech (TTS).项目地址https://gitcode.com/gh_mirrors/ov/overlay-translator点击查看免费下载屏译overlay-translator是一款免ROOT的 Android 屏幕实时翻译工具面向游戏、视觉小说和漫画把截屏 → 识字 → 翻译 → 叠加显示整条链路装进一台手机。而截屏是这条链路的地基没有 ROOTAndroid 却有三条官方或半官方的截屏通路——无障碍AccessibilitytakeScreenshot、系统级MediaProjection、以及借助 Shizuku 的 shell 权限。本文将用通俗的语言拆解屏译是如何在这三条通路上选择、降级与优化的。为什么截屏是免ROOT应用最难的一环Android 对读取屏幕像素这件事管得很严普通应用没有权限直接拿到别的 App 画面screencap命令属于 shell 身份普通应用不能调用任何截屏能力通常都伴随用户授权或系统服务绑定。屏译的解法不是绕开限制而是把三条合法通路都接上按设备环境自动挑最快的一条。所有截屏实现都收敛在 app/src/main/java/com/gameocr/app/capture/ 目录下由一个统一的抽象接口 Screenshotter.kt 描述核心契约只有三件事interface Screenshotter { val isReady: Boolean suspend fun capture(): Bitmap? // 抓一帧返回 null 表示跳过 fun release() }有了这层抽象上层服务 CaptureService.kt 完全不关心像素到底从哪来只关心这一帧能不能拿到。通路一无障碍 takeScreenshot——最快的系统级截图Android 11API 30起AccessibilityService新增了takeScreenshot()接口是三条通路中唯一零弹窗的方案无需用户每次授权一次开启无障碍权限之后截屏静默进行硬件缓冲直接交付系统回传HardwareBuffer屏译用Bitmap.wrapHardwareBuffer()包一层再拷贝为ARGB_8888转换成本很低有系统节流AOSP 会拒绝间隔小于约 333ms 的请求屏译因此内置了 AccessibilityScreenshotPacing 节拍器两次请求之间至少间隔 350ms。实现见 AccessibilityScreenshotter.kt配套的服务声明在 a11y_config.xml。这条通路还顺带承担了其他能力监听焦点输入框输入翻译、音量双键触发等截图只是其中一个副产品。代价是门槛需要用户愿意开启无障碍权限且仅 API 30 可用。通路二MediaProjection——兼容性最好的标准方案MediaProjection是 Android 官方提供的录屏/投屏框架也是屏译的兜底通路授权通过系统对话框MediaProjectionManager.createScreenCaptureIntent()请求授权用户点开始后拿到一次性令牌resultCode Intent data。请求活动见 CaptureStartRequestActivity.kt建虚拟显示用令牌创建MediaProjection再createVirtualDisplay()挂一块虚拟屏幕把真实屏幕镜像过来收帧虚拟屏幕的输出面交给ImageReader每来一帧回调一次取最新帧转成Bitmap。完整实现见 MediaProjectionScreenshotter.kt几个工程细节值得一提只取最新帧循环翻译时不需要每帧都收LatestFrameAwaiter.kt 会把积压帧丢弃、只留最新一帧避免队列越拖越长处理行内边距Image的rowStride常比pixelStride × 宽度多出填充字节代码会按头部信息裁掉 padding保证 Bitmap 尺寸正确分辨率变化自适应注册onCapturedContentResize回调旋转屏幕后重建ImageReader并resize虚拟显示失败自动回滚旧 Surface。MediaProjection 的短板在授权体验每次部分系统每次开机后都会弹系统授权窗Android 14 之后还会弹出正在录制的常驻提示这正是屏译把它放在优先级最低的原因。通路三Shizuku——免弹窗的高性能旁路Shizuku 是一个把 shell系统 UID权限安全地租借给应用的开源项目。有了 shell 身份屏译就可以直接执行screencap从而绕开 MediaProjection 的授权弹窗。实现在 ShizukuScreenshotter.kt内部按可用性分层回退优先级方式说明1无障碍takeScreenshotShizuku 路径也会先复用无障碍快通道2原生screencapraw 帧直接读未压缩像素最快解码逻辑在 ShizukuRawScreencapDecoder.kt3screencap -pPNG兼容 raw 头未知的设备原生 raw 帧的解码是纯手工活先读 16 字节头部从头部推算整帧字节数再精确读取、丢弃流里多余的数据。这样做避免了ByteArrayOutputStream反复扩容拷贝单次截屏可稳定在百毫秒级。代价同样写在源码注释里raw shell 通路每次截屏约 150–300ms帧率上限约 5 FPS适合按需触发而非高帧率轮询且反射调用的Shizuku.newProcess属于 hidden API未来 Shizuku 大版本变动可能失效——所以 Shizuku 只是加速项不是必需品。Shizuku 的安装与就绪状态检测在 shizuku/ 目录ShizukuCapabilities.kt 会把未安装 / 未运行 / 未授权 / 未配对等状态归一成统一的可用度枚举。三条通路如何自动选择选路逻辑集中在 CaptureStartCoordinator.kt 与 SystemCapturePolicy.kt规则可以总结成一句话用户在会话中手动选了 Shizuku 就选 Shizuku否则 API 30 且无障碍截图能力就绪 → 无障碍再否则 → MediaProjection。internal fun systemCaptureBackend(sdk: Int, connected: Boolean, capable: Boolean): CaptureBackend if (sdk 30 connected capable) CaptureBackend.ACCESSIBILITY else CaptureBackend.MEDIA_PROJECTION服务启动后CaptureService 按后端实例化对应的Screenshotter若走 Shizuku 路径还会先做一次试截图dry-run失败就弹提示并停止服务避免用户对着一个装不出的悬浮球干等。三条通路的横向对比通路每次授权弹窗最低版本单次延迟依赖无障碍 takeScreenshot否一次开启API 30低硬件缓冲无障碍权限MediaProjection是系统对话框API 21中无Shizuku screencap否视 Shizuku 后端raw 约 150–300msShizuku 应用截到帧之后屏译如何把实时做省电拿到像素只是开始。循环翻译模式下屏译用两级策略避免每 0.5 秒 OCR 翻译一次的浪费帧差去重FrameDeduper.kt 把帧缩成 9×8 灰度图算出 64bit 的 dHash 指纹与上一帧做汉明距离比较距离 ≤ 6 就判定画面没变直接跳过 OCR 和翻译停稳轮询LoopRuntimePolicy.kt 决定轮询间隔取用户设定间隔与后端最小间隔Shizuku 路径为 350ms的较大值画面稳定后才真正出手翻译。总结一张图看懂屏译的截屏架构用户点开始截屏 │ CaptureStartCoordinator.prepare() ── 会话偏好Shizuku / 系统 │ ├── 系统偏好 API30 无障碍就绪 ──► AccessibilityScreenshotter最快 ├── 偏好 Shizuku 且 Shizuku 就绪 ───► ShizukuScreenshotter │ 无障碍快通道 → raw screencap → PNG └── 其余情况 ─────────────────────► MediaProjectionScreenshotter兜底 │ Screenshotter.capture() 每帧 │ LatestFrameAwaiter 取最新帧 → FrameDeduper dHash 去重 → OCR / 翻译 / 悬浮窗渲染三条通路共用同一个Screenshotter接口、同一套去重与渲染管线用户在主页或快捷磁贴里无感切换——这就是免ROOT 也能实时截屏翻译背后的完整答案不追求一条完美的路而是把系统给的三条路都铺平按设备条件选最快的那条走。想了解具体代码实现建议从 Screenshotter.kt、CaptureService.kt 和 SystemCapturePolicy.kt 三个文件读起相关策略的单测如 SystemCapturePolicyTest.kt也演示了每条选路分支的预期行为。赞分享【免费下载链接】overlay-translator无需 ROOT 的开源 Android 屏幕实时翻译工具适合游戏、视觉小说和漫画。支持端侧与云端 OCR、离线 LLM、多种翻译服务和文字朗读TTS译文可直接显示在画面上。Open-source no-root Android real-time screen translator for games, visual novels, and manga. Supports on-device and cloud OCR, offline LLMs, multiple translation services, on-screen translations, and text-to-speech (TTS).项目地址https://gitcode.com/gh_mirrors/ov/overlay-translator点击查看免费下载相关推荐ScreenTranslator终极截屏翻译解决方案跨语言阅读无障碍还在为外语内容阅读障碍而烦恼吗ScreenTranslator这款开源工具将彻底改变你的跨语言阅读体验。作为一款集截屏、OCR识别和在线翻译于一体的强大软件桌面应用OCRvFlow权限配置一步到位无障碍、Shizuku与Root全解vFlow权限配置一步到位无障碍、Shizuku与Root全解 刚入手 Android 自动化工具 vFlow却不知如何完成 vFlow 权限配置这篇指南终极指南深入理解LMAX Disruptor内存屏障原理与无锁算法实现终极指南深入理解LMAX Disruptor内存屏障原理与无锁算法实现 LMAX Disruptor是一个高性能的线程间消息传递库它通过创新的内存屏障和无锁并发编程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

OpenWAM-α 微调指南:一条命令把 6400 小时预训练权重迁到下游任务

OpenWAM-α 微调指南:一条命令把 6400 小时预训练权重迁到下游任务

【免费下载链接】OpenWAM Official repository for "OpenWAM: An Open, Modular Exploration Towards Systematic World–Action Model Pretraining". 项目地址: https://gitcode.com/gh_mirrors/op/OpenWAM 点击查看 免费下载 OpenWAM-α 是基于 5.185 …

2026/10/16 22:53:20 阅读更多 →
Ulead GIF Animator 5.05免安装配置指南:Win10/Win11稳定运行GIF动效交付

Ulead GIF Animator 5.05免安装配置指南:Win10/Win11稳定运行GIF动效交付

简介:这是一份免安装版Ulead GIF Animator 5.05动画制作工具资源,面向网页设计初学者、多媒体课件制作者及轻量级动效需求者,解决GIF动画快速制作、编辑与多格式导出的核心问题。资源压缩包为RAR格式,共158个文件,含58…

2026/10/16 22:53:20 阅读更多 →
A Hybrid Optimization Framework for Cooperative CAV Merging Based on Traveling Salesman Problem:论文分析

A Hybrid Optimization Framework for Cooperative CAV Merging Based on Traveling Salesman Problem:论文分析

1. 论文概述 本论文提出了一种基于旅行商问题(Traveling Salesman Problem, TSP)的混合优化框架,用于解决网联自动驾驶车辆(Connected and Automated Vehicles, CAV)在高速公路匝道合流场景下的协同控制问题。论文将车…

2026/10/16 22:53:20 阅读更多 →

最新新闻

数据驱动+SIMD:粒子系统内存布局优化与百倍性能提升实战

数据驱动+SIMD:粒子系统内存布局优化与百倍性能提升实战

一个朋友找我调过一个工业仿真系统里的粒子更新逻辑。从算法上看,它简单到不能再简单——一个for循环,每个粒子做一次牛顿力学更新,整体复杂度就是标准的O(n)。但跑起来就是慢,50万粒子一帧更新要120毫秒,CPU占用还忽高…

2026/10/16 23:39:03 阅读更多 →
MCP协议与CLI工具的本质区别:协议层与交互层的分层设计

MCP协议与CLI工具的本质区别:协议层与交互层的分层设计

1. 这不是技术迭代,是概念混淆——先搞懂“MCP”和“CLI”根本不在同一维度 最近刷到好几条标题带“大厂把 MCP 换成 CLI 了”的短视频和推文,评论区一堆人跟着惊呼“MCP 被淘汰了?”“CLI 真香!”“赶紧学命令行,不然…

2026/10/16 23:39:03 阅读更多 →
APS生产计划排程系统解决方案,在制造企业中有哪些作用?

APS生产计划排程系统解决方案,在制造企业中有哪些作用?

引言随着制造业订单越来越碎片化、交期越来越短、生产约束越来越复杂,依靠 Excel、人工经验或传统 MRP 已经很难快速编制出真正可执行的生产计划。APS(Advanced Planning and Scheduling,高级计划与排程)系统正是在这一背景下出现…

2026/10/16 23:37:01 阅读更多 →
SPI技术系列 03 · SPI 速度与电气约束

SPI技术系列 03 · SPI 速度与电气约束

📚 I2C 技术系列 持续更新中 本系列从推挽电气层一路打到 Linux spi 子系统,把"四根线"背后的电气/协议/控制器/驱动/实战全拧成一根线。 👉 想系统追更,戳这里查看完整专栏: 【SPI 技术系列】 👉 其他技术…

2026/10/16 23:37:01 阅读更多 →
环形调度与取模优化:ZOJ3981 气球机器人最小等待时间全解析

环形调度与取模优化:ZOJ3981 气球机器人最小等待时间全解析

1. 题目到底在说什么:先把这个环形流水线看透第一次看 ZOJ3981 的题面,估计不少人和我一样,第一反应是“这不就是个模拟吗,机器人一路走一路发气球,每次 AC 都记一下等待时间,最后枚举起点取最小”。但真上…

2026/10/16 23:36:01 阅读更多 →
CC-Switch 原来是这么玩的!90% 的人都没用对:把 settings 改到 TaoToken

CC-Switch 原来是这么玩的!90% 的人都没用对:把 settings 改到 TaoToken

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 23:36:01 阅读更多 →

日新闻

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 0:00:05 阅读更多 →
信号与系统频域分析作业解题指南

信号与系统频域分析作业解题指南

1. 作业背景与核心要求解析信号与系统作为电子信息类专业的核心基础课,其作业设计往往直接关联课程的核心知识框架。2026年春季第六次作业的布置,通常对应着课程进展到频域分析的关键阶段。根据常规教学进度推测,本次作业可能涉及以下核心内容…

2026/10/16 0:00:05 阅读更多 →
Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

1. 从一个"四不像"的练手项目说起如果你已经看完了Django的官方教程前几章,跟着敲完了投票应用,大概会有一种"我好像会了,又好像什么都不会"的割裂感。教程里每个知识点都是拆开的——这一章讲模型,下一章讲视…

2026/10/16 0:00:05 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/16 21:35:51 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/15 19:41:51 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/16 15:04:24 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 21:54:38 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 14:23:36 阅读更多 →