设备定位(Beta 版)

借助设备定位,您可以更精细地控制将 App Bundle 的哪些部分分发到特定设备。例如,您可以确保仅将大型资源分发给 RAM 较大的设备,也可以将资源的不同版本分发给不同的设备。

您可以定位设备属性,例如:

  • 设备型号
  • 设备 RAM
  • 系统功能
  • 系统芯片(适用于 API 级别至少为 31 的设备)

必要步骤概览

如需启用设备定位,必须执行以下步骤:

  1. 在设备定位配置文件中定义设备组。
  2. 指定软件包的哪些部分应分发到哪些设备组。
  3. 可选:在本地测试您的配置。
  4. 将您的 bundle(包含配置文件)上传到 Google Play。

Android Gradle 插件与 Play Unity 插件

具体所需步骤因您是使用 Android Gradle 插件还是 Play Unity 插件构建应用而异。在继续之前,请选择您的 build 设置:

检查 Android Gradle 插件版本

如需使用设备定位,请确保您的 Android Gradle 插件 (AGP) 版本至少为 8.10.0-alpha01。此模块随 Android Studio Meerkat 2 及更高版本打包提供。

在 Android Gradle 插件中启用设备定位

您必须在 gradle.properties 文件中明确启用设备定位:

android.experimental.enableDeviceTargetingConfigApi=true

创建设备定位配置 XML 文件

设备定位配置文件是一个 XML 文件,您可以在其中定义自定义设备组。例如,您可以定义一个名为 high_ram 的设备组,其中包含 RAM 至少为 8GB 的所有设备:

<config:device-targeting-config
    xmlns:config="http://schemas.android.com/apk/config">

    <config:device-group name="high_ram">
        <config:device-selector ram-min-bytes="8000000000"/>
    </config:device-group>

</config:device-targeting-config>

设备组最多由 5 个设备选择器组成。如果设备满足设备组的任一设备选择器,则会纳入该设备组。

设备选择器可以有一个或多个设备属性。如果设备与选择器的所有设备属性匹配,则会被选择。

可用的设备属性

  • device_ram:设备 RAM 要求
    • min_bytes(含):要求的最低 RAM(字节)
    • max_bytes(不含):最高 RAM 要求(字节)
  • included_device_ids:此选择器中要包含的设备型号(每组最多 10,000 个 device_ids)。如果设备与列表中的任何 device_id 匹配,则满足此属性。
    • build_brand:设备制造商
    • build_device:设备型号代码
  • excluded_device_ids:此选择器中要排除的设备型号(每组最多 10,000 个 device_ids)。如果设备与列表中的任何 device_id 都不匹配,则满足此属性。
    • build_brand:设备制造商
    • build_device:设备型号代码
  • required_system_features:设备想要包含在此选择器中所需要具备的功能。(每组最多 100 项功能)。设备需要具备此列表中的所有系统功能才能满足此属性。

    系统功能参考

    • name:系统功能
  • forbidden_system_features:设备想要包含在此选择器中就不能具备的功能(每组最多 100 项功能)。如果设备具备此列表中的任何系统功能,则不满足此属性。

    系统功能参考

    • name:系统功能
  • system-on-chip:要包含在此选择器中的系统芯片。设备需要具备此列表中的任何条状标签才能满足此属性。只能以API 级别至少为 31 的设备为目标平台来开发 SoC 系统。

在单个选择器中包含多个属性会创建一个逻辑“与”条件,例如:

  <config:device-selector ram-min-bytes="7000000000">
      <config:included-device-id brand="google" device="flame"/>
  </config:device-selector>

将创建如下条件:RAM 高于 7GB 并且是 Pixel 4 的所有设备。此条件也可写作如下方式:

如果您需要创建一个逻辑“或”条件,请在单个设备组中创建单独的选择器,例如:

  <config:device-selector ram-min-bytes="7000000000"/>
  <config:device-selector>
        <config:included-device-id brand="google" device="flame"/>
  </config:device-selector>

将创建如下条件:RAM 高于 7GB 或者是 Pixel 4 的所有设备。此条件也可写作如下方式:

以下示例展示了所有可能的设备属性:

<config:device-targeting-config
    xmlns:config="http://schemas.android.com/apk/config">

    <config:device-group name="myCustomGroup1">
      <config:device-selector ram-min-bytes="8000000000">
        <config:included-device-id brand="google" device="redfin"/>
        <config:included-device-id brand="google" device="sailfish"/>
        <config:included-device-id brand="good-brand"/>
        <config:excluded-device-id brand="google" device="caiman"/>
        <config:system-on-chip manufacturer="Sinclair" model="ZX80"/>
        <config:system-on-chip manufacturer="Commodore" model="C64"/>
      </config:device-selector>
      <config:device-selector ram-min-bytes="16000000000"/>
    </config:device-group>

    <config:device-group name="myCustomGroup2">
      <config:device-selector ram-min-bytes="4000000000" ram-max-bytes="8000000000">
        <config:required-system-feature name="android.hardware.bluetooth"/>
        <config:required-system-feature name="android.hardware.location"/>
        <config:forbidden-system-feature name="android.hardware.camera"/>
        <config:forbidden-system-feature name="mindcontrol.laser"/>
      </config:device-selector>
    </config:device-group>

</config:device-targeting-config>

官方设备制造商和设备型号代码

您可以通过以下任一种方式,使用 Google Play 管理中心的设备目录查找设备制造商和型号代码的正确格式:

  • 使用设备目录检查各个设备,在下例中所示的位置找到制造商和型号代码(以 Google Pixel 4a 为例,制造商为“Google”,型号代码为“sunfish”):

    设备目录中的 Pixel 4a 页面

    设备目录中的 Pixel 4a 页面

  • 下载受支持的设备的 CSV 文件,build_brand 和 build_device 字段分别表示制造商和型号代码。

在 app bundle 中添加设备定位配置文件

将以下内容添加到主要模块的 build.gradle 文件中:

android {
  ...
  bundle {
    deviceTargetingConfig = file('device_targeting_config.xml')
    deviceGroup {
      enableSplit = true   // split bundle by #group
      defaultGroup = "other"  // group used for standalone APKs
    }
  }
  ...
}

device_targeting_config.xml 是相对于主模块的配置文件路径。这样可确保您的配置文件与您的 app bundle 一起打包。

deviceGroup 子句可确保系统按设备组拆分从 bundle 生成的 APK。

Play Feature Delivery 设备定位

如需将设备定位与 Play Feature Delivery 搭配使用,请参阅条件分发文档

Play Asset Delivery 的设备定位

如需将设备定位与 Play Asset Delivery 搭配使用,请参阅资源包文档

报告错误

如有任何 bug,请在公开的问题跟踪器上报告。