HandyXlateHandyXlate
权限说明

不需要无障碍权限的屏幕翻译 App

无障碍权限可以读取你在手机上做的每一件事。对一个只是把译文盖在屏幕上的工具来说,这是一项过重的授权。这个页面说明这项权限到底能做什么、哪些 App 会索取它,以及不用它怎么完成翻译。

4 分钟阅读

先说结论:翻译 Android 屏幕上的文字,并不一定需要无障碍服务。Android 本身就为这件事提供了另一套机制,更窄、也更贴合场景。代价是两者的取字方式不同,不能完全互相替代。

无障碍服务到底能做什么

无障碍(Accessibility)是 Android 专门为「帮助用户克服障碍」设计的系统能力。它的权力很大:持有它的 App 可以读取其他 App 里的文字、观察你的点击、并感知全设备的界面变化。正因如此,它被广泛用于屏幕翻译;也正因如此,把这项权限交给一个翻译工具是一个需要认真对待的决定。

  • 读取其他 App 中的文字,包括聊天内容与信息流
  • 观察你点击的位置与输入的内容
  • 持续感知屏幕上的内容变化
  • 在你关闭它之前一直保持后台运行
这不是漏洞,也不是绕过

无障碍是 Android 有意提供的能力。有些屏幕翻译 App 用它,是因为它能直接从应用的界面结构里取到文字。真正的问题不是这项权限合不合法,而是一个只需要画一层译文遮罩的工具,是否真的需要这么大权限才能完成它的工作。

不用它,翻译是怎么做的

Android 自带的 MediaProjection API 就是系统级的截屏授权流程。你点一个系统弹窗,App 拿到一帧画面,截取随即结束。这个 App 永远拿不到一个「持续观察你屏幕」的句柄——它只拿到一张图片,做完事,图片就被释放了。

因为拿到的是图片而不是界面结构,App 需要先跑 OCR 把文字识别出来,再送去翻译。这就是取舍:截屏权限更窄,但取字这一步交给了 OCR。HandyXlate 把这一步放在端侧完成,所以文字的识别过程不需要把截图送出手机。

两种做法的对比

  • 无障碍服务:可以直接从应用的界面结构取字,甚至能读到当前并未显示的文字;但需要一项全设备范围的常驻权限
  • MediaProjection 截屏:经你同意后拿到一帧画面,需要 OCR 才能取字;不持有任何常驻权限
  • HandyXlate 走的是 MediaProjection 这条路,完全不声明、也不调用 AccessibilityService API
  • 有些 App 是两种模式都提供,所以在判断之前,先确认自己当前用的是哪一种
判断一个 App 之前,先看它当前是哪种模式

至少有一款主流屏幕翻译 App,默认模式并不使用无障碍,只有当你打开「聊天翻译」时才切换到需要无障碍的模式。如果你是在回避无障碍权限,请确认自己所处的模式,而不要凭印象判断。

不用无障碍,你会失去什么

如果宣称「一点代价都没有」,那是不诚实的。直接读取界面结构,在部分 App 上确实更准确,也能拿到当前并未显示出来的文字。而 OCR 路线是从屏幕上真实存在的像素出发,因此更依赖画面的清晰程度:如果某个区域字号很小、对比度很低或者字体高度艺术化,OCR 可用的信息就更少。

实际影响主要集中在游戏和排版 unusual 的应用上。对于评论、字幕、漫画和普通应用文字,端侧 OCR 处理得相当好。

关于这项权限,大家常问的问题

屏幕翻译一定要无障碍服务吗?+

不一定。Android 的 MediaProjection 截屏 API 可以在完全不申请无障碍权限的情况下提供一帧画面用于翻译。HandyXlate 不声明也不调用 AccessibilityService API。

为什么有的 App 要无障碍而不是截屏?+

无障碍服务可以直接从应用的界面结构里读字,对部分 App 更精准,也能读到当前没显示出来的文字。但这种精准的代价,是一项能读取整台设备的权限。

HandyXlate 会上传我的截图吗?+

不会。OCR 在端侧完成,截图不会上传。只有在使用在线翻译引擎时,才会发送识别出的文字,而不是图片。

需要 root 吗?+

不需要。它使用 Android 标准的截屏授权流程和悬浮窗权限。

不用无障碍还能离线翻译吗?+

可以。OCR 始终在端侧完成,端侧翻译覆盖 59 种语言,所需语言模型会自动下载。关于默认行为说清楚一点:单次翻译默认使用在线引擎以保证质量,此时只发送识别出的文字,截图始终不上传;在设置里切换到端侧翻译后,整个过程都可以留在手机上。免费用户的自动翻译默认就是离线,Premium 可以选择在线优先或保持离线。

Android 应用

不用无障碍权限,翻译你的屏幕

HandyXlate 截取一帧,在端侧识别,再把译文覆盖回原屏幕。无需无障碍服务,无需 root,没有广告。