Android 11强制用户使用内置相机应用,谷歌让安卓更封闭了吗?

2020 年 8 月 20 日

Android 11强制用户使用内置相机应用,谷歌让安卓更封闭了吗?

在诞生之初,Android 系统一直努力强调自由与灵活的设计思路,倡导开发者可以通过代码实现任何功能。与 iOS 相比,Android 为人称道的正是这种开放的开源方式。但随着对安全性与隐私性的高度关注,情况早已有所变化。过去十年以来,Android 的每一次重大更新都在以保护用户的名义关闭或限制某些功能。

在即将到来的 Android 11 版本中,用户将无法选择第三方相机应用,为其他应用拍摄照片或视频。换言之,用户将只能使用内置相机应用。

Android 11 预计将于今年第三季度发布,而在最新的 issue track 中,开发者们发现最新版本再次更改了相机 API 的一些设定,用户将只能使用 Android 内置相机应用,这将对第三方相机如美颜、轻颜等 App 造成不小的影响。

此次更改的核心,在于 Android 定义的 Intent 系统。举个例子,当你在各大 App 如知乎、极客时间等选择更新头像时,你可以选择拍摄图片上传或者从手机图库上传。而由于这些 App 本身并不提供拍摄功能,因此用户可以选择调用原生相机应用或第三方相机应用拍摄上传图像。这背后涉及到的就是 Android 的 Intent 系统。

在 Intent 系统中,开发者只需要根据相应条件创建一项请求,Android 就会提示用户从已安装的应用列表中做出选择,如下图:

Android 10 上的相机选取器

但是,即将推送的 Android 11 版本对于这一机制做出了大刀阔斧的调整。有三项 Intents 的运作方式迎来变更,具体包括: VIDEO_CAPTURE IMAGE_CAPTURE 以及 IMAGE_CAPTURE_SECURE 。Android 11 将自动提供预安装的相机应用以执行这类操作,用户无需(法)主动搜索其他应用。

从 Android 11 版本开始,只有预安装的系统相机应用才能响应以下 Intent 操作:

  • android.media.action.VIDEO_CAPTURE
  • android.media.action.IMAGE_CAPTURE
  • android.media.action.IMAGE_CAPTURE_SECURE

如果有多款预安装系统相机应用可供选择,则系统会显示对话框,提示用户从中选择一种。如果你希望在应用中使用特定的第三方相机应用进行图像或视频捕捉,也需要通过在 Intent 当中明确指定目标软件包的名称或组件。

谷歌在 Android 11 的新行为列表中提到了这项更改,并在 Issue Tracker 中进一步予以确认。虽然人们普遍认为此举是为了提升隐私性与安全性,但谷歌并没有解释这些 Intents 为什么有可能引发风险。也许某些恶意相机应用会诱导用户将其设置为默认选项,并借此捕捉本应保密的敏感内容。

“……我们认为,对用户的隐私与安全的保护才是正确的权衡。” — 谷歌 Issue Tracker .

Android 11 不仅关闭了根据请求自动启动第三方预安装相机应用的选项,还阻止应用程序开发人员提供类似的界面以模拟这项传统功能。外网有人通过使用一些简单的代码进行测试,尝试查询手机上的相机应用,而后分别在安装有同一相机应用的 Android 10 与 Android 11 设备上加以运行。Android 10 正确列出了所有已安装的相机应用,但 Android 11 却不会返回任何报告——甚至不会返回谷歌在设备上预安装的 Camera 应用。

上图:Android 10 上的调试器视图。下图:Android 11 上的调试器视图。

有人说,谷歌确实给开发者提供了一种解决方法,只是可用度不高。说明文档建议开发者明确提供软件包名称,以检查已安装的相机应用。这意味着开发者必须预先指定首选应用,并将用户直接定向至这些应用处。当然,也有其他方法能够在无需指定所有软件包名称的前提下获取选项,例如获取全部应用列表,而后手动搜索 Intent 过滤器,但这似乎比指定名称还要复杂。

至少在目前的 Android 11 beta 版中,这一设定已经切实起效,并影响到一切以 API 30 或更低版本为目标的应用程序。目前还不清楚 Android CTS(兼容性测试套件)是否也有同样的变动,或者说允许 OEM 厂商将其更改为原本的规则。但就现在的情况看,谷歌很可能会将此设定为 Android 的未来标准。

这项调整的影响不能说特别大,毕竟对于大部分一直在默认使用内置相机应用的用户来说,其实不会受到任何影响。另外,大多数应用仍然允许用户先打开自己喜爱的相机应用拍下照片,然后再通过图库进行上传。但是,用户的操作过程确实更繁琐了,对于那些需要经常使用特定滤镜拍摄个人资料图片、或者习惯用 G Cam 端口替代默认相机的用户不太友好。此外,某些应用还不允许使用其他工作流,意味着我们在其中将无法使用任何相机应用。

在此项变更的 issue track 区域,也有许多 Android 开发者提出了明确的质疑:

请详细解释下使用第三方相机应用怎么就恶意了?

