当用户在 Google Play 上搜索或浏览要下载的应用时,结果会根据哪些应用与设备兼容进行过滤。例如,如果应用需要相机,Google Play 不会将该应用显示给没有相机的设备。此过滤功能有助于开发者管理其应用的分发,并有助于确保为用户提供最佳体验。
Google Play 中的过滤基于多种类型的应用元数据和配置设置,包括清单声明、所需库、架构依赖项以及在 Google Play 管理中心中设置的分发控制,例如地理位置定位、定价等等。
Google Play 过滤部分基于清单声明和 Android 框架的其他方面,但实际的过滤行为与框架不同,并且不受特定 API 级别约束。本文档指定了 Google Play 当前使用的过滤规则。
过滤器在 Google Play 上的工作方式
Google Play 使用下面描述的过滤器限制来确定是否向浏览或搜索 Google Play 应用中应用的用户显示您的应用。
在确定是否显示您的应用时,Google Play 会检查设备的硬件和软件要求,以及其运营商、位置和其他特性。然后,它会将这些特性与应用清单文件和发布详细信息中表达的限制和依赖项进行比较。
如果根据过滤规则,应用与设备兼容,则 Google Play 会向用户显示该应用。否则,即使用户通过点击直接指向 Google Play 中应用 ID 的深层链接专门请求该应用,Google Play 也会将其从搜索结果和类别浏览中隐藏。
您可以为您的应用使用任何可用过滤器的组合。例如,您可以设置 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 需要您遵循过滤器中的特定规则,并且需要格外注意每个 APK 的版本代码,以确保每个配置的正确更新路径。
如果您需要有关如何在 Google Play 上发布多个 APK 的更多信息,请阅读 多个 APK 支持。