framework / 安卓 / 游戏 · 2022年1月22日 0

Android Game Mode

游戏模式API和 游戏模式的干预让你通过优先特性,如性能或根据用户的设置或游戏的特定配置的电池寿命优化的游戏。

从Android 12开始,游戏模式 API 和干预措施可 在选定设备上使用。

使用游戏模式 API 进行优化

您可以使用Game Mode API来识别用户选择的当前游戏模式,然后根据他们的选择优化您的游戏以获得最佳性能或电池寿命。

了解如何设置、优化和发布您的游戏以支持标准、性能和电池模式。

游戏模式干预

游戏模式干预是原始设备制造商 (OEM) 设置的游戏特定优化,旨在提高开发人员不再更新的游戏的性能。

了解如何使用性能和电池模式为您的游戏设置、测试和提交干预措施。

游戏模式 API

当用户选择相应的游戏模式时,游戏模式 API 允许您优化游戏以获得最佳性能或最长的电池寿命。

或者,您可以提交 游戏模式干预请求,以提高开发人员不再更新的游戏的性能。

游戏模式 API 和干预可在部分 Android 12设备上使用。

设置

要在游戏中使用 Game Mode API,请执行以下操作:

  1. 下载并安装 Android 12 Preview SDK
  2. AndroidManifest.xml文件中,通过设置元素appCategory中的属性将 您的应用声明为游戏 :<application>
android:appCategory="game"
  1. 通过将其添加到您的主要活动来查询当前游戏模式:

爪哇科特林

// Only call this for Android 12 devices
if ( Build.VERSION.SDK_INT >= Build.VERSION_CODES.S ) {
  // Get GameManager from SystemService
  GameManager gameManager = Context.getSystemService(GameManager.class);

  // Returns the selected GameMode
  int gameMode = gameManager.getGameMode();
}
支持的游戏模式描述
不支持游戏未声明对游戏模式 API 的支持,也不支持游戏模式干预。
标准用户没有选择游戏模式或用户选择了标准模式。
表现提供最低的延迟帧速率,以换取电池寿命和保真度的降低。
电池提供尽可能长的电池寿命,以换取降低的保真度或帧速率。

重要提示:省电模式是特定于游戏的,不会影响系统级 Android 省电模式的行为。

  1. 在onResume函数中添加查询游戏模式状态的代码 :用户设置电池模式示例重要提示:在恢复暂停的进程时,您的应用程序必须始终查询 getGameMode() 方法。有关详细信息,请参见上图。

最佳实践

如果您的游戏已经支持多个保真度和帧速率目标,您应该确定性能和节电模式的适当设置:

  • 要始终如一地实现最大设备帧速率:考虑稍微降低保真度以实现更高的帧速率。
  • 要延长电池寿命:考虑选择较低的显示刷新率(例如 30Hz 或 60Hz)并使用帧步调来瞄准降低的刷新率。

对于第一人称射击游戏、多人在线战斗竞技场 (MOBA) 和角色扮演游戏 (RPG) 等高保真游戏,您应该专注于实现高一致的帧速率,以最大限度地提高用户沉浸感。

对于高保真游戏和休闲游戏,您应该支持省电模式,以通过降低峰值帧速率来延长游戏时间。

测试

通过 adb设置游戏模式状态来尝试新的游戏行为:

adb shell cmd game mode [standard|performance|battery] <PACKAGE_NAME>

出版

要启用游戏模式 UI,请将以下内容添加到 <application>AndroidManifest.xml 文件中的元素。

<application>
  <!-- default is false -->
  <meta-data
        android:name="com.android.app.gamemode.performance.enabled"
        android:value="true"/>

  <!-- default is false -->
  <meta-data
        android:name="com.android.app.gamemode.battery.enabled"
        android:value="true"/>
  ...
</application>

重要提示:游戏模式 UI 仅适用于部分 Android 12 设备,不适用于 Android 12 Beta 版本。

游戏模式干预

游戏模式干预是原始设备制造商 (OEM) 设置的游戏特定优化,旨在提高开发人员不再更新的游戏的性能。例如:

  • WindowManager 后备缓冲区调整大小。
  • 使用 ANGLE 而不是本机 GLES 驱动程序。

或者,如果可以更新游戏,您可以使用Game Mode API优化性能和电池 。

游戏模式 API 和干预可在部分 Android 12设备上使用。重要提示:每个游戏都可以实现游戏模式 API 行为,向 OEM 建议游戏模式干预设置,或明确选择退出游戏模式干预。警告:OEM 可以选择在没有开发人员反馈的情况下实施游戏模式干预。

WindowManager 后台缓冲区调整大小

窗口管理器,后备缓冲大小调整干预可降低设备的GPU的负载。当游戏以目标帧速率进行时,它还可以减少电池消耗。

启用调整大小后,最多可降低 30% 的 GPU 功率和 10% 的系统功率。结果可能会因使用的设备、环境条件和其他因素(例如同时处理)而异。

受 GPU 限制的无节奏游戏可能会在减少 GPU 负载期间体验更高的帧速率。但是,我们强烈建议所有游戏都保持 良好的节奏,因为不均匀的帧速率会显着影响用户对性能的看法。

评价

要自行评估 WindowManager 后缓冲调整大小干预,请使用以下adb命令。90% 的调整大小几乎可以忽略不计,而 50% 则意义重大。

adb shell cmd game downscale [0.5|0.6|0.7|0.8|0.9|disable] <PACKAGE_NAME>

警告:在 Android 12 中,子进程的大小可能无法正确调整。应特别注意查看 toast/弹出窗口的 UI。或者,我们建议您将调整大小设置限制为 70%。

设置模式

您应该验证对性能和电池模式的干预,如下所述。

支持的游戏模式描述
表现提供最低的延迟帧速率,以换取电池寿命和保真度的降低。
电池提供尽可能长的电池寿命,以换取降低的保真度或帧速率。

要验证每种模式的干预, 请在AndroidManifest.xml文件中的<application>元素 下启用这些模式。

  • 启用性能模式:<!-- default is false -->
    <meta-data
          android:name="com.android.app.gamemode.performance.enabled"
          android:value="true"/>
  • 启用电池模式:<!-- default is false -->
    <meta-data
          android:name="com.android.app.gamemode.battery.enabled"
          android:value="true"/>

测试你的游戏

分配不同的调整大小值以查看您的游戏如何受到 WindowManager 后备缓冲区调整大小干预的影响:

adb shell device_config put game_overlay <PACKAGE_NAME>
mode=2,downscaleFactor=0.7:mode=3,downscaleFactor=0.8

重要提示:在上面的示例中,mode=2是“性能”并且mode=3 是“省电模式”。该downscaleFactor值指定为适用于调整大小设置的百分比(0.7 为 70%,0.8 为 80%)。

向 OEM 提交干预措施

对于 Android 12,每次干预都必须由设备 OEM 设置。 对于 Pixel 设备,请提交您的请求并提供以下信息:

  1. 游戏包名。
  2. 设备和型号详细信息。
  3. 请求模式的干预值。

退出干预

或者,您可以通过选择退出来控制是否对您的游戏应用干预。每个干预都有自己的退出设置。

  1. 要禁用 WindowManager 后缓冲调整大小干预,请将以下内容添加到<application> AndroidManifest.xml 文件中的元素。<meta-data
          android:name="com.android.graphics.intervention.wm.allowDownscale"
          android:value="false"/>
  2. 重建并重新提交您的游戏以选择退出。