【Android开发API】Google提供的服务:在Google Play中加过滤器

更新时间:2023-04-26 17:56:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

## 快速预览 * Google Play

使用过滤器控制着安卓系统设备在用户访问市场时能否获取您的应用。 * 通过比较您在应用的manifest 文件中所声明的配置和设备定义的配置,以及其他?些因素来进行过滤。 ## 在这篇文档中 :Filters on Google Play#过滤器是如何在Google Play 上?作的|过滤器是如何在Google Play 上?作的:Filters on Google Play#基于Manifest 元素的过滤器|基于Manifest 元素的过滤器 ::Filters on Google Play#高级manifest 过滤器|高级manifest 过滤器 :Filters on Google Play#其他过滤器|其他过滤器 :Filters on Google Play#发布具有不同过滤器的多个APK|发布具有不同过滤器的多个APK ## 其他相关 Android Compatibility

[](3225ff31580216fc700afdb5/guide/topics/manifest/supports-gl-texture-element)

[](3225ff31580216fc700afdb5/guide/topics/manifest/supports-screens-element)[](3225ff31580216fc700afdb5/guide/topics/manifest/uses-configuration-element)

[](3225ff31580216fc700afdb5/guide/topics/manifest/uses-feature-element)

[](3225ff31580216fc700afdb5/guide/topics/manifest/uses-library-element)

[](3225ff31580216fc700afdb5/guide/topics/manifest/uses-permission-element)[](3225ff31580216fc700afdb5/guide/topics/manifest/uses-sdk-element)

译:CuGBabyBeaR

原文:Filters on Google Play 完成时间:12.08.06

Google Play 过滤器

当?个用户用安卓设备在Google Play 上搜索或者浏览时,结果将会基

于应用是否与该设备兼容而被过滤。例如,如果?个应用需要?个摄像头(在应用的manifest 文件中指定),那么Google Play 将不会在任何没有摄像头的设备上显示这个应用。

manifest 文件中的声明与设备的硬件是否相符不是唯?的过滤方式。过滤同时可能基于用户的国家和运营商、是否插?SIM 卡等其他的因数。

Google Play 过滤器的改变是与Android 平台自身的改变相独立的。此文档将会定期更新,以反映影响Google Play 过滤应用方式的任何改变。

过滤器是如何在Google Play 上?作的

Google Play 使用如下所述的过滤器控制,以判定是否向正在使用Google Play app 浏览或搜索应用的用户显示您的应用。当决定是否显示您的应用时,Google Play 检查设备的硬件和软件配置,以及它的网络运营商、位置、和其他参数。然后Google Play 会将这些信息与由应用的manifest 文件所表示的限制项和依赖项以及发布细节相比较。如果根据过滤器规则应用适合于该设备,Google Play 将应用显示给用户。

否则,即便用户通过点击直接指向该应用ID 的深层链接而向该应用提出明确请求,Google Play 也会从搜索结果和浏览分类中将您的应用隐藏。

注意:当用户浏览[Google Play 网站](3225ff31580216fc700afdb5/apps)时,他们可以看见所有已发布的应用。但是,Google Play 网站会将应用的需求与 用户所注册的每?个设备的兼容性 相比较,并且只能允许他们安装与他们的设备所兼容的应用。

您可以对您的应用使用任意可用过滤器的组合。例如,您可以在应用里设置minSdkVersion 的要求4,设置smallScreens="false",然后上传应用到Google Play 时 您可以只将European countries (运营商)设为对象。于是Google Play 的过滤器会阻止这个应用显示在任何不满足这三个要求的设备上。

所有的过滤器限制都和应用的版本所联系,并且可以在不同的版本之间改变。例如,如果?个用户安装了您的应用,然后您发布了?个更新使得这个应用对此用户不可见,这个用户不会看见这个可用更新。

基于Manifest 元素的过滤器

?多数过滤器是由应用的manifest 文件中的元素所触发的,这个manifest 文件是Android

Manifest|AndroidManifest.xml (尽管不是manifest 文件里所有的东西都能触发过滤器)。表1列出了您可以用来触发过滤器的manifest 元素,以及解释过滤器是如何作用到这些元素上的。

