0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Android 游戏性能调优的一些技巧

谷歌开发者 来源:谷歌开发者 作者:谷歌开发者 2022-09-08 11:16 次阅读

Android 游戏开发工具大升级中,我们介绍了 Android 游戏开发套件的丰富功能和多项 API 改进,并针对大屏幕设备的游戏开发提供了一些建议,同时介绍了处理、分发大型游戏素材的最佳实践。本文我们将提供几则在游戏性能优化方面的技巧,同时向您介绍 Android 在游戏方面引入的新特性。让我们一起打造卓越的 Android 游戏体验吧!

如果您更喜欢通过视频了解此内容,请在此处查看:

△Android 游戏开发工具大升级

Bilibili 视频链接
https://www.bilibili.com/video/BV1B34y1Y7SR/

游戏性能调优

在上一篇文章中,我们了解了如何通过合理的 DPI 选择、纹理优化等方式让游戏在更多的硬件上运行。然而仅仅能运行还不够,或许您也非常希望能了解这些选择和配置是否为玩家提供了足够优秀的用户体验,以及接下来有哪些方法能帮助您不断优化应用,并逐渐将应用推广至更大的用户群中。

配置 APT 库

Android 性能调优工具 (Android Performance Tuner,APT) 是专门用于开发者了解游戏性能数据的工具。它可以在 Android Vitals 中帮助您洞察游戏性能表现,使您能够在整个 Android 设备生态中衡量和优化自己的游戏保真度、加载时间、帧率。并且所有的数据都是来自真实的设备和真实的玩家,具有极高的参考价值。

