`

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

 
阅读更多

基于暗示功能的过滤

一个暗示的功能是为了让应用程序正确运行所需的功能,但是,这个功能不在清单的<uses-feature>元素中声明。严格的说,应用程序应用始终声明它所使用和需要的所有功能,因此对于应用程序使用的,但却没有声明的功能,应该被认为是一个错误。但是,出于对用户和开发者的保护,Google Play会查看每个应用程序的暗示功能,并基于这些功能来过滤应用程序,就像是明确声明的功能所做的处理一样。

应用程序可能需要一个功能,但却不声明,这是因为:

1.应用程序是针对较旧的Android类库版本(Android1.5或更早)来编译的,并且<uses-feature>元素是无效的;

2.开发者错误的假设所需要的功能在所有的设备上都存在,而没有必要声明;

3.开发者不小心忽略的该功能的声明;

4.开发者明确的声明了该功能,但该声明是无效的。例如:<uses-feature>元素名的一个拼写错误或给android:name属性设定一个无法识别的字符串,这些都会导致功能声明无效。

基于以上原因的考虑,Google Play会尝试通过检查清单文件中其他元素的声明(特别是<uses-permission>元素)来发现被应用暗示的功能需求。

如果一个应用程序申请了硬件相关的权限,那么Google Play就会假定应用程序要使用底层的硬件功能,并因此而需要那些功能,即使可能没有响应的<uses-feature>声明。针对这样的权限申请,Google Play也会把底层的硬件功能添加到它所保持的对应的应用程序的元数据中,并基于这些信息来过滤要显示给用户应用程序。

例如,如果应用程序申请了CAMERA权限,但却没有声明一个对应android.hardware.camera功能的<uses-feature>元素,那么Google Play就会认为应用程序需要照相机功能,并且该应用程序不应该显示给没有提供照相机功能的那些用户设备。

如果不想要Google Play基于某个特殊的暗示功能来过滤应用程序,就要禁止这种行为。通过在其清单文件中明确的声明<uses-feature>元素,并包含一个android:required=”false”属性,可以达到禁止Google Play过滤应用程序的目的。例如:要禁止由CAMERA权限所派生出来的过滤,就要向下面这样在应用的清单中声明一个<uses-feature>元素:

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

理解用<uses-permision>元素声明的权限能够直接影响Google Play对应用程序的过滤是至关重要的。在下面的“暗示功能需求的权限”章节中,列出了所有的暗示功能需求的权限集,并因此而引发的过滤处理。

对于蓝牙功能的特殊处理

Google Play针对蓝牙功能来判断过滤时,它会使用比以上描述稍微不同的规则。

如果应用程序在其清单的一个<uses-permission>元素中声明了一个蓝牙权限,但没有明确的在<uses-feature>元素中声明蓝牙功能,那么Google Play会检查应用程序被设计成要运行在哪个Android平台的版本上,这个版本在<uses-sdk>元素中被指定。

如下表所示,Google Play只会在应用程序把Android2.0API Leve 5)或更高的版本作为最低版本或目标平台时,才会启用针对蓝牙功能的过滤。但是,要注意的是,当应用程序在<uses-feature>元素中明确声明了蓝牙功能时,Google Play会使用普通的规则来进行过滤处理。

1Google Play如何判断申请了蓝牙权限但却没有在<uses-feature>元素中声明蓝牙功能的应用程序的蓝牙功能需求:

minSdkVersion

targetSdkVersion

结果

<=4(或者没有声明)

<=4

对于任何报告其支持android.hardware.bluetooth功能的设备,Google Play不会把应用程序过滤掉。

<=4

>=5

对于任何不支持android.hardware.bluetooth功能的设备,Google Play都会把该应用程序过滤掉。

>=5

>=5

以下的例子,基于Google Play处理蓝牙功能的方式,演示了不同的过滤效果。

第一个例子,声明了蓝牙权限的应用程序被设计成要运行在比较旧的API Level上,但是它没有在其<uses-feature>元素中声明蓝牙功能。

结果:Google Play不会把应用程序从任何设备上过滤掉。

<manifest ...>
<uses-permissionandroid:name="android.permission.BLUETOOTH_ADMIN"/>
<uses-sdkandroid:minSdkVersion="3"/>
...
</manifest>

第二个例子,相同的应用程序,还声明了一个目标API Level5的属性。

结果:Google Play会假设应用程序需要蓝牙功能,并把应用程序从那些没有报告支持蓝牙功能的设备上过滤掉,包括那些运行较旧平台版本的的设备。

<manifest ...>
<uses-permissionandroid:name="android.permission.BLUETOOTH_ADMIN"/>
<uses-sdkandroid:minSdkVersion="3"android:targetSdkVersion="5"/>
...
</manifest>

第三个例子,相同的应用程序,但声明的蓝牙功能需求。

结果:与第二个例子相同。

<manifest ...>
<uses-featureandroid:name="android.hardware.bluetooth"/>
<uses-permissionandroid:name="android.permission.BLUETOOTH_ADMIN"/>
<uses-sdkandroid:minSdkVersion="3"android:targetSdkVersion="5"/>
...
</manifest>

最后一个例子。相同的应用程序,但<use-feature>元素中添加了android:required=”false”属性。

结果:Google Play会针对所有设备禁止使用基于蓝牙功能支持的过滤。

<manifest ...>
<uses-featureandroid:name="android.hardware.bluetooth"android:required="false"/>
<uses-permissionandroid:name="android.permission.BLUETOOTH_ADMIN"/>
<uses-sdkandroid:minSdkVersion="3"android:targetSdkVersion="5"/>
...
</manifest>

测试应用程序所需要的功能

可以使用包含在Android SDK中的aapt工具,来判断Google Play会怎样过滤自己的应用程序(基于应用声明的功能和权限)。用dump badging命令来运行aapt工具,执行该项测试工作。aapt工具会解析应用程序的清单文件,并且使用与Googl Play相同的规则,来判断应用程序所申请的功能。

以下是使用这个工具的步骤:

1.首先,把应用程序作为一个未签名的.apk来编译并导出。如果使用带有ADTEclipse来开发应用程序,那么右击功能名,并选择Android Toos->Export Unsigned Application Package。选择目标文件名和路径,点击OK按钮。

2.接下来,定位aapt工具,如果在环境变量PATH中没有设置它的路径,而且使用的是SDK Tools r8或更高的版本,那么可以在<SDK>/platform-tools/目录中找到该工具。

注意:所使用的aapt工具版本必须是提供给最新的可用的平台工具组件。如果没有,可以使用Android SDK Manager来下载。

3.使用以下语法来运行aapt

$ aapt dump badging <path_to_exported_.apk>

以下是该命令的针对上面第二个例子的输出结果:

$ ./aapt dump badging BTExample.apk
package: name='com.example.android.btexample' versionCode='' versionName=''

uses
-permission:'android.permission.BLUETOOTH_ADMIN'
uses
-feature:'android.hardware.bluetooth'
sdkVersion
:'3'
targetSdkVersion
:'5'
application
: label='BT Example' icon='res/drawable/app_bt_ex.png'
launchable activity name
='com.example.android.btexample.MyActivity'label='' icon=''
uses
-feature:'android.hardware.touchscreen'
main
supports
-screens:'small''normal''large'
locales
:'--_--'
densities
:'160'

分享到:
评论

相关推荐

    安卓SlidingMenu各种菜单侧滑菜单相关-FilterDropDownMenu过滤功能的下拉菜单.rar

    SlidingMenu是一个开源库,允许开发者在Android应用中实现类似Google Play商店那样从左侧或右侧滑动显示的菜单。它提供了一种简单的方式来添加这种交互式侧滑效果,通常与ActionBar或ToolBar结合使用,以实现更丰富...

    基于功能与权限关系的Android应用风险评估.pdf

    利用Latent Dirichlet Allocation(LDA,潜在狄利克雷分配)和协同过滤技术,构建两阶段偏度基础的过滤策略,建立App功能与权限的映射模型,并推荐合理的权限配置。此外,通过对比恶意App与流行App之间的差异,设计...

    05-google-play

    05-google-play 此仓库用于Metis项目5背景待填充客观的分析约22,000个应用的样本的Google Play应用商店数据,以预测每个应用的用户评分使用基于内容的过滤开发应用推荐引擎方法从Google Play商店收集的半结构化和非...

    基于android的诗词鉴赏APP.zip

    5. **上线与维护**:发布应用至Google Play或其他安卓市场,持续收集用户反馈,进行版本迭代和功能优化。 四、未来发展方向 随着AI技术的发展,未来此APP可以考虑引入语音识别,让用户通过语音搜索诗词,或者加入...

    基于Android安卓毕业设计,基于用户肖像的电商系统.zip

    通过查看源码,学生可以深入理解每个组件的功能和实现方式,而项目说明文档则会提供更详细的步骤和指导,帮助初学者快速上手并完成毕业设计。在Window10/11环境下测试正常,说明项目具有较好的兼容性和稳定性,是...

    基于Android的大学生兼职系统设计与实现.pdf

    通过Google Play Console提供的分析工具,开发者可以监控应用的性能和用户反馈,持续优化和改进系统。 综上所述,“基于Android的大学生兼职系统设计与实现”是一个涵盖广泛技术领域的项目,涉及Android客户端开发...

    基于Android的美食推荐设计与实现+毕业论文

    8. **发布与更新**:最后,论文可能涉及将应用发布到Google Play Store的流程,以及如何进行版本管理和应用更新。 通过以上知识点的综合运用,这篇毕业论文展示了如何构建一个完整的、功能丰富的Android美食推荐...

    基于PHP的手机APP软件推广网站.zip

    8. **API接口**:为了获取或同步APP商店的数据,如Google Play或App Store的信息,网站可能需要实现API接口调用,通常采用JSON格式进行数据交换。 9. **数据分析与报告**:网站应提供分析工具,展示下载量、用户...

    基于android的通讯录软件

    13. **发布与分发**:完成开发后,应用需要打包成APK并通过Google Play Store或其他第三方应用市场分发给用户。 综上所述,"基于android的通讯录软件"涵盖了Android开发的多个核心领域,包括但不限于UI设计、数据库...

    python+毕业设计《基于Android的新闻推荐客户端设计与实现》+源码+课程作业.zip

    5. **部署与维护**:将应用发布到Google Play或其他分发渠道,监控应用性能,修复可能出现的问题。 这个项目对于学习Android应用开发、Python后端开发、推荐系统原理和实践具有很高的价值。通过实际操作,可以提升...

    行业文档-设计装置-一种基于APP平台和数据挖掘的分析推荐方法.zip

    它可以是iOS的App Store或Android的Google Play,也可以是企业内部使用的私有平台。开发者通常使用特定的编程语言(如Swift、Java或React Native)和工具来构建针对这些平台的应用。 接着,我们深入到数据挖掘这一...

    本科毕业设计《基于Android的新闻推荐客户端设计与实现》App实现部分.zip

    9. **发布准备**:在项目完成后,需要对应用进行打包(APK文件),并遵循Google Play Store的上传指南,进行签名、版本管理和发布。 10. **持续集成/持续部署(CI/CD)**:对于大型项目,可以学习使用Jenkins或GitHub...

    TransitApp:AngularJS中的一项练习,用于在Google Play商店中复制Transit App

    目标是模仿或复制在Google Play商店中已存在的"Transit App"的功能和用户体验。这表明我们将在AngularJS这个前端JavaScript框架中探讨如何构建一个与交通相关的移动应用。 **描述详解:** 描述进一步确认了这个...

    SearchBarDemo:这是一个Android项目演示,它实现了Google Gmail和Play的搜索用户界面

    `SearchBarDemo`是一个Android项目实例,旨在展示如何实现类似Google Gmail和Play Store的搜索用户界面。这个项目采用Java编程语言,通过模仿这两款应用的搜索交互效果,为开发者提供了一个直观的学习参考。 首先,...

    XT300的GMS包

    Gmail作为Google的核心邮件服务,允许用户方便地管理个人和工作邮件,支持多账户同步,具有智能分类功能,如“社交”、“推广”和“重要”等,还有强大的搜索功能以及垃圾邮件过滤机制。 此GMS更新包的文件名是"XT...

    Play2Api-Angularjs:Play2Api + Angularjs

    Play2Api 是一个基于Java和Scala的开源Web应用框架,它为开发高性能、反应式的Web应用程序提供了便利。Play框架以其模型-视图-控制器(MVC)架构而闻名,支持异步I/O,使得应用程序能够快速响应用户请求,提高了整体...

    Android项目源码基于传感器的温度计开发.rar

    这可能涉及到数据转换(如将微摄氏度转换为摄氏度)、数据过滤(如滑动平均滤波)和异常处理(如检查传感器读数是否有效)等步骤。 4. **UI设计**: 温度计的用户界面需要清晰地显示当前温度,可能还包括最高/最低...

    谷歌Android手持设备应用程式设计基础论述.doc

    完成开发后,应用可以通过Google Play或其他分发渠道提供给用户下载。 总的来说,Android手持设备应用程式设计涉及多个组件和概念,包括Activity、Intent、注册机制以及开发工具的使用。理解这些基础,开发者可以...

Global site tag (gtag.js) - Google Analytics