表1. 触发Google Play 过滤器的manifest 元素。 {|style="border-spacing: 0px;margin: 4px 4px; width: 90%; border-left:1px solid #ccc;border-top:1px solid #ccc; "

|-style="background:#DEE8F1; " ! style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px" |

3225ff31580216fc700afdb5

eoe 移动开发者社区

manifest 元素

! style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px" | 过滤器名 !style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px" | ?作方式

|- style=" vertical-align:top;" | style=" border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " | |style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " | Screen Size

屏幕?? | style=" border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " | 应用通过设置元素的属性,来指定能够支持的屏幕的?? 。在应用发布后,Google Play 会基于用户设备的屏幕??,使用这些属性来判断是否显示给用户。

?般说来,Google Play 假定设备上的平台 能够将较?的布局适应于于较?的屏幕,但是不能讲较?的布局兼容较?的屏幕。因此,如果?个应用声明屏幕尺?只支持"normal"中等尺?,Google Play 会将这个应用显示在中等和?尺?屏幕的设备上,但不会显示在?尺?屏幕的设备上。

如果?个应用不声明的属性,Google Play 会为这些属性套用默认值,默认值基于API 版本有所不同。

具体做法是:

对于那些将 android: minSdkVersion 或 android: targetSdkVersion 设置为3或以下的应用,元素自身未定义并且没有可用属性。在这种情况下Google Play 假定应用是为中等尺?的屏幕设计的,并且在有中等和?尺?屏幕的设备上显示这个应用。

当android: minSdkVersion 或 android: targetSdkVersion 设置为4或者更高的时候,所有属性的默认值都是"true"。在这种方式下,这个应用被认为是默认支持所有屏幕尺?。

例1:*

Manifest 声明 并且没有包括元素。* 结果如下:* Google Play 不会向?尺?屏幕设备的用户显示这个APP ,但会向中等和?尺?屏幕设备的用户显示,除非不满足其他过滤器。

例2:*

Manifest 声明并且没有包括元素。* 结果如下:* Google Play 会向使用任何设备的用户显示这个应用,除非不满足其他的过滤器。

例3:*

Manifest 声明并且没有包括元素。* 结果如下:* Google Play 会向所有用户显示这个应用,除非不满足其他的过滤器。获取更多有关如何声明您的应用所支持屏幕尺?的信息,请浏览和Supporting Multiple Screens 。

|- style="vertical-align:top;" | style=" border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px;" | |style=" border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px;" | Device Configuration:keyboard, navigation, touch screen

设备配置:

键盘,轨迹球,触摸屏

| style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px;" | 应用可以要求某项硬件特征,Google Play 将只在具备此硬件的设备上显示这个应用。

例1:*

Manifest 包含了,然后?个用户在不具备五向导航控制的设备上搜索应用。* 结果:* Google Play 不会向此用户显示这个应用。

例2:*

Manifest 没有包含元素。结果:Google Play 会向所有用户显示这个应用,除非不满足其他的过滤器。

更多细节见。

|- style="vertical-align:top;" | style=" border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px;" || style=" border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px;" | Device Features

3/3225ff31580216fc700afdb5

eoe 移动开发者社区

(name)

设备特征(特征名)

| style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px;" |

应用可以要求设备上需要某?设备特征。这项功能自Android 2.0(API Level 5)引?。

例1:*

Manifest 包含,?个用户在不具备光线传感器的设备上搜索应用。* 结果:* Google Play 不会向该用户显示这个应用例2:*

Manifest 没有包含元素。* 结果:* Google Play 会向所有用户显示这个应用,除非不满足其他的过滤器。

完整信息请访问

基于隐含的功能的过滤器:在某些情况下,Google Play 将 元素请求的权限解释并折合为中声明的设备特征。见下文的 。|- style="vertical-align:top;" | style=" border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px;" || style=" border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px;" | OpenGL-ES Version (openGlEsVersion)

OpenGL-ES 版本

| style"int">属性,要求设备支持?个特定的OpenGL-ES 版本。

例1:*

?个应用通过在manifest 中多次设置openGlEsVersion 属性,来请求多个OpenGL-ES 版本。* 结果:* Google Play 将获取该应用所指定的最高版本。

例2:*

?个应用要求OpenGL-ES 版本号1.1,然后?个用户在OpenGL-ES 版本2.0的设备上搜索应用。* 结果:* Google Play 会向这个用户显示这个应用,除非不满足其他过滤器。如果?个设备报告他支持OpenGL-ES 版本X ,Google Play 会假定它同样支持早于X 的其他版本。

例3:*

?个用户在?个没有报告OpenGL-ES 版本的设备(例如Android 1.5或更早版本的设备)上搜索应用。* 结果:* Google Play 认为这个设备只支持OpenGL-ES 1.0。Google Play 只会向此用户显示没有指定openGlEsVersion 或者指定OpenGL-ES 版本1.0或更低的应用。

例4:*

Manifest 没有指定openGlEsVersion 。* 结果:* Google Play 会向所有用户显示这个应用,除非不满足其他的过滤器。访问获取更多信息。

|- style="vertical-align:top;" | style=" border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px;" || style=" border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px;" | Software Libraries

| style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px;" | 应用可以要求设备上具有指定的公共库。

例1:*

?个应用指定 com.google.android.maps 库,而?个用户使用没有com.google.android.maps 库的设备搜索应用。* 结果:* Google Play 不会向此用户显示该应用。

例2:*

Manifest 没有包含元素。* 结果:* Google Play 会向所有用户显示这个应用,除非不满足其他的过滤器。

访问获取更多细节。

4/3225ff31580216fc700afdb5

eoe 移动开发者社区

|- style="vertical-align:top;" | style=" border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px;" |

[3225ff31580216fc700afdb5/guide/topics/manifest/uses-permission-element]| style=" border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px;" |

| style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px;" | 严格说来,Google Play 并不基于元素进行过滤。但Google Play 确实读取了这个元素,用以确定是否有应用所用到的硬件功能,没有在里被正确的声明。例如,如果?个应用申请了CAMERA 权限,但是没有在声明android.hardware.camera ,Google Play 认为这个应用请求了?个摄像头,不应该显示给使用不支持摄像头设备的用户。

?般来说,如果?个应用请求了硬件相关的权限,Google Play 会认为这个应用隐式地请求了硬件特征,即使这些硬件特征的请求可能与的声明不相符。然后Google Play 会基于这个隐式声明的特征设置过滤。

访问元素以获得各个权限隐含的硬件特征列表。

|- style="vertical-align:top;" | style=" border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px;" || style=" border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px;" | Minimum Framework Version (minSdkVersion)

最?框架版本

| style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px;" | 应用可以要求?个最低API 版本。

例1:*

应用的Manifest 包含了,并且使用的API 是API Level 3。?个使用API Level 2设备的用户搜索应用。* 结果:* Google Play 不会将该应用显示给此用户。

例2:*

manifest 没有声明minSdkVersion ,并且引?的API 是API Level 3。?个用户使用API Level 2的设备搜索应用。* 结果:*Google Play 默认minSdkVersion 是"1",这个应用适合于Android 的所有版本。Google Play 会给这个用户显示这个应用,并允许用户下载此应用。然后这个应用在运行的时候崩溃了。

由于您想避免第?种情形,我们建议您始终声明?个minSdkVersion 。浏览android:minSdkVersion 以获得更多细节。|- style="vertical-align:top;" | style=" border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px;" || style=" border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px;" | Maximum Framework Version (maxSdkVersion)

最?框架版本

| style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px;" | _不建议。_Android2.1或更晚版本不检查或者不 enforce maxSdkVersion 属性,并且如果在应用的manifest 里设置了maxSdkVersion ,SDK 将不编译。对于已经编译了maxSdkVersion 的应用,Google Play 会尊重并将其作为过滤器使用。

不推荐声明maxSdkVersion 。浏览android:maxSdkVersion 以获得更多细节。

|}

