在此次的《2017中国移动游戏质量白皮书》,分别从研发概况、市场硬件环境、兼容性、客户端/服务器端性能、安全现状、舆论口碑等多个层面,汇总中国移动游戏产品质量数据和趋势,最大程度展现手游研发质量现状。
值得注意的是,gamelook发现,这份白皮书不仅给出了目前国内手游产品遭遇的技术上的主要问题,也给出了一个推荐给开发者了解的解决方案,以下是针对各类技术问题WeTest给出的建议:
兼容性问题解决建议
客户端崩溃
崩溃问题解决方法主要有下列四种,开发者需要根据自身情况合理选择:
1、通过异常堆栈找到对应的代码进行分析,java可以直接看到代码堆栈,native程序可用ndk-stack还原到代码异常堆栈,根据逻辑找到原因;
2、与上一个稳定版本对比代码变化,可使用比较工具如beyondcompare,仔细分析所修改的代码,找到问题原因;
3、直接调试分析,使用Android Studio进行调试,Java和Native程序都可以考虑,在代码异常发生之前单步跟踪,找到问题原因;
4、关键位置多打些debug日志等待问题重现,重现后通过日志缩小问题范围再结合代码进行分析,找到问题原因;
UI异常
UI异常一般分为几类:黑屏、白屏、花屏;重影,错位;资源加载失败等等。
1 黑白屏和花屏问题一般是跟Android设备的兼容适配强相关的问题。具体跟设备的屏幕尺寸、GPU类型,定制化Android版本等相关。例如关注GPU对一些纹理的支持格式;以及虚拟控件对图片本身的显示效果等。
2 重影、错位,或者资源加载失败,一般是游戏本身的逻辑问题。一旦出现,一般不会只在特定的机型上发生。这块UI问题,产生的原因有时也与游戏引擎相关,就Unity引擎开发的游戏而言,我们发现很多开发者没按官方图片格式等来做,注意图片格式符合官方标准等。
无响应
ANR问题往往是因为主线程执行了一些耗时操作,导致线程阻塞时间超过阈值从而引发系统异常.
ANR主要包含以下一些类型:
•KeyDispatchTimeout(5 seconds) --主要类型,按键或触摸事件在特定时间内无响应;
•BroadcastTimeout(10 seconds) -- BroadcastReceiver在特定时间内无法处理完成;
•ServiceTimeout(20 seconds) --小概率类型,Service在特定的时间内无法处理完成在ANR分析中用的比较多的是trace文件和system.log
•根据trace文件是否能准确抓住现场
•system.log中可能出现的有用信息是CPU的使用率
客户端性能优化建议
帧数(fps)
核心场景中,尽量减少耗时较大函数的调用,比如资源加载函数,对象生成函数,IO操作函数等,将这些函数放在场景加载时完成。
同一时刻场景中存在的对象数量需要进行控制,特别是一些比较消耗性能的对象,刚体性质的对象需要物理计算及碰撞检测,模型材质复杂的对象需要更多渲染性能,这些对象不要同时存在过多。
对游戏资源的尺寸进行优化,在保证效果的前提下,减少网格的面数和骨骼数,纹理的大小等。
内存
代码逻辑方面,及时释放不再使用的内存,减少频繁的内存分配和释放,有条件的情况下可以使用内存池和对象池技术。
游戏资源方面,控制资源的尺寸,进行按需加载和释放,防止不再需要的资源继续留在内存中。同时一些参数也会影响资源的内存占用,比如纹理长宽非2次幂,纹理mipmap数量等,需要特别注意。
CPU
在游戏主线程中,尽量不做复杂运算,将这些运算放在单独的子线程中完成。
善用引擎提供的优化选项,比如网格合并,遮挡剔除,光照烘焙等,这些功能可以极大减少引擎需要的CPU运算。
性能要求特别高的代码,可以使用c或c++语言实现,甚至嵌入汇编语言。
服务器性能问题解决建议
单场景问题排查
通过压测工具进行单场景测试,逐步增加场景压力,如果出现:服务器进程cpu资源耗尽、回复消息过慢、回复消息失败,则表示服务器到达瓶颈,此时一般可通过系统工具(top、perf、iostat、vmstat等)排查热点逻辑,查看是否存在优化空间,或从逻辑机制上解决。
容量测试问题排查
综合场景一般包括之前筛选出的所有场景,将所有玩家按照一定比例分布,该比例一般可以通过不同场景下的心跳包频率比例看出。
主要会遇到的问题为:游戏卡顿、玩家掉线等,该类问题一般为客户端或服务器各进程资源遇到瓶颈所致。排查方法与单场景类似。
稳定性测试问题排查
稳定性测试中易出现服务器宕机、内存泄露等情况,针对服务器宕机,一般通过gdb分析core文件,并结合所测场景的机器人行为进行分析宕机原因。通过查看稳定性测试中的内存变化曲线,可以判断服务器内存是否稳定或泄露,若发生泄露,一般可通过内存检测工具,如valgrind等对服务器进程进行排查。
手游安全问题解决建议
客户端安全
客户端安全指的是从反破解反调试角度,应用层面需要进行的防范措施。
针对开发者的建议:
1)增加反调试机制防止游戏在运行时被破解;
2)屏蔽常规的ptrace等注入方式;
3)配置编译选项将so文件中的函数名进行抹消;
4)针对动态库so以及资源文件进行完整性校验;
5)针对Unity引擎下的关键逻辑动态库dll文件,需要进行隐藏或者加密处理;
6)针对Apk文件的二次打包进行校验处理;
7)避免输出关键逻辑相关的log信息。
业务逻辑安全
业务逻辑安全指的是和游戏业务数据相关的安全问题。
针对开发者的建议:
1)针对游戏运行时的内存数据进行加密处理;
2)本地客户端与服务器端的通信协议必须使用加密保护,且加密Key至少每次登录变化一次;
3)针对通信协议强交互类型的游戏,关键逻辑运算必须有服务器端完成;
4)针对通信协议弱交互类型的游戏,需要记录用户在单局游戏内的数据,上报至服务器端进行统一校验。
服务器端安全
服务器端存在各种影响游戏正常运营的安全问题。
针对开发者的建议:
1)针对游戏内用户输入,需要防止SQL注入等类型的漏洞问题。
2)针对DDOS类型的攻击漏洞问题,建议加入类似大禹系统的防攻击安全组件。
用户评论
哎,这段时间手机游戏的品质真一言难尽啊!感觉什么小问题都有。
有11位网友表示赞同!
确实很烦,好不容易找到一款好玩的手游,结果各种bug塞牙缝
有16位网友表示赞同!
兼容性问题最大的坑就是玩不到新游戏了,我的手机就老的不能用了
有7位网友表示赞同!
服务器不稳定是玩家最痛的恨!经常卡顿崩溃还掉线
有5位网友表示赞同!
防外挂机制太重要了,不然全是大神在乱玩,体验感会让人特别低落
有16位网友表示赞同!
如果手游做好了这些问题,真的可以吸引很多玩家啊。
有5位网友表示赞同!
我最近接触的游戏都是各种小问题不断,看得真头疼
有11位网友表示赞同!
手游开发商是不是应该把用户体验放在第一位?
有15位网友表示赞同!
希望游戏厂商能够重视这些通病问题,多想想玩家的想法
有16位网友表示赞同!
感觉玩游戏越来越像是在解决bug了,真的很搞笑
有11位网友表示赞同!
客户端更新太频繁了,每次都是安装包很大
有20位网友表示赞同!
服务器稳定还是得看开发商的投入力度吧,没钱就不行呀!
有20位网友表示赞同!
防外挂机制做得好的游戏确实能让人玩得更安心
有17位网友表示赞同!
这些问题真的影响着玩家的游戏体验呢。
有12位网友表示赞同!
我宁愿玩几款画面不那么精致但运行比较流畅的游戏,也不想忍受各种bug!
有5位网友表示赞同!
真希望手游行业能够早日解决这些根本性问题!
有11位网友表示赞同!
对游戏厂商来说,改善用户体验才是最长久的盈利之道
有18位网友表示赞同!
感觉现在手游的竞争是越来越激烈了,各个游戏都想要把玩家抢过来,所以才会忽略一些基本的问题!
有15位网友表示赞同!