void InitAPI(JNIEnv* env, jobject activity) {    SwappyGL_init(env, activity);     swappy_enabled = SwappyGL_isEnabled();    TFSettings settings {};    if (swappy_enabled) {        settings.swappy_tracer_fn = &SwappyGL_injectTracer;    }    // ...}

△ 使用 Swappy_injectTracer 自动记录帧信息

要使用 APT 库,您需要在每一帧中调用一个 tick 函数。不过如果您已经使用了 Android FramePacing 库,则通过 FramePacing API 初始化时传入 Swappy_injectTracer 函数就可以自动记录帧时间了。

如果您用到了 Unity 游戏引擎,则可以导入我们的自定义软件包 (插件),然后从 Window --> Android Performance Tuner --> Setup 菜单进入设置界面来启用和配置它。此外您还可以使用设置脚本来初始化 APT 工具。如果您希望了解关于 Unity 游戏引擎的更多信息和使用帮助,请参阅 Unity Codelab 将 Android 性能调优工具整合进您的 Unity 游戏:

https://developer.android.google.cn/codelabs/android-performance-tuner-unity#0 d72061ee-2e90-11ed-ba43-dac502259ad0.png △ Android 性能调优工具与 Unity 结合使用 下一步是定义注解参数,并将它们与游戏中的质量级别、场景或其他值得关注的信息关联起来。随后,您需要在适当的上下文调用 APT 的 API。 d74865ea-2e90-11ed-ba43-dac502259ad0.png △ Unity 的 APT 插件中设置注解参数

如果您使用了 Unity 的 Android 性能调优工具插件,那么可以在配置面板的注解参数中看到几个默认的注解:

场景 (Scene) 注解映射到当前处于前台的游戏场景;

加载状态 (LoadingState);

当然,您也可以在上图的界面里添加更多自定义注解参数。如果您集成了 C/C++ 的引擎,那么需要您用 Protocol Buffers 来定义这些注解:

import "tuningfork.proto"enum LoadingState {  INVALID_LS = 0; LOADING = 1; NOT_LOADING = 2;}enum Level {  INVALID_LEVEL = 0; Level_1 = 1; Level_2 = 2; Level_3 = 3;}message Annotation {  optional LoadingState loading_state = 1;  optional Level level = 2;}

△定义注解参数

您还可以在 Codelab: 使用 Proto DataStore 中了解到更多关于使用 Protocol Buffers 的内容: https://developer.android.google.cn/codelabs/android-proto-datastore#0

extern "C"void SetAnnotations() {  Annotation a;  a.set_loading(     sLoading ? proto_tf::LOADING : proto_tf::NOT_LOADING  );  a.set_level((proto_tf::Level) sLevel)  auto ser = tf::TuningFork_CProtobufSerialization_Alloc(a);  TuningFork_setCurrentAnnotation(&ser);  TuningFork_CProtobufSerialization_free(&ser);}

△设置注解参数的值

随后,您需要调用 APT 的 API 告知上下文发生了变化,参见上面的代码。

完成 APT 库的集成和注解参数配置后,您需要在 Google Cloud Console 中启用 Android Performance Parameters API,这样才能开始收集玩家数据。参照下图找到该 API 并启用:

d757839a-2e90-11ed-ba43-dac502259ad0.png △ 在 Google Cloud Console 中启用 APT

游戏加载时间调优

对于玩家来说,游戏的加载时间很大程度影响了他们在闲暇时间打开游戏的意愿。有了 APT,您可以清楚地看到在不同设备、不同启动类型下游戏加载时间的统计图表: d77854e4-2e90-11ed-ba43-dac502259ad0.png △ Android 性能调优工具显示的加载时间 如下图所示,startRecordingLoadingTime 方法可以使用给定的事件元数据和注释创建一个加载时间事件,并且将参数中的句柄 (handle) 设置为刚才创建的加载事件,便于后面使用 stopRecordingLoadingTime 方法结束时间记录过程。 d79292aa-2e90-11ed-ba43-dac502259ad0.png △ Android 性能调优工具记录加载时间的两个函数 您一定要记得调用 stopRecordingLoadingTime 方法,它会结束此前启动的加载时间事件,暂存刚才记录的结果,并于下一次会话清理时将事件记录上传到 Google Cloud 进行统计分析。加载时间事件中包含了许多元数据,可以帮助我们正确地区分不同场景下的加载时间,比如应用首次冷启动、后台转前台运行、加载新关卡等。如果涉及到网络加载,还会显示加载的数据源和网络类型信息。参见图中的结构体定义: 

d7b8b41c-2e90-11ed-ba43-dac502259ad0.png

△Android 性能调优工具中加载时间事件包含的元数据

除了提供上面的几个注解,您还可以添加一些自定义的注解来帮助锁定引起性能问题的源头。创建资源加载组也是一种不错的方法,比如,当您的游戏从 CDN 下载资源时,会形成大量可以单独追踪的下载任务和解压任务,为它们创建资源加载组可以很方便地分析这些任务执行的性能表现。

这些组也可以添加注解,这样您就可以看到造成特定场景加载缓慢的原因了。此时需要使用另一组方法,图中给出的是启动记录的方法 startLoadingGroup 的函数签名:

d7cc0440-2e90-11ed-ba43-dac502259ad0.png

△startLoadingGroup 函数签名 当您完成这些集成和调用后,耐心等待一段时间,Google Play 控制台的 Android Vitals 中就将显示这些加载时间的统计信息,比如:首次加载、冷加载、热加载、关卡加载时间等等。您可以很方便地了解到用户是否因为加载时间过长,而失去耐心退出游戏,还可以深入了解哪些设备或者关卡可能遇到了问题。 d7f644ee-2e90-11ed-ba43-dac502259ad0.png

△在 Android Vitals 查看游戏加载时间统计信息

Android Vitals 也可以显示帧率的统计信息,呈现方式非常类似: d809d96e-2e90-11ed-ba43-dac502259ad0.png △ 在 Android Vitals 查看游戏帧率统计信息 您可以从中了解到哪些设备的性能不足以支撑游戏流畅运行,哪些场景造成的帧率下降问题最严重。有了这些信息,您就可以优先针对那些最需要调整优化的用户群进行改进,让您的游戏能在尽可能多的设备上畅玩。

覆盖面和设备

最近我们在 Google Play 控制台提供了 "覆盖面和设备 (Reach and devices)" 功能,它可以帮助您更好地了解游戏覆盖的设备、国家区域以及在游戏生命周期内的测试和优化。您可以看到游戏的分布情况、安装趋势、崩溃率等统计信息,便于深入了解玩家和他们遇到的问题。

d82914aa-2e90-11ed-ba43-dac502259ad0.png

△安装分布和趋势统计信息 您还可以从多个维度分析这些数据,比如 SoC (System-on-Chip)、图形 API (如 OpenGL 和 Vulkan) 等:

d84bce32-2e90-11ed-ba43-dac502259ad0.png

△从多种维度分析数据 您还可以用自己的游戏数据与同类游戏的公开数据进行比较,从而发现新的开发方向,在着手开发下一版本之前做好充分的准备。另外,针对国家/地区的过滤条件能帮助您精确制定发布和扩张的计划。最后,您还可以选择导出这些统计数据,点击如图所示的 "Export report" 即可:

d85f4002-2e90-11ed-ba43-dac502259ad0.png

△导出统计数据报告

Android GPU 检查器

刚才我们从统计报告中基本确定了需要针对优化的方面,那么该怎样做呢?Android GPU 检查器不仅能提供游戏运行期间系统活动、高频硬件计数器的事件跟踪记录,还可以用类似 systrace 的工具在时间轴上绘制出时间占用图像。

Android GPU 检查器在两年前新增了对 GPU 显存信息的支持、使用 ANGLE 提供了 OpenGL ES 支持。在兼容了更多设备的同时,也增加了帧检查器 (Frame Profiler),它可以帮助您深入检查单个渲染帧,查看分解后的渲染通道级别的时间信息。另外,帧检查器还能帮您检查分析包括纹理、几何体、着色器、渲染管线在内的多种 GPU 信息,从而分析某一帧内进行的各种 GPU 活动。

d866c35e-2e90-11ed-ba43-dac502259ad0.png △ Android GPU 检查器的新功能

我们也正在与更多的设备制造商合作,希望能尽快为您提供更多的现有设备支持。

跨设备畅玩

截至目前,我们已经实现了在更多的屏幕类型上运行您的游戏,试想这样一个场景:您的玩家在下班路上掏出手机玩了一会儿游戏,到家后一阵忙碌,终于躺在沙发上,想要打开平板接着玩。那么如何保证玩家可以在平板上继续刚才手机上的游戏进度呢?

Google Play 游戏 SDK 为您提供了便捷的方法实现刚才的场景。它可以让玩家登录,并保存和同步游戏进度。这样一来,当同一账号在另一台设备登录时,您的游戏就可以检索并且取回服务器上的玩家数据,让他们可以直接从最后保存的时间点继续进行。同时,您还可以集成一些热门功能,比如游戏的成就系统、玩家排行榜等。

我们正在持续完善 Google Play 游戏服务,它提供了一个更加简化的登录 API,您可以在先行体验版的 SDK 中用一行代码实现登录功能,如下所示:

GamesSignInClient signInCli = PlayGames.getGamesSignInClient(this);signInCli.isAuthenticated().addOnCompleteListener(task -> {  boolean isAuthenticated =     task.isSuccessful() && task.getResult().isAuthenticated();  if (isAuthenticated) {    // 继续使用 Google Play 游戏服务  }});
△ 更新后的登录 API (预览版)

我们还计划简化用户账户的创建过程,当他们安装 Google Play 游戏应用时就会顺便创建个人资料了。这样一来,即使用户还没有安装好 Google Play 游戏应用,也能很快完成账户创建,然后回到游戏畅玩了。

△简化后的用户账户设置过程

另外,我们正着力于进一步简化自动登录流程,注册过的用户重新登录会变得更加简单。从 2022 年开始,用户就不再需要先安装 Google Play 游戏应用才能使用 Play 游戏服务了。

△ 2022 年 Google Play 游戏的新变化

有了这些更新,全球的 20 亿 Google Play 游戏用户就可以零点击登录 Play 游戏服务了。

游戏模式

随着越来越多玩家青睐移动游戏,我们也致力于让 Android 系统给游戏玩家和开发者提供更多的便利。从 Android 12 开始,部分设备将提供游戏模式 (Game Mode) API。这些 API 能让设备按照用户的需求提供极致的整机性能、平衡的性能或是最佳电池续航。而您前期为了适配各种设备对游戏所做的各项工作,刚好也可以用于响应这些性能相关的用户偏好。

d8f764fe-2e90-11ed-ba43-dac502259ad0.png

另外,Pixel 6 之类的设备还集成了新的游戏中心面板,它能以悬浮窗的方式为用户提供游戏模式开关,以及帧率计数器和 YouTube 直播助手等游戏实用工具。

d9076a48-2e90-11ed-ba43-dac502259ad0.png △ 边下载边玩功能

从 Android 12 开始提供的 "边下载边玩" 功能可以减少玩家的等待时间,让他们更快开始游戏。为了支持这项功能,您需要使用 App Bundle 来提交游戏,并且需要避免使用一些旧版本的 Ads SDK。这是因为旧版本的 Ads SDK 会在使用资源之前对其进行分析,这类行为会妨碍边下载边玩功能的实现。

总结

我们一起走过的漫漫长路因为有您的参与而生机勃勃。我们非常感谢您对 Android 游戏开发事业的支持,同时希望能给您提供更好的支持。在这篇文章中,我们向您分享了 Android 游戏性能调优的一些技巧,以及 Google Play 游戏服务的多项服务开发者和玩家的改进、基于性能调优工具的 Android Vitals 分析面板。我们也希望这些新特性和改进,能让玩家享受到更优秀的游戏体验,也能助力您更高效更轻松地开发游戏作品!

审核编辑:彭静
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Android
    +关注

    关注

    12

    文章

    3851

    浏览量

    125635
  • API
    API
    +关注

    关注

    2

    文章

    1381

    浏览量

    60988
  • 开发套件
    +关注

    关注

    2

    文章

    125

    浏览量

    24156

原文标题:打造卓越的 Android 游戏体验

文章出处:【微信号:Google_Developers,微信公众号:谷歌开发者】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Android 最值得推荐的8款开源游戏引擎

    ES技术开发的Android游戏引擎,支持Android平台下的2D游戏开发,物理引擎采用Box2D实现。单就性能角度来说,堪称是
    发表于 07-30 12:24

    HBase性能概述

    HBase性能
    发表于 07-03 11:35

    基于全HDD aarch64服务器的Ceph性能实践总结

    如ISA-L也都在arm平台上进行了优化。- 对于SPDK,也是从软件层面在arm平台上进行了优化。4.3 操作系统从Linux内核来Ceph
    发表于 07-05 14:26

    微软改进最新版SteamVR游戏性能

    微软发布更新,改进了最新版SteamVR游戏性能,更新包括:一个全新的环境,为SteamVR游戏的动作控制器添加了触觉反馈,提升SteamVR游戏性能等! 微软今年春季即将发布的一个
    的头像 发表于 03-10 17:18 4083次阅读

    华为Mate20X的游戏性能怎么样

    最近的华为Mate 20系列发布会上,华为在原有的三款产品序列之外,推出了一部专门以游戏为卖点的Mate 20 X。从发布会的情况来看,华为对这款手机的游戏性能相当自信。
    的头像 发表于 04-17 14:41 3518次阅读

    荣耀Magic2游戏性能实测 到底怎么样

    荣耀Magic 2玩游戏怎么样?作为首款采用“魔法全面屏”的荣耀新机,荣耀Magic 2刚一发布,便成功吸引了不少消费者!那么,荣耀Magic 2玩游戏怎么样?荣耀Magic 2值得买吗?想入手该产品的朋友,不妨来看看小编分享的荣耀Magic 2
    的头像 发表于 07-05 09:48 1.3w次阅读

    OPPOK3游戏性能实测 到底怎么样

    OPPO K3可以吃鸡吗?OPPO官方今年5月底在北京召开新品沟通会,正式推出了预热多时的K系列新品——“OPPO K3”。那么,OPPO K3可以吃鸡吗?OPPO K3值不值得买呢?针对上述问题,小编今天为大家带来了OPPO K3游戏性能实测。
    的头像 发表于 07-04 11:16 1.1w次阅读

    红魔Mars游戏性能实测 表现十分稳定

    红魔Mars游戏性能实测 表现十分稳定
    的头像 发表于 07-02 11:20 5180次阅读

    OPPOK3的游戏性能怎么样

    OPPO K3好用吗?除了外观和软件方面的大幅升级外,骁龙710移动平台也是OPPO K3手机的主要卖点。那么,OPPO K3好用吗?OPPO K3值得买吗?有意入手OPPO K3的朋友,不妨先来看看小编今天分享的OPPO K3游戏性能体验评测。
    的头像 发表于 07-01 08:42 4520次阅读

    vivoZ5x的游戏性能怎么样

    vivo Z5x玩吃鸡怎么样?除了备受好评的骁龙710移动平台外,vivo Z5x手机在系统和软件方面也有不小的改进。那么问题出现了,vivo Z5x玩吃鸡怎么样?vivo Z5x值得买吗?有意入手该产品的朋友,不妨先来看看小编分享的vivo Z5x游戏性能体验评测。
    的头像 发表于 06-30 09:24 1.1w次阅读

    红米K20Pro的游戏性能怎么样

    吃鸡吗?Redmi K20 Pro值不值得买呢?下面是小编分享的红米K20 Pro游戏性能评测,小伙伴们可不要错过了。
    的头像 发表于 06-30 09:21 1.6w次阅读

    红魔3的游戏性能怎么样

    红魔3可以吃鸡吗?继红魔Mars后,努比亚前些天又为手游爱好者们带来了新一代的红魔电竞手机——“红魔3”。那么问题出现了,红魔3可以吃鸡吗?红魔3值不值得买呢?想入手该产品的朋友,不妨先来看看小编分享的红魔3游戏性能实测。
    的头像 发表于 06-28 11:14 4432次阅读

    AMD:7nm Zen3架构大改,游戏性能提升26%

    再过两天AMD的锐龙5000系列处理器就要上市了,7nm Zen3架构使得新一代锐龙性能有了明显提升,IPC性能提升19%,游戏性能提升26%,一举成为最强游戏处理器。
    的头像 发表于 11-03 16:40 1839次阅读

    荣耀V40游戏性能首次曝光:吃鸡稳了

    从当前各类传言与猜测的消息来看,荣耀脱离华为之后的首款新机基本上确定是荣耀V40了。日前GameBench测试上出现了代号Honor NEW-AN10的新手机的性能测试报告,是荣耀V40的游戏性能
    的头像 发表于 12-31 18:20 3855次阅读

    骁龙888的游戏性能测试

    前段时间小米11首发了骁龙888,大家比较关心对于新一代旗舰处理器的游戏性能,我们也在第一时间进行了测试,并整理出了数据供大家参考。光明山脉可能由于还没有适配,暂时无法安装;《和平精英》90帧+高清
    的头像 发表于 01-05 17:29 7374次阅读