部分观察仔细的用户会注意到 Android O 的一个新特性:“允许未知来源” 的设置已经消失不见。要知道,这是在此前的 Android 版本中,安装 Google Play 或是其他认证商店之外的应用所必经的设置。本文就围绕新的未知来源应用安装许可,以及它为用户以及开发者所带来的益处展开。
前段时间我们发布了 Google Play 保护机制 (Google Play Protect),它能够全面且实时地保护您的设备。不同于第三方来源软件中会携带有潜在有害应用 (PHAs) ,Google Play 仍然是目前最安全的应用来源地。
潜在有害应用开发者的常见套路,是通过恶意下载器 (hostile downloader) 来加载他们的应用。试举一例,某个游戏应用中或许并不包含恶意代码,但它会将潜在有害应用伪装为一项重要升级,继而安装到用户的设备之上 (更多关于恶意下载器的信息请查阅 2016 年 Android 安全性总览) 。用户只要允许了未知来源应用安装,就很容易让这样狡诈的手段得逞。
上图中左 (预览版 Android O) :潜在有害应用伪装为系统升级的安装界面;右 (Android O) :潜在有害应用安装前,首先需要用户允许该 App 进行安装
在 Android O 系统下,安装未知来源应用许可会使得该操作的安全性更高。就像其他的运行时权限 (runtime permissions) 一样,该项许可与触发安装的 App 绑定。确保在弹出安装页面之前,先让用户确认安装权限。在安装了 Android O 或更高版本系统的设备上,恶意下载器就无法在用户获得提示之前,诱导用户进行安装。
新的许可机制能够为用户提供透明化,可控且线性的可信任来源安装许可。在设置中,用户能够看到已经允许安装未知来源 App 的应用列表。用户也可按照自身需求,随时撤回某个应用的许可。
上图中随时都能够查看已允许安装未知来源 App 的应用列表。如需让获取许可更具效率,开发者可在安装过程中,直接让用户跳转至许可界面。
开发者层面的变动
如要利用这一新的许可机制,通过包安装器 (Package Installer) 下载以及安装其他 App 的应用开发者们需要作出一些变动。如果应用在使用 26 或更高级别的 targetSdkLevel 来引导用户安装其他 App,那么清单文件则需要包括 REQUEST_INSTALL_PACKAGES 许可:
- <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
没有声明此项许可的应用无法安装其他 App。对于无 App 安装需求的应用来说,这是一种非常方便的安保办法。开发者可以通过 ACTION_MANAGE_UNKNOWN_APP_SOURCES 意图动作 (Intent action),让用户直接跳转到安装 未知来源应用 (Install unknown apps) 的界面。也可以通过使用包管理器 (PackageManager) canRequestPackageInstalls ( ) API,查询安装许可的状态。
请记住,如果这些 App 已在 Google Play 上发布,而且能够安装和更新其他应用,那么 Google Play 政策法规 仍然适用。绝大多数情况下,这种行为并不恰当;相反,您应该在 Google Play Store 的应用列表中提供一个深层链接 (deep-link)。
请确保已经了解更多有关安装未知来源应用的发布指南,并关注与 Android O 安全性相关的更多公告。
【本文是51CTO专栏机构“谷歌开发者”的原创稿件,转载请联系原作者(微信公众号:Google_Developers)】