Google商店中下载安兔兔评测,后下载3D资源插件,提示“您的设备与此版本不兼容”

文章目录

          • 背景描述
          • 解决过程
          • 总结
            • uses-feature
            • uses-library
            • uses-permission

背景描述

该问题起因是,在Google Play Store商店下载了安兔兔评测应用,在进行3D测试时,提示需要下载安兔兔3D评测应用,点击跳转到谷歌商店,商店提示“您的设备与此版本不兼容”
Google商店中下载安兔兔评测,后下载3D资源插件,提示“您的设备与此版本不兼容”_第1张图片

解决过程
  1. 在终端使用aapt dump badging antutu_3D.apk >antutu_3D.txt命令抓取应用依赖:
    在这里插入图片描述注意关键字"uses-gl-es: ‘0x30001’ ",该信息说明该应用依赖于OpenGL ES 3.0

  2. 同样连接上设备,在终端使用adb shell pm list features查看设备feature支持情况:
    在这里插入图片描述
    注意关键字"feature:reqGlEsVersion=0x20000",该信息说明设备目前的OpenGL ES版本为2.0

走到这里,问题的根因已浮出水面:
造成此问题的原因为Google Play在下载应用时会检测设备的feature的匹配情况。应用所支持的OpenGL ES版本高于设备所支持的OpenGL ES版本,兼容性导致的问题

总结

Google Play Store会根据应用的uses-feature、uses-library、uses-permission等进行匹配,以查看设备是否支持下载apk。

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则没有影响

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则没有影响

uses-permission

Google商店中下载安兔兔评测,后下载3D资源插件,提示“您的设备与此版本不兼容”_第2张图片部分机器可能不支持应用所需要的权限,如不能拨打电话的机器,但是给了CALL_PHONE权限,然后在google play store中下载,就会提示不兼容。玄机就在这最后的表格里面,你需要做的就是如果你的uses-permission中用到了任何的一个表格中 This Permission…中的权限就要相应的加入uses-feature标签,并且指定name就是 Implies This Feature Requirement 中的相应值,并加入android:required=”false”。这句话的意思就是没有这个权限也可以。

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

你可能感兴趣的:(Google商店中下载安兔兔评测,后下载3D资源插件,提示“您的设备与此版本不兼容”)