https://blog.csdn.net/lly20000/article/details/79774755
step.1 准備工具
1.adb連接工具(我用的cofface adb )
【cofface】adb基於最新安卓源碼編譯修改,兼容其它助手,增加參數,支持識別所有機型
工具詳情:http://blog.cofface.com/archives/569.html
下載地址:http://pan.baidu.com/s/1qX3XQDA
2.Adreno Profiler 基於硬件層面查看內存貼圖
所有有些團隊為了避免別人提取所以對資源進行了加密,最近又發現了一個神器基於硬件層面查看內存貼圖,這樣就直接無視對方加密了
工具詳情:https://developer.qualcomm.com/software/adreno-gpu-profiler
下載地址:https://developer.qualcomm.com/software/adreno-gpu-sdk/tools
3.TexturePacket和還原工具
Anti_TexturePacker 或者 unpack_plist.py
step.2 鏈接手機
利用adb來連接手機有兩種方式: 1, wifi, 2, usb.
1. 通過wifi, 利用adb來連接手機。在pc的cmd中輸入命令: adb connect 192.168.1.100 如果電腦連不上安卓手機可以試試這個【cofface】adb基於最新安卓源碼編譯修改,兼容其它助手,增加參數,支持識別所有機型
ps:使用adb devices命令,老是報error:device offline的錯誤。
剛開始報error:devices not found
重新安裝adb 驅動。
解決方法:
adb kill-server
step.3 查看顯存貼圖
Adreno Profiler分析任意安卓游戲特效抓取資源,可以用來分析安卓手機上OpenGL ES繪制過程。這個東西牛的地方在於可以抓取任何可以運行的App,而且使用起來非常方便、沒有額外限制。這個工具本質上是一個OpenGL ES Draw Call Replay;如果你用過PIX或者GPA,就會感到很非常熟悉了。
由於這個工具是高通提供的,所以只能運行在高通芯片的安卓機上。為什么要強調這一點呢?其實其他廠商也有類似工具,但是從使用限制、方便程度上來說差太多了: iOS可以用XCode自帶的Frame Capture,但是這貨用起來很不順手,而且沒法抓取第三方應用。其他安卓廠商也有類似的工具,例如Mali Graphics Debugger,但是使用起來比較麻煩,譬如需要越獄、上傳so到系統目錄之類的。下面將具體介紹其使用
最近發現了一個非常好用的工具Adreno Profiler,可以用來分析安卓手機上OpenGL ES繪制過程。這個東西牛的地方在於可以抓取任何可以運行的App,而且使用起來非常方便、沒有額外限制。這個工具本質上是一個OpenGL ES Draw Call Replay;如果你用過PIX或者GPA,就會感到很非常熟悉了。下圖是貴易的魔天記,掛起來毫無壓力233
由於這個工具是高通提供的,所以只能運行在高通芯片的安卓機上。為什么要強調這一點呢?其實其他廠商也有類似工具,但是從使用限制、方便程度上來說差太多了:
- iOS可以用XCode自帶的Frame Capture,但是這貨用起來很不順手,而且沒法抓取第三方應用。
- 其他安卓廠商也有類似的工具,例如Mali Graphics Debugger,但是使用起來比較麻煩,譬如需要越獄、上傳so到系統目錄之類的。
下面將具體介紹其使用,然后用兩個例子來講解,一個是抓取分析聚爆Implosion的特效繪制,另一個是用來做cocos2d-x圖形性能優化。
ps. 我習慣說Draw Call(DC),工具里是Render Call,下文會混用...
環境配置
軟件配置
下載Adreno Profiler並安裝,需要注意以下幾點:
- Adreno SDK不是必須的,可以無視;
- 雖然Adreno Profiler提供了跨平台版本,但這貨貌似是c#的,我嘗試在OSX下用Mono跑但是折騰不出來,所以最好還是Windows;
- 需要將adb添加到系統路徑,可以直接下載一個Android SDK,但是我國國情導致你不一定能很方便的下載下來;還有一種取巧的辦法是所謂的xx手機助手、豌豆莢等工具目錄下一般都會自帶,指向adb.exe所在目錄即可。
硬件配置
需要一個有高通芯片的手機,我這里強烈推薦G家親兒子Nexus系列!如果手頭沒有的話,可以去淘寶買個Nexus 4,雖然是幾年前的機器、不過一點都不卡,而且一千塊錢都不到。
注意目前Android 5.1上可能出現連接不穩定的情況,見官方論壇,我這邊測試5.0倒是一直能用~所以如果遇到這個問題,建議降低系統版本再說。
再注意需要打開手機的開發者模式,並把電腦設為信任,偷懶的方法是用豌豆莢連一次,跟着指示做就行,驅動都自己裝好了。
基礎教程
如何抓取一幀
首先手機上打開游戲,運行到需要抓取的界面。然后在電腦打開Adreno Profiler,點左上角的Connect。這里有兩種連接方式:手機直接插到電腦上,或者在同一個局域網內使用IP連接。准備好了之后點擊Refresh,直至刷出對應的設備和應用:
雙擊連接之后,點擊Scrubber GL彈出抓取界面,然后點擊Capture Frame等待即可
這樣其實就完成了抓取工作,是不是感覺so easy! 下面將從例子出發,介紹具體的使用。
小技巧:抓取完成之后,可以點擊上方的Save將幀數據保存成apr文件,這樣可以之后Open,省的每次分析都需要連接手機、打開游戲。
基礎使用
這個工具使用非常簡單,核心是左下角的Render Calls。它其實是抓取了一幀中所有GL部分的調用及相關數據,然后按照繪制命令組織。當選中不同的Render Call時,工具會顯示從一開始到這一個命令的繪制結果,方便看到每一個中間過程。此外,在API Calls中,還可以看到每一個Render Call之前的其他命令,包括各種對GL狀態機的修改:
從圖中可以看到,在這個繪制動作前,對模板狀態進行了設置,然后傳了一些Uniform,並修改了頂點屬性~更方便的是,具體的頂點數據什么也能直接看到!
如何查看、導出資源
就紋理來說,在右邊可以看到所有顯存里的紋理資源,點開可以看到具體的紋理參數和縮略圖。在上面有一個小的按鈕,可以將所有紋理都保存成一個個文件:
就Shader來說,同樣也是可以看到所有Program,工具還會貼心的標出所有利用了該Shader的Render Call,下面可以看到反匯編出來的指令:
就模型來說,選中一個Render Call然后Save Vertex Data就可以導出obj,但是生成的文件還需要稍微修改下才能導入,具體打開看看就懂了~
我曾經把馴龍高手的地形導出之后放到Unity,毫無壓力-。-
進階使用
游戲性能優化
之前zhiwei寫過Cocos2d-x+Lua游戲的優化總結,下面我從圖形性能為例,來介紹需要注意的幾個點~
首先需要看一下每一個Render Call干了什么,是否有意義。根據不同游戲類型,對Draw Call個數應該有個大概掌握。這個當然是越少越好啦~
- 是否有無效Render Call,我曾經見過一個全屏繪制“無效果”,也就是屏幕內容在繪制前后結果完全一致,不知道到底干啥了...
- 是否有繪制到屏幕外的Render Call,也就是模型在屏幕外的情況;這個其實應該是引擎自動優化掉相機范圍外的物體,不過有的引擎不具有這個能力_(: