Google Play和基于功能的过滤(一)

Google Play会过滤出那些对用户可见的应用程序,因此用户只能看到和下载那些跟他们的设备兼容的应用程序。通过功能的兼容性是过滤应用程序的方法之一。

Google Play通过把以下两项内容进行比较,来判断应用程序跟给定用户设备是否兼容:

1. 应用程序需要的功能---指应用程序在它自己的清单的<uses-feature>元素中声明的功能;

2. 在设备上有效的硬/软件功能---值设备用只读的系统属性所报告的它所支持的功能。

为了确保功能的准确比较,Android包管理器提供了一个共享的功能常量集合,应用程序和设备都使用这些常量来声明各自所需要和支持的功能。可用的功能常量在本文下面的功能参考表中被列出。

当用户启动Google Play时,应用程序通过调用getSystemAvailableFeatures()方法,来查询包管理器中所列出的设备上可用的功能列表。然后在建立用户会话的时候,软件商店(The Store)应用程序会把这个功能列表上传给Google Play。

每次把应用程序上传给Google Play的发布网站时,Google Play都会扫描应用程序的清单文件。它会查找清单中的<uses-feature>元素,并且在某些情况下,会把它们跟其他元素组合在一起来评估,如<uses-sdk>和<uses-permission>元素。在建立了应用程序所需的功能集合之后,Google Play会把这个功能列表做为跟应用程序的.apk和版本相关联的内部元数据来保存。

当用户使用Google Play应用程序查询或浏览应用程序时,服务就会把每个应用程序所需的功能跟用户设备上可用的功能进行比较。如果应用程序所需要的功能在设备上都存在,那么Google Play就允许用户看到该应用程序,并程序潜在的可下载应用程序。如果应用所需的任何一个功能不被设备所支持,Google Play就过滤掉该应用程序,这样用户就看不到并且也不能够下载。

因为在<uses-feature>元素中声明的功能直接影响到Google Play如何过滤应用程序,因此理解Google Play是如何评估应用程序的清单和建立需求功能的集合是至关重要的,以下章节会详细说明。

基于明确声明功能的过滤

一个明确声明的功能就是应用程序在其清单中声明的一个<uses-feature>元素。功能声明能够包含一个android:required=[“true”|”false”]属性(如果在API Leve 5以上的版本上编译),这个属性指定了应用程序是否绝对的需要该功能,并且目标设备上不存在该功能时,该应用程序就不能正常的运行(true的场合),或指定应用程序在功能有效的时候就使用该功能,而在该功能无效的时候,应用程序也被设计成可以运行(false的场合)。

Google Play用以下方法来处理明确声明的功能:

1. 如果一个功能被明确声明为时必须的,则Google Play就会把应用程序需要的功能列表添加到一个列表中。然后把列表中的功能需求与用户设备提供的功能进行比较,从而把应用程序从没有提供该应用所需功能的设备中过滤掉。例如:

<uses-featureandroid:name="android.hardware.camera"android:required="true"/>

2. 如果一个功能被设计成非必须的功能,Google Play就不会把这样的功能添加到功能需求列表中。由于这个原因,明确声明的非必须功能,在Google Play过滤应用程序时就不会被考虑。即使设备不提供该声明的功能,Google Play依然会认为该应用程序与设备是兼容的,并允许显示给用户,除非使用了其他过滤规则。例如:

<uses-featureandroid:name="android.hardware.camera"android:required="false"/>

3. 如果一个功能被明确声明,但没有设置android:required属性,那么Google Play就会假定该功能是必须的,并且要针对该功能进行过滤。

通常,如果应用程序被设计成要运行在Android1.6或更早的版本上,那么在API中android:required属性是无效的,并且Google Play会假定应用程序所声明的所有的功能<uses-feature>都是必须的。

注意:通过声明一个包含android:required=”false”属性的功能,能够禁止Google Play针对该功能的所有过滤。

posted @ 2012-05-25 11:10  andriod2012  阅读(471)  评论(0编辑  收藏  举报