[技术干货] Unity3D之全方位定位Android闪退技术

[复制链接]

Unity3D之全方位定位Android闪退技术

发表于 2021-12-28 10:42:09 来自 技术干货 只看大图 阅读模式 正序浏览
1336 0 查看全部
首先强烈建议大家安卓打包一定要用il2cpp,我们项目对比了mono发现il2cpp闪退方面比mono少了很多。平常给QA打包推荐勾选Development Build 和 Autocontent Profiler 。这样如果发生了闪退可以直接从log中定位,或者真机连profiler。
我们来看一个闪退的日志
如下图所示,WorldSceneMgr.cs 是我们自己写的c#代码,这里已经可以直接定位在哪一行闪退,通过完整堆栈即可定位到此时的闪退是由于WorldSceneMgr.cs CheckEventGenerator方法调用了物理相关函数,导致unity的物理引擎挂了。
  Unity3D之全方位定位Android闪退技术
171134qvrrgzdvuurivvpx.jpg
如果是releas正式包,那么在打包的时候必须要将我们自己写的c#代码生成的符号表.so保存下来。保存方法大家可以参考unity的文档
https://support.unity3d.com/hc/e ... -production-builds-
在闪退日志中查询到崩溃地址,使用addr2line即可还原出来。 详细方法同样可以参考unity的文档。
https://support.unity3d.com/hc/e ... icate-Android-crash
如果你的项目还在使用mono,同样也可以利用上面的方法还原出来崩溃堆栈。
可能大家都会接崩溃汇报的sdk,无论如何我们有带符号表的.so都可以还原崩溃堆栈。平常开发每天都会打包,但是版本号和包名都是一致的。但是每个包的.so文件都不一样,所以在崩溃汇报的时候还需要发送一个唯一的标志,用于日后来做区分。
后来我们又发现一个问题,QA在测试的时候有时候,他们会跑出来崩溃, 或者由于代码报错了导致界面异常或者逻辑异常。由于他们在报 bug的时候没有详细log日志,不太明确的bug技术只能靠猜来改。所以我们由给QA做了个一键提取log的工具。
如图下图所示,技术在自己的android sdk目录下拷贝出 adb.extAdbWinApi.dll AdbWinUsbApi.dll fastboot.ext 这些adb需要的依赖库。
  Unity3D之全方位定位Android闪退技术
171135smmmdta1c6sqpcam.jpg

脚本就是run.bat
  1. @echo off

  2. set "year=%date:~0,4%"
  3. set "month=%date:~5,2%"
  4. set "day=%date:~8,2%"
  5. set "hour_ten=%time:~0,1%"
  6. set "hour_one=%time:~1,1%"
  7. set "minute=%time:~3,2%"
  8. set "second=%time:~6,2%"

  9. set adb="%~dp0\adb.exe"
  10. echo %adb%

  11. %adb% logcat -v time -d >%year%%month%%day%%hour_ten%%hour_one%%minute%%second%.log &
复制代码


QA测试当跑出来bug或者闪退 只要在2分钟内(很短的一段时间)连上电脑, 快速双击 run.bat 就可以自动提取出当前手机的完整log了,在提交bug我们技术看就方便多啦。
注意:如果测试在PC上安装了360手机助手,adb端口就会被占用(强杀360都不行)。需要在360助手设置界面关闭 开机启动 设备连接时提醒我关闭悬浮框 重启一下电脑。
或者也可以不安装360手机助手,我测试过豌豆荚就没有这问题,或者别的助手也可以,毕竟QA就是手机助手用来装驱动和apk包。 现在我们的测试在提取安卓日志已经很6啦。呼呼~



回复

使用道具 举报

游客~
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|极客同行 ( 蜀ICP备17009389号-1 )

© 2013-2016 Comsenz Inc. Powered by Discuz! X3.4