GooglePlay根据过滤机制通过检查设备硬件和软件配置决定是否将应用程序显示给用户。如果一个应用程序兼容于当前设备的过滤机制,那么GooglePlay将显示该应用程序给用户,否则将用户将搜索不到该应用程序。

    可以为应用程序配任意组合的过滤器。例如,在应用程序的AndroidManifest.xml文件中设置minSdkVers=“4”、smallScreen=“false”,然后上传应用程序到GooglePlay并限制地区只能在欧洲,GooglePlay的过滤机制将根据以上三个属性限制应用程序对用户是否可见。

    一些不需要过CTS认证的平台为了可以兼容更多的应用,会尽量加一些系统特性,增加的方法如下:


看apk的特性命令:

aapt dump badging E:\ACR\GooglePlay\LINE_2.4.0.apk
 
application: label='LINE' icon='res/drawable-mdpi/icon.png'
uses-library:'com.google.android.maps'
launchable-activity: name='jp.naver.line.android.activity.SplashActivity'  label='LI
uses-permission:'android.permission.CAMERA'
uses-feature:'android.hardware.location'
uses-feature:'android.hardware.location.gps'
uses-feature:'android.hardware.location.network
uses-feature:'android.hardware.bluetooth'
uses-feature:'android.hardware.touchscreen'
uses-feature:'android.hardware.screen.landscape
uses-feature:'android.hardware.screen.portrait'
supports-screens: 'small' 'normal' 'large'
supports-any-density: 'true'
locales: '--_--' 'ja' 'ko' 'zh_CN' 'zh_TW' 'de' 'th' 'vi' 'in' 'ar' 'fr' 'tr' 'ms' 'en_GB' 'en_SG'
densities: '120' '160' '240' '320'
native-code: 'armeabi' 'armeabi-v7a'

 

分析上面的特性(上面显示有些不全,只选择了部分有用的)决定过滤的有:

 

1 uses-library

 

library大部分应用就可以显示了:

com.android.location.provider
com.google.android.maps

但有些特殊情况就要加了。

 

如何看自己支持哪些库?

uses-feature一样的,用adb shell 进入/etc/permissions

使用命令ls一下就可以显示了,如果比较多的话配合grep使用就很容易可以找到。

 

如果要加library,怎么加?

举一个例子com.google.android.maps.xml里面的内容如下:

<permissions>
    <library name="com.google.android.maps"
            file="/system/framework/com.google.android.maps.jar" />
    </permissions>

看到里面的内容就知道,只要拷贝两个文件:

拷贝文件com.google.android.maps.xml到/etc/permission

拷贝文件 /system/framework/com.google.android.maps.jar 到 /system/framework

 

这两个文件如何获得,呵呵,自己想办法。   百度、Google吧,或者在自己的源代码里面搜。

 

  

2  uses-feature

这个不用我说了,上面已经说的很清楚了,不过有个APK(QuickSystemInfoPRO168.apk)可以看你系统有哪些uses-feature,还可以看build.prop的一些相关信息。

 

3 supports-screens

支持的屏幕,大、中、小,大部分的应用都可以支持。

 

4 locales

地区限制,这个上面也有提到。

5 densities

这个很重要,一般是: 120、160、240,如果不是这三个的里面话估计很多应用都显示不了。曾经我把density改成140,结果悲剧就这样发生了。。。

6 sdkVersion:'7'

最小sdk版本,只要你的sdk版本大于等于它就可以了

 

7 targetadkversion

最大adk版本,只要你的sdk版本小于等于它就可以了

 

可以参考GOOGLE官网解释

http://developer.android.com/guide/appendix/market-filters.html 





特别提醒: 如果要过CTS测试的话不要随便加features,否则影响CTS的测试结果。