一、 问题概述

Google Play提示“您的设备与此版别不兼容”,无法装置运用。

Google Play 提示

遇到问题的设备为Xiaomi Mi A3,查了下这台手机的基本信息,Android One体系,版别分为9.0、10.0、11.0。

二、 问题分析

Google Play的过滤器 一般有以下5种情况

  1. 设备兼容性:依据设备的硬件和操作体系版别,过滤出与设备兼容的运用程序。
  2. 国家/区域约束:某些运用程序或许在特定国家或区域受限,过滤器可依据用户所在地扫除或仅显现特定区域的运用程序。
  3. 年纪约束:过滤器依据运用程序的年纪评级(如PEGI、ESRB等)来约束显现合适特定年纪段的运用程序。
  4. 定价状况:付费运用,有必要坐落可运用付费运用的国家/区域。如果设备有 SIM 卡,SIM 卡运营商会确定付费运用是否可用。如果设备没有 SIM 卡,请运用设备的 IP 地址确定设备是否坐落可运用付费运用的国家/区域。
  5. CPU 架构 (ABI):如果运用包括针对特定 CPU 架构(例如 ARM EABI v7 或 x86)的原生库,它只在支撑该架构的设备上可见。

大多数过滤器都由运用清单文件 AndroidManifest.xml 内的元素触发。当设备直接经过运用地址“play.google.com/store/apps/… 访问后运用,得到Google Play给出的提示为”您的设备与此版别不兼容“,那么大概率是因为AndroidManifest.xml导致。

清单元素 过滤器名称 过滤器名称
<supports-screens> 屏幕尺度 minSdkVersiontargetSdkVersion设为 4 或更大值时,一切特点的默认值均为"true"。这样,运用将被视为默认支撑一切屏幕尺度。
<uses-configuration> 设备装备:键盘、导航、触摸屏 运用能够恳求某些硬件功用,Google Play 将只在具备所需硬件的设备上显现该运用。
<uses-feature> 设备功用 运用能够要求设备具有某些功用。Android 2.0(API 等级 5)中引入了此功用。android:required默认值均为"true"
<uses-library> 软件库 运用能够要求设备上具有特定的共享库。例如com.google.android.maps
<uses-permission> 用户权限 如果运用恳求硬件相关权限,Google Play 会假定该运用需求对应的硬件功用,即使或许没有相应的 声明也是如此。然后,Google Play 会依据 声明暗含的功用要求进行过滤。
<uses-sdk> SDK版别 运用能够要求的 API 等级规模。

项目中会有多个AndroidManifest.xml文件,且有些是在依靠库中,不易排查。能够直接检查Apk的AndroidManifest.xml文件,这里有多种方法获取,你能够反编译拿到或许经过aapt(AndroidAssetPackagingTool)指令,aapt东西在sdk目录中,版别可自行挑选。

Google Play 提示

经过指令 aapt dump badging xxx.apk 获取到apk包的详细信息,有时候因为apk包本身的问题,或许呈现 “ERROR: dump failed because no AndroidManifest.xml found”,那么需求换一个apk包。

Google Play 提示

三、 问题解决

拿到apk的详细信息后,即可逐个feature排查。虽然能够经过 “adb shell dumpsys” 指令拿到手机所支撑的Libraries和Features信息,可是因为Android的手机样式多,想要拿到一些冷门型号的真机难度较大,且用户合作此类操作也较难,所以最好还是结合apk包获取的信息在AndroidManifest.xml中增加相应的装备代码。例如

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

当然,如果你是运用的开发者,Google Play Console的提供了 Device catalog 功用,超越22574台经过Google Play兼容性测验的Android设备,方便快捷的获得运用所支撑和不支撑的设备列表以及运用不支撑该设备的原因,协助开发者决议计划。