当用户在 Google Play 上搜索或浏览要下载的应用时,结果会根据哪些应用与设备兼容进行过滤。例如,如果应用需要摄像头,Google Play 不会将该应用显示给没有摄像头的设备。此过滤有助于开发者管理其应用的分发,并有助于确保为用户提供最佳体验。
Google Play 中的过滤基于多种类型的应用元数据和配置设置,包括清单声明、所需库、架构依赖项以及在 Google Play Console 中设置的分发控制,例如地理定位、定价等。
Google Play 过滤部分基于清单声明和 Android 框架的其他方面,但实际的过滤行为不同于框架,并且不受特定 API 级别约束。本文档指定了 Google Play 使用的当前过滤规则。
过滤器在 Google Play 上的工作原理
Google Play 使用下面描述的过滤器限制来确定是否将您的应用显示给正在浏览或搜索 Google Play 应用中应用的用户。
在确定是否显示您的应用时,Google Play 会检查设备的硬件和软件要求,以及其运营商、位置和其他特征。然后,它会将这些特征与应用的清单文件和发布详细信息中表达的限制和依赖项进行比较。
如果根据过滤器规则,应用与设备兼容,则 Google Play 会将应用显示给用户。否则,Google Play 会将您的应用隐藏在搜索结果和类别浏览中,即使用户通过点击指向 Google Play 中应用 ID 的直接链接来专门请求该应用也是如此。
您可以对应用使用任何可用的过滤器的组合。例如,您可以将minSdkVersion
要求设置为"4"
并在应用中设置smallScreens="false"
,然后在将应用上传到 Google Play 时,您可以仅定位欧洲国家/地区(运营商)。因此,Google Play 的过滤器将阻止应用在任何不满足所有这三个要求的设备上可用。
所有过滤限制都与应用程序的版本相关联,并且可能会在不同版本之间发生变化。例如,如果用户已安装您的应用程序,并且您发布了一个更新,该更新使应用程序对用户不可见,则用户将看不到有更新可用。
在 Google Play 网站上进行过滤
当用户浏览Google Play 网站时,他们可以看到所有已发布的应用程序。不过,Google Play 网站会将应用程序要求与用户的每个已注册设备进行兼容性比较,并且仅在应用程序与其设备兼容时才允许他们安装该应用程序。
基于应用清单进行过滤
大多数过滤器都是由应用程序清单文件中的元素触发的,AndroidManifest.xml(尽管清单文件中的所有内容都不能触发过滤)。表 1 列出了您应使用哪些清单元素来触发过滤,并解释了每个元素的过滤方式。
清单元素 | 过滤器名称 | 工作原理 |
---|---|---|
<supports-screens>
|
屏幕尺寸 |
应用程序通过设置 一般来说,Google Play 假设设备上的平台可以将较小的布局适配到较大的屏幕,但不能将较大的布局适配到较小的屏幕。因此,如果应用程序仅声明支持“正常”屏幕尺寸,则 Google Play 会使应用程序可用于正常和大型屏幕设备,但会过滤应用程序,使其不可用于小型屏幕设备。 如果应用程序未为
示例 1 示例 2 示例 3 有关如何在应用程序中声明对屏幕尺寸的支持的更多信息,请参阅 |
<uses-configuration>
|
设备配置 键盘、导航、触摸屏 |
应用程序可以请求某些硬件功能,Google Play 仅在具有所需硬件的设备上显示该应用。 示例 1 示例 2 有关更多详细信息,请参阅 |
<uses-feature>
|
设备功能 ( name ) |
应用程序可以要求设备上存在某些设备功能。此功能是在 Android 2.0(API 级别 5)中引入的。 示例 1 示例 2 有关完整信息,请参阅 基于隐式功能进行过滤:在某些情况下,Google Play 会将通过 |
OpenGL-ES 版本 ( openGlEsVersion ) |
应用程序可以使用 示例 1 示例 2 示例 3 示例 4 有关更多详细信息,请参阅 |
|
<uses-library> |
软件库 | 应用程序可以要求设备上存在特定的共享库。 示例 1 示例 2 有关更多详细信息,请参阅 |
<uses-permission> |
严格来说,Google Play 不会根据 通常,如果应用程序请求与硬件相关的权限,则 Google Play 会假设应用程序需要底层硬件功能,即使可能没有对应的 有关隐含硬件功能的权限列表,请参阅 |
|
<uses-sdk> |
最低框架版本(minSdkVersion ) |
应用程序可以要求最低 API 级别。 示例 1 示例 2 因为您希望避免第二种情况,所以我们建议您始终声明 |
最大框架版本(maxSdkVersion ) |
已弃用。Android 2.1 及更高版本不检查或强制执行 不建议声明 |
高级清单过滤器
除了表 1中的清单元素之外,Google Play 还可以根据表 2 中的高级清单元素过滤应用程序。
这些清单元素及其触发的过滤仅用于特殊用例。这些是为某些类型的需要严格控制应用程序分发的性能游戏和类似应用程序而设计的。大多数应用程序都不应使用这些过滤器。
清单元素 | 摘要 |
---|---|
<compatible-screens> |
如果设备屏幕尺寸和密度与清单中 注意:通常,您不应使用此清单元素。使用此元素可能会大大减少应用程序的潜在用户群,因为它排除了您未列出的所有屏幕尺寸和密度的组合。您应该改为使用 |
<supports-gl-texture> |
除非应用程序支持的 GL 纹理压缩格式中的一种或多种也受设备支持,否则 Google Play 将过滤应用程序。 |
其他过滤器
Google Play 使用其他应用程序特性来确定是否在给定设备上的特定用户面前显示或隐藏应用程序,如下表所述。
过滤器名称 | 工作原理 |
---|---|
发布状态 | 只有已发布的应用程序才会出现在 Google Play 中的搜索和浏览结果中。 即使应用程序未发布,如果用户可以在其“下载”区域中看到已购买、已安装或最近卸载的应用程序,也可以安装该应用程序。 如果应用程序已被暂停,即使它出现在用户的“下载”中,用户也无法重新安装或更新它。 |
定价状态 | 并非所有用户都能看到付费应用。要显示付费应用,设备必须运行 Android 1.1 或更高版本,并且必须位于提供付费应用的国家/地区。如果设备有 SIM 卡,则 SIM 运营商将确定是否提供付费应用。如果设备没有 SIM 卡,则将使用设备的 IP 地址来确定该设备是否位于提供付费应用的国家/地区。 |
国家/地区目标定位 | 将应用上传到 Google Play 时,您可以在定价和分发下选择分发应用的国家/地区。然后,只有您选择的国家/地区的用户的才能使用该应用。 |
CPU 架构 (ABI) | 包含针对特定 CPU 架构(例如 ARM EABI v7 或 x86)的本机库的应用程序仅在支持该架构的设备上可见。有关 NDK 和使用本机库的详细信息,请参阅 什么是 Android NDK? |
受版权保护的应用程序 | Google Play 不再支持 Play Console 中的版权保护功能,也不再根据该功能过滤应用。要保护您的应用,请改用 应用许可。有关更多信息,请参阅 版权保护的替代方案。 |
发布具有不同过滤器的多个 APK
某些特定的 Google Play 过滤器允许您发布同一应用程序的多个 APK,以便为不同的设备配置提供不同的 APK。例如,如果您正在创建使用高保真图形资源的视频游戏,您可能希望创建两个分别支持不同纹理压缩格式的 APK。这样,您可以通过仅包含每个设备配置所需的纹理来减小 APK 文件的大小。根据每个设备对您的纹理压缩格式的支持情况,Google Play 将向其提供您已声明支持该设备的 APK。
目前,只有在每个 APK 根据以下配置提供不同的过滤器时,Google Play 才允许您发布同一应用程序的多个 APK
- OpenGL 纹理压缩格式
通过使用
<supports-gl-texture>
元素。 - 屏幕尺寸(以及可选的屏幕密度)
通过使用
<supports-screens>
或<compatible-screens>
元素。 - API 级别
通过使用
<uses-sdk>
元素。 - CPU 架构 (ABI)
通过包含使用 Android NDK 构建并针对特定 CPU 架构(例如 ARM EABI v7 或 x86)的本机库。
所有其他过滤器的工作方式与往常一样,但只有这四个过滤器可以区分同一应用程序列表中 Google Play 上的 APK。例如,如果 APK 仅根据设备是否具有摄像头而有所不同,则无法发布同一应用程序的多个 APK。
注意:发布同一应用程序的多个 APK 被视为一项高级功能,并且大多数应用程序应该只发布一个支持广泛设备配置的 APK。发布多个 APK 需要您在过滤器中遵循特定规则,并且需要格外注意每个 APK 的版本代码,以确保每个配置的更新路径正确。
如果您需要有关如何在 Google Play 上发布多个 APK 的更多信息,请阅读 多个 APK 支持。