0x00 前言

大家常常会抱怨安卓平台没有一个统一、好用的性能检查工具。不能像iOS的instrument那样方便。

图片来自:Instruments Help

比如,Unity Blog在3年前就已经教大家如何使用instrument来进行性能检测了。

Profiling with Instruments – Unity Blog​blogs.unity3d.com

其实目前的Android Studio已经提供了很好的安卓平台的性能检查工具。

https://developer.android.com/studio/profile

这里主要介绍CPU Profiler来检查Unity原生函数的性能。就像iOS上的instrument一样。

图形相关的性能检测,可以使用https://github.com/google/gapid

0x01 导出设置

下文中我使用的Android Studio版本为:3.5 preview,Unity版本为:2018.3.0b11。测试工程为:SurvivalShooter(Asset Store) 。

首先,根据android studio的文档:

https://developer.android.com/studio/profile/cpu-profiler?hl=en

Sampled (Native): Captures sampled traces of your app’s native threads. To use this configuration, you must deploy your app to a device running Android 8.0 (API level 26) or higher.

进行native sample的设备系统版本要求是:Android 8.0 (API level 26)

为了可以检测脚本的代码开销,(同样,就像instrument那样)推荐Scripting Backend使用il2cpp。

我们可以自己写一个函数,用来测试。(当然,工程中的脚本也是一样的)

之后,我们把工程按照Gradle的形式导出,以便之后使用as打开。

0x02 符号信息

正常使用as打开导出的工程。在

src/main/jniLibs/armeabi-v7a/

目录下,可以找到相关的so文件。我们主要关注libunity.so以及libil2cpp.so。前者是引擎部分,后者是开发者的脚本部分。此时的so都是符号信息不全的。所以我们要做的只是替换符号信息更全的so。

首先来替换libunity.so,可以在Unity目录下

PlaybackEngines/AndroidPlayer/Variations/il2cpp/Development/Libs/armeabi-v7a/

这里找到带符号信息的so。

之后,如果还想查看脚本的调用开销(il2cpp),我们就需要将带符号信息的libil2cpp替换。

它的路径在:

工程/Temp/StagingArea/symbols/armeabi-v7a/libil2cpp.so.debug

可以看到,gradle工程中的libil2cpp.so只有7.7mb,而带符号信息的libil2cpp则有88.3mb。

0x03 Profiling!

点击右上角的Profile Button,就可以开始进行性能检测了。

选中CPU栏,检测项目中有Java Method、Sample C/C++等等。选择C/C++,即可看到一个timeline。点击recorde,则开始记录call trace。

可以看各个线程的函数调用的chart,整个流程比较流畅。

也可以按照时间开销,整理为堆栈调用的形式。这里可以看到使用il2cpp的脚本函数调用。

我们可以找一找我们的UpdateTest1那个函数。

当然,这里和本文开头Unity Blog中在iOS平台上使用Instrument类似,主要是用来检测一些原生函数的性能,大家可以将它作为Unity Profiler在安卓平台上的一种补充。

-EOF-

最后打个广告,欢迎支持我的书

https://item.jd.com/12035114.html

