InfoQ|Android 11强制用户使用内置摄像头,谷歌让安卓更封闭了吗?

作者丨核子可乐、小智 Android 11 强制使用内置摄像头 , 美颜相机们迎来闷头一棍?
在诞生之初 , Android 系统一直努力强调自由与灵活的设计思路 , 倡导开发者可以通过代码实现任何功能 。 与 iOS 相比 , Android 为人称道的正是这种开放的开源方式 。 但随着对安全性与隐私性的高度关注 , 情况早已有所变化 。 过去十年以来 , Android 的每一次重大更新都在以保护用户的名义关闭或限制某些功能 。
在即将到来的 Android 11 版本中 , 用户将无法选择第三方相机应用 , 为其他应用拍摄照片或视频 。 换言之 , 用户将只能使用内置相机应用 。
InfoQ|Android 11强制用户使用内置摄像头,谷歌让安卓更封闭了吗?
本文插图
Android 11 预计将于今年第三季度发布 , 而在最新的 issue track 中 , 开发者们发现最新版本再次更改了相机 API 的一些设定 , 用户将只能使用 Android 内置相机应用 , 这将对第三方相机如美颜、轻颜等 App 造成不小的影响 。
此次更改的核心 , 在于 Android 定义的 Intent 系统 。 举个例子 , 当你在各大 App 如知乎、极客时间等选择更新头像时 , 你可以选择拍摄图片上传或者从手机图库上传 。 而由于这些 App 本身并不提供拍摄功能 , 因此用户可以选择调用原生相机应用或第三方相机应用拍摄上传图像 。 这背后涉及到的就是 Android 的 Intent 系统 。
在 Intent 系统中 , 开发者只需要根据相应条件创建一项请求 , Android 就会提示用户从已安装的应用列表中做出选择 , 如下图:
InfoQ|Android 11强制用户使用内置摄像头,谷歌让安卓更封闭了吗?
本文插图
但是 , 即将推送的 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 端口替代默认相机的用户不太友好 。 此外 , 某些应用还不允许使用其他工作流 , 意味着我们在其中将无法使用任何相机应用 。
【InfoQ|Android 11强制用户使用内置摄像头,谷歌让安卓更封闭了吗?】在此项变更的 issue track 区域 , 也有许多 Android 开发者提出了明确的质疑:
请详细解释下使用第三方相机应用怎么就恶意了?
我完全不同意……至少也应该给一个新的开发者选项 , 让用户可以有选择的权利 , 目前为止我没看到这个变更有什么好的地方 。
Android 的创建原则之一就是开放的性质和为每个任务选择应用程序的能力 。 消除了这些选择 , 你就像苹果一样 , 封闭的生态系统 , 创新有限 。
这项变更是谁负责的?
……
从以上的开发者吐槽也可以看出 , 开放、创新是 Android 系统的灵魂 , 这也是其区别于 iOS 系统的一大差异 。 但从近几年手机 OS 的发展规律来看 , Android 变得越来越 iOS , iOS 变得越来越像 Android 。
而最近几次 Android 大版本的更新 , 总是伴随着谷歌强制这 , 谷歌强制那的新闻 , 从收紧文件访问权、收紧 API 调用、统一手势操作、强制无缝更新等争议颇多的新 feature 就可以看出谷歌试图统一 Android 的生态和标准 。 但 Android 生态的多样性 , 恰恰也是 Android 系统可玩性的体验 , 如果大家都大差不差 , Android 手机也就变成了只有长相不同的苹果手机 。
谷歌的官方解释是为了用户隐私与安全 , 但目前来看 , 这个理由似乎并不受 Android 开发者们的认可 。 有趣的是 , 当苹果表示不会为 Safari 浏览器的 WebKit 引擎中实现 16 个 Web API , 理由是它们构成了隐私威胁时 , 谷歌的工程师认为苹果是在维护自己的蛋糕 。
你怎么看?
InfoQ 读者交流群上线啦!各位小伙伴可以扫描下方二维码 , 添加 InfoQ 小助手 , 回复关键字“进群”申请入群 。 大家可以和 InfoQ 读者一起畅所欲言 , 和编辑们零距离接触 , 超值的技术礼包等你领取 , 还有超值活动等你参加 , 快来加入我们吧!


    推荐阅读