精華貼:手游遭遇兼容性、客戶端、服務器、防外掛問題如何做?

這份白皮書不僅給出了目前國內手游產品遭遇的技術上的主要問題,也給出了一個推薦給開發者了解的解決方案,以下是針對各類技術問題WeTest給出的建議。

GameLook報道 / 1月8日,騰訊質量開放平臺WeTest正式發布《2017中國移動游戲質量白皮書》。

在此次的《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類型的攻擊漏洞問題,建議加入類似大禹系統的防攻擊安全組件。

本文為GameLook原創文章,如若轉載,請注明出處:http://www.cobjhz.live/2018/01/317528

關注微信
网球优等生