我意识到,为了捕获手机的屏幕截图,所有屏幕截图应用程序都需要我拥有一部扎根的手机。为什么会这样呢?为什么我们不能像Windows那样拥有一个简单的Android截图应用程序?

评论

我一直觉得有趣的是,iPhone是开箱即用地实现了此功能,而这是在Android上启用的主要功能。

请注意,从大约Android 4.0开始,可以通过按住Volume Down + Power按钮来截屏;这是开箱即用的功能,不需要任何应用程序(此处用于后代和搜索引擎)

#1 楼

答案很简单,这是一个权限问题。

Android使用所谓的帧缓冲进行视频显示。帧缓冲区位于/ dev / graphics / fb0。该“文件”基本上是设备在用户界面发生更改时写入的流,它包含〜2帧屏幕显示。

帧缓冲文件的权限为rw- rw- ---。请注意,最后一个“组”具有3个“-”。这基本上意味着,如果您不是owner(是root),则您甚至没有权限读取该文件。

如果安装了系统的应用程序可能会截取屏幕截图,有权读取帧缓冲区。我相信,这就是Motorola Xoom能够截取屏幕截图的方式。它在设备上安装了一个应用程序,作为系统应用程序。

如果开发人员可以访问框架缓冲区,那么读取框架缓冲区实际上很简单。

评论


听起来Google应该将权限更新为r--。如果任何应用程序可以在您的屏幕上监视,那么这可能会带来安全隐患,但这是否只是安装前您必须接受的权限之一(此应用程序可以监视您的屏幕)?要么谷歌要么在弹出菜单中添加一个内置的屏幕截图,然后其他人都无法访问它。后者是我的情况,我的意思是说他们刚刚向Chrome添加了打印预览。

– JD Isaacks
2011年6月27日19:59

我认为,如果只有任何一个市场应用程序都可以读取屏幕,那么o + r的mod就会引起安全问题。

–kzh
11年6月28日在0:26

我认为这取决于。 Windows操作系统不会阻止应用程序进行屏幕截图。到目前为止,我们是否听说过由屏幕截图引起的任何安全问题?

–Cheok Yan Cheng
11年6月28日在7:21

无需在Windows中拍摄屏幕截图,有许多更简便的方法可从Windows计算机上获取数据。我认为,移动是一个更大的问题。只需考虑诸如Square之类的可处理信用卡的应用即可。如果我编写了一项服务,可以在刷卡时进行监听,那么就可以进行屏幕抓取并提取诸如信用卡号,姓名等信息。

–瑞安·康拉德(Ryan Conrad)
11年6月28日在13:28

#2 楼

由于Android的安全重点是将所有应用程序与彼此的数据分开,以防止恶意应用程序窃取或更改您信任的应用程序中的数据,因此它们不允许某个应用程序截取其他应用程序的屏幕快照。

考虑一下您有多少应用程序可以执行OCR等功能,将图片转换为文本,我可以想到手机上至少有四个应用程序可以做到这一点,例如Google Goggles OCRing书名以及OCRing然后翻译外文文本块。现在考虑一下,您有多少应用程序希望在屏幕上显示文本,而您不希望看到不值得信任的应用程序,我的手机上有一个密码数据库应用程序,其中包含用于各种系统的密码加密数据库,一个恶意的屏保应用程序可能会等待直到该密码应用程序运行,然后在屏幕上拍照并显示登录详细信息,然后对其进行OCR并发送出去。即使您未向该应用授予对“联系人”数据库​​的访问权限,浏览器历史记录或聊天日志等权限,它也可以对“联系人”列表中的所有内容执行相同的操作。这只是滥用屏幕的一种方式。

这就是为什么要使屏幕截图具有通用性的原因,它必须位于操作系统中(您已经信任所有数据)。这就是为什么在具有内置屏幕截图功能的手机上将其添加为系统的一部分,而不是作为单独的应用程序添加的原因。
如果您对手机进行root操作并允许应用程序截屏,那么您实际上是在暗示您暗中信任该应用程序能够执行系统可以做的所有事情,包括访问和干扰其他应用程序及其数据,并且完全信任它不会滥用该访问权限。除了System / OS,Android绝不会允许任何事情。

#3 楼

简短答案:因为1)计算机很复杂,并且2)屏幕截图功能实际上不是很简单(对于程序员,而不是用户)。换句话说,进行屏幕截图需要屏幕截图过程深入了解操作系统内部,与之混为一谈,然后再次脱钩。由于Android试图建立一个内置的安全模型(与Windows中出现的“事后思考”相对),因此在几个安全障碍上进行了屏幕截图。可以绕开这些密码,但是当前唯一可行的方法(没有在内核中创建漏洞-和潜在的漏洞-)是使用功能强大的root帐户,该帐户不受限制。

评论


我对计算机硬件的工作了解不多,但是我认为GPU向屏幕发送了一个“图像”。该图像不能被截取并保存吗?

– JD Isaacks
2011年6月27日17:38

@John Isaacks,基本上就是帧缓冲区发生的情况。看到我的答案,为什么它仍然需要root。

–瑞安·康拉德(Ryan Conrad)
2011年6月27日18:50