google play store下载提示不兼容问题(This app is compatible with some of your devices)

曾经遇到过,在google play store搜索应用,搜索不到应用或者提示不兼容。下面针对这两种情况给出我自己的解释。

一、搜索不到应用

原因解释:因google账号及ip所在地区无相关应用,故搜索不到。比如之前搜索一个应用,用中国的VPN搜索不到,使用美国的VPN可以搜索。

二、下载提示This app is compatible with some of your devices(Your device is not compatible with this version)

    按照经验,google play store 会根据应用的uses-feature、uses-library、uses-permission等进行匹配,以查看设备是否支持下载apk。

1、uses-feature

uses-feature配置用来声明一个app在运行时所依赖的外部的硬件或软件特征(feature),有三个属性:

android:name 
可以通过adb shell pm list features来查看系统所有支持的的uses-feature。其中硬件特征的名字以android.hardware.为前缀,软件特征的名字以android.software.为前缀。

android:required 
android:required属性表示这项feature是否是必须的,它的值只能是true或者false。
如果设置为true表示这项feature是必须的,如果没有,应用将无法工作。
如果设置为false,表示应用需要这项feature,但如果没有,可能会影响部分功能,但应用还是能够正常工作的。
如果没有指定这项属性,则默认为true,即表示此feature是必须的。

android:glEsVersion 
此项属性表示app所依赖的OpenGL ES的版本,它的值是一个整数,高16位表示OpenGL ES的大版本,低16位表示OpenGL ES的小版本。例如 OpenGL ES 3.2版本对应的整数值为0x00030002。
通常在AndroidManifest中应该只有一个android:glEsVersion配置,如果配置了多个,则只有版本号最大的那一个会生效,其他配置会被忽略。如果在AndroidManifest中没有配置android:glEsVersion,则表示可以支持到OpenGL ES 1.0,也就是所有的Android系统都支持。

结论:若uses-feature中android:required属性是true,但系统中不支持该uses-feature,则下载会显示不兼容;为false则没有影响。

2、uses-library

这个元素用于指定该应用程序必须使用的共享类库。这个元素告诉系统该应用程序包的类装载器中所包含的类库代码。

属性:
android:name
这个属性用于指定类库的名称。这个名称是在对应的类库文档中提供的。可以通过adb shell pm list libraries来打印当前设备所支持的所有库存

android:required
android:required属性表示这项library是否是必须的,它的值只能是true或者false。
如果设置为true表示这项library是必须的,如果没有,系统不允许该应用程序安装在这个设备上。
如果设置为false,表示应用需要这项feature,但如果没有,可能会影响部分功能,但应用还是能够正常工作的。
如果没有指定这项属性,则默认为true,即表示系统不允许该应用程序安装在这个设备上。

结论:若uses-library中android:required属性是true,但系统中不支持该uses-library,则下载会显示不兼容或者不能安装到系统中;为false则没有影响。

3、uses-permission

google play store下载提示不兼容问题(This app is compatible with some of your devices)_第1张图片

部分机器可能不支持应用所需要的权限,如不能拨打电话的机器,但是给了CALL_PHONE权限,然后在google play store中下载,就会提示不兼容。玄机就在这最后的表格里面,你需要做的就是如果你的uses-permission中用到了任何的一个表格中 This Permission…中的权限就要相应的加入uses-feature标签,并且指定name就是 Implies This Feature Requirement 中的相应值,并加入android:required=”false”。这句话的意思就是没有这个权限也可以。

结论:若uses-permission中有需要系统不支持的权限,则下载会显示不兼容

题外:
关于google play store下载应用出现download pending
解释:google play store一次只能有一个下载任务,在下载任务期间,再去下载另一个应用,只会显示download pending,属于正常现象。

你可能感兴趣的:(Android系统)