高级manifest 过滤器

作为表1中manifest 元素的补充,Google Play 也会基于表2中?些高级的manifest 元素过滤应用。

这些manifest 元素和他们所触发的过滤器只适用于?些特定的使用情况。这些是为了那些在应用分配上需求绝对控制的高性能游戏或类似应用而设计的。* ?部分应用应该绝对用不上这些过滤器* 。

表2. 适用于Google Play 过滤器的高级manifest 元素

{|style="border-spacing: 0px;margin: 4px 4px; width: 90%; border-left:1px solid #ccc;border-top:1px solid #ccc; "

|-style="background:#DEE8F1; " ! style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px" |Manifest 元素 ! style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px" | 摘要

|- style=" vertical-align:top;" | style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " | |style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " | 如果设备屏幕尺?和密度(density )不符合元素里的任?屏幕设置(通过?个元素声明),Google Play 将会过滤该应用。

5/3225ff31580216fc700afdb5

eoe 移动开发者社区

* 注意:_'

通常情况下,'_您不需要使用这个manifest 元素* 。使用这个元素会通过排除所有您未列出的所有屏幕尺?和密度配置,使您的应用显著地减少潜在用户。您应该使用

[](3225ff31580216fc700afdb5/guide/topics/manifest/supports-screens-element)这个manifest 元素(见上述表

1),来为您未说明的,某些非主流的屏幕配置启用屏幕适配模式。

|- style="vertical-align:top;" | style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px;" | |style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px;" | 如果该应用支持的?个或者更多GL 纹理压缩格式同样被设备支持,Google Play 将不会过滤该应用。

|}