我完全不同意……至少也应该给一个新的开发者选项,让用户可以有选择的权利,目前为止我没看到这个变更有什么好的地方。

Android 的创建原则之一就是开放的性质和为每个任务选择应用程序的能力。消除了这些选择,你就像苹果一样,封闭的生态系统,创新有限。

这项变更是谁负责的?

……

从以上的开发者吐槽也可以看出,开放、创新是 Android 系统的灵魂,这也是其区别于 iOS 系统的一大差异。但从近几年手机 OS 的发展规律来看,Android 变得越来越 iOS,iOS 变得越来越像 Android。

而最近几次 Android 大版本的更新,总是伴随着谷歌强制这,谷歌强制那的新闻,从收紧文件访问权、收紧 API 调用、统一手势操作、强制无缝更新等争议颇多的新 feature 就可以看出谷歌试图统一 Android 的生态和标准。但 Android 生态的多样性,恰恰也是 Android 系统可玩性的体验,如果大家都大差不差,Android 手机也就变成了只有长相不同的苹果手机。

谷歌的官方解释是为了用户隐私与安全,但目前来看,这个理由似乎并不受 Android 开发者们的认可。有趣的是,当苹果表示不会为 Safari 浏览器的 WebKit 引擎中实现 16 个 Web API,理由是它们构成了隐私威胁时,谷歌的工程师认为苹果是在维护自己的蛋糕。

你怎么看?

2020 年 8 月 20 日 16:03 890

评论 3 条评论

发布
用户头像
对银行金融APP会更加好。那更应该让开发者有自己的APP中保留选项, 是否允许用户使用第三方的APP进行拍照。由开发者自行决定,用户选择。 不过习惯用iPhone的,又觉得没什么问题,只要原生相机做得好。 基本都用原生相机, 很少第三方相机。
2020 年 09 月 28 日 13:58
回复
用户头像
我的看法不重要!
2020 年 08 月 21 日 11:32
回复
😂
2020 年 09 月 04 日 10:11
回复
没有更多评论了
发现更多内容

java安全编码指南之:对象构建

程序那些事

Java 安全 安全编码指南 对象构建

Keepass+Synology 打造私人密码管理器

zj坚果

oeasy教您玩转linux-010110内容回顾

o

面试必备知识点:悲观锁和乐观锁的那些事儿

鄙人薛某

面试 乐观锁 悲观锁 CAS 并发控制

你也许还不懂静态方法和实例方法

架构师修行之路

Cassandra Gossip协议的二三事儿

华为云开发者社区

源码 三次握手 开发者 Cassandra Gossip协议

MAC系统初始化

焦振清

macos 重装系统

话题讨论 | 当你敲代码累了时,一般喜欢吃点什么补充能量?

InfoQ写作平台

加班 写作平台 代码 话题讨论

Jenkins持续集成「编译打包、代码检查、单元测试、环境部署、软件测试​」

清菡

jenkins

甲方日常4

大橘子

工作 随笔杂谈 日常

DockerHub 镜像仓库的使用

哈喽沃德先生

Docker 容器 微服务 镜像 容器技术

MySQL复杂where条件分析

程序员历小冰

MySQL

揭开链表的真面目

Java旅途

Java 数据结构 链表

SpreadJS 纯前端表格控件应用案例:表格数据管理平台

Geek_Willie

图解Janusgraph系列-分布式id生成策略分析

洋仔聊编程

分布式 分布式系统 janusgraph 图数据库

C语言内存泄露很严重,如何应对?

华为云开发者社区

c 内存泄露 内存 代码 函数

anyRTC Native 4.1.0.1与Web SDK 4.0.11上线

anyRTC开发者

WebRTC 在线学习 语音 直播 sdk

产品经理的架构思维

吴世亮

架构 产品经理 电商

week 12 学习总结

Geek_2e7dd7

性能相关 磁盘I/O子系统

Linuxer

挽救你的视频号:能够把PPT转换成视频,把备注转换成语音的开源项目

陈磊@Criss

SpreadJS 纯前端表格控件应用案例:MHT-CP数据填报采集平台

Geek_Willie

week 12 作业

Geek_2e7dd7

自己做的 PPT 总被批「缺少干货」?试试先回答这三个问题

Tony Wu

效率工具 方法论 PPT

拖延症竟然是自己给自己的一种奖励?如何干掉它?

非著名程序员

个人成长 拖延症 番茄土豆工作法

区块链usdt支付系统开发,承兑支付跑分系统搭建

WX13823153201

区块链usdt支付系统开发

云原生如何来进行HTTPS升级

soolaugust

架构 云原生 设计模式

SpreadJS 纯前端表格控件应用案例:雨诺订单管理系统(雨诺OMS)

Geek_Willie

Golang写算法

卒迹

golang 算法

1. 不吹不擂,第一篇就能提升你对Bean Validation数据校验的认知

YourBatman

Hibernate-Validator Bean Validation 数据校验 JSR380

新时代背景下的Java语法特性

高翔龙

Java java 14 java 14 新特性 Java 分布式

Android 11强制用户使用内置相机应用,谷歌让安卓更封闭了吗?-InfoQ