如何使用Android Studio在安卓平台对Unity开发的应用进行性能检查?的更多相关文章

  1. Android Studio && GitHub 团队多人一起开发

    曾几何时,花了两天的时间搞了合并项目,搞得乱七八糟der,但最终还是被我搞定了,too 乱 to 做笔记.过了几个月,也就是前几天,抱着从头开始的决心,再次尝试,然鹅并没有结果.今天,再一次重新开始, ...

  2. 【原创】如何用Android Studio断点安卓自带Service或Bind类型的Service

    很久以来,我一直想找一种方法来断点调试安卓系统自身的Service,或者bind类型的Service,比如我想看WifiManager里面的getWifiApConfiguration函数是如何实现的 ...

  3. 【Android Studio】安卓开发初体验1——安装与试用

    安装 (安装预留硬盘(C盘)空余空间16G以上,8G以上内存) Intel用户: 安装Android Studio和AVD(安卓虚拟机 Android Virtual Device) 安装过程需要注意 ...

  4. Android studio 创建安卓项目hello

    Android studio是一个非常好用的软件,只不过在使用的最开始,由于各种问题,会失败,并且新手本身就不懂的情况下,更加的懵逼. 这里我来记录一下我遇到过的一点坑. 首先,Android stu ...

  5. Android Studio 0.4 + PhoneGap 3.3 开发环境的搭建

    最近在尝试HTML5移动平台下的开发 由于安卓的方便性,首先开始了安卓的试验 现在安卓下的开发工具首选 Android Studio (写这文章的时候,是0.4) 而跨平台的HTML5 App比较出名 ...

  6. 苹果电脑获取Android Studio的发布版SHA1和开发版SHA1

    最近开始转战安卓,准备把我在苹果上的应用也在安卓上来一波,其中就遇到一个问题就是最牛天气(iOS和微信小程序都已经有了,就差安卓的了)引用的百度的定位功能,需要填写发布版SHA1和开发版SHA1,作为 ...

  7. Android Studio使用JNI和NDK进行开发

    想要学习一下在Android Studio中进行JNI的开发,文章挺多的,但是几乎没有一个完整的说明的,中间总是有一两步漏掉.分享技术就应该完整的让读者学会,藏着掖着不是君子所为.对于那些故意含糊过去 ...

  8. 使用Android Studio和Genymotion模拟器搭建Andriod开发环境

    一.Android Studio下载 1.打开http://www.android.com/ 2.依照下图步骤打开下载页面 a.在页脚部分点击“App Developer Resources” b.点 ...

  9. 在Android Studio上进行OpenCV 3.1开发环境配置

    开发环境: Windows 7 x 64 家庭版 Android Studio 1.5.1(Gradle版本2.8) JDK 1.8.0 Android 6.0(API 23) OpenCV 3.1. ...

随机推荐

  1. JS for循环有关变量类型的问题/魔兽世界样式的tooltip

    <script> var num = 100; for (var i=num-5;i<num+5;i++){ // console.log(typeof(i)); console.l ...

  2. Centos7下安装PHP5.5,5.6,7.0----(转载记录一下)

    由于centOS7 默认的php版本是5.4的,偏低,所以收录了一下怎样安装5.5/5.6/7.0版本 默认的版本太低了,手动安装有一些麻烦,想采用Yum安装的可以使用下面的方案: 1.检查当前安装的 ...

  3. http_server.go

    , fmt.Sprintf("%s: closing %s", proto, listener.Addr())) }

  4. BZOJ_3969_[WF2013]Low Power_二分答案

    BZOJ_3969_[WF2013]Low Power_二分答案 Description 有n个机器,每个机器有2个芯片,每个芯片可以放k个电池. 每个芯片能量是k个电池的能量的最小值. 两个芯片的能 ...

  5. BZOJ_3589_动态树_容斥原理+树链剖分

    BZOJ_3589_动态树_容斥原理+树链剖分 题意: 维护一棵树,支持1.子树内点权加上一个数  2.给出k条链,求路径上的点权和(重复的计算一次) (k<=5) 分析: 可以用树剖+线段树解 ...

  6. BZOJ_1801_[Ahoi2009]chess 中国象棋_DP

    BZOJ_1801_[Ahoi2009]chess 中国象棋_DP Description 在N行M列的棋盘上,放若干个炮可以是0个,使得没有任何一个炮可以攻击另一个炮. 请问有多少种放置方法,中国像 ...

  7. 电梯调度二——曹玉松&&蔡迎盈

    电梯初步版本    经过去实际大楼的调查和一周的学习,初步完成了电梯的制作,但是这个版本的电梯功能并不是很全面,而且界面有待于改善,现在做出了测试版本,稍后进一步跟进新的版本,现在的版本初步完成的是电 ...

  8. hello spring春天来了

    这是小小小零食  废话不多说 现在看到 spring这个管家 先说第一个 ioc :在每个框架的中都有一个容器的概念,所谓的容器就是将常用的服务,封装起来,然后,用户只需要遵循一定的规则,就可以达到统 ...

  9. 最新.net和Java调用SAP RFC中间件下载

    还记得2012年初我发布的全网络第一个关于.net 连接SAP RFC的NCO3原创博文,用的就是SAP出的最新的.Net Connector 3.0的版本,在那个时候都是普遍用其他蹩脚的方式或Web ...

  10. 文本分布式表示(二):用tensorflow和word2vec训练词向量

    看了几天word2vec的理论,终于是懂了一些.理论部分我推荐以下几篇教程,有博客也有视频: 1.<word2vec中的数学原理>:http://www.cnblogs.com/pegho ...