其他过滤器

Google Play 使用其他应用的特征去判断是否向?个使用所列出的设备的特定用户显示?个应用,如下表所述。表3. 作用于Google Play 过滤器的应用和发布特征。

{|style="border-spacing: 0px;margin: 4px 4px; width: 90%; border-left:1px solid #ccc;border-top:1px solid #ccc; "

|-style="background:#DEE8F1; " ! style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px" |过滤器名 ! style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px" | ?作方式

|- style=" vertical-align:top;" | style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " |Publishing Status

发布状态 | style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " | 只有被发布的应用才会允许在Google Play 中搜索和浏览到。

即使?个应用是未发布的,但如果用户可以在他们的,包括“已购买”、“已安装”或“最近卸载”在内的下载空间中看见它,他也可以安装这个应用。

如果?个应用被挂起,用户将不能重新安装或者升级它,即使它出现在用户的Downloads 中。

|- style="vertical-align:top;" | style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px;" |Priced Status

售价状态 | style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px;" | 并不是所有的用户都能看见付费应用。为了显示付费应用,这个设备必须要有?个SIM 卡,并且运行在Android 1.1或者更高的环境,同时必须在付费应用可用的国家(由SIM 卡运营商判断)内。

|- style="vertical-align:top;" | style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px;" |Country / Carrier Targeting

针对国家/运营商 | style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px;" | 当您上传你的应用到Google Play 时,您可以选择?个特定的国家作为目标。这个应用将只会对您所选择的国家(运营商)可见,方法如下:

如果运营商是可用的,那么设备所在的国家是基于运营商来判断的。如果没有运营商可以用来判断,Google Play 会试图基于IP 判断国家。

运营商是基于设备的SIM 卡决定的(对于GSM 设备来讲),而不是当前漫游的运营商。

|- style="vertical-align:top;" | style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px;" |Native Platform

本地平台 | style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px;" | ?个包括本地指向特定平台(例如ARM EABI v7 或者 x86)库的应用,是仅在支持该平台的设备上可见的。浏览What is the Android NDK 来获取NDK 相关以及使用本地库的更多细节。

|- style="vertical-align:top;" | style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px;" |Copy-Protected Applications

有防拷保护的应用

| style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px;" |当您设置发布选项时,通过设置3225ff31580216fc700afdb5

eoe 移动开发者社区

拷贝保护为“On”

,为您的应用设定防拷保护。Google Play 将不会向开发者的设备或者未发布的设备显示有拷贝保护的应用。

|}

发布具有不同过滤器的多个APK

?些特定的Google Play 过滤器允许您,为了向不同配置的设备提供不同的APK ,而对同?应用发布不同的APK 。例如,如果你正在创建?个使用高品质图形assets 的视频游戏,你或许想创建两个APK 来支持不同的纹理压缩格式。这样你就可以通过只包含该设备设置所需求的纹理,而减少APK 文件的??。Google Play 会根据每个设备对您的纹理压缩格式的支持,提供您声明支持的该设备的APK 。

目前,只有当每个APK 提供不同的基于如下设置的过滤器时,Google Play 才会允许您为同?个应用发布多个APK 。OpenGL texture compression formats OpenGL 纹理压缩格式

通过使用 元素。

Screen size (and, optionally, screen density) 屏幕尺?(以及屏幕密度(可选))

通过使用 或 元素

API level API 版本 通过使用元素。

所有其他的过滤器依然是正常?作的,但只有这三个过滤器能区别同?个应用中Google Play 列出的不同APK 。例如你不能只是基于设备是否具有摄像头,为?个应用发布多个APK 。

* 注意:_'为同?个应用发布多个APK 是作为?个高级功能而考虑,'_?多数应用应该只发布?个设备配置支持面很广的APK* 。发布多个APK 要求您遵循您的过滤器内的具体规则,并额外的注意每个APK 的版本代码,确保每个配置正确的更新路径。

如果您需要更多有关如何在Google Play 发布多个APK 的信息,请阅读Multiple APK Support 。

贡献者:

CuGBabyBeaR iceskysl

?eoe 移动开发者社区

本文链接: 3225ff31580216fc700afdb5/page/Filters_on_Google_Play 3225ff31580216fc700afdb5

eoe 移动开发者社区

eoe 移动开发者社区

3225ff31580216fc700afdb5

8/8

本文来源:https://www.bwwdw.com/article/6x8q.html

Top