有那么一次面試,聊到了真機(jī)調(diào)試的開發(fā)者選項(xiàng)虹蓄,很遺憾薇组,我除了會(huì)打開下USB調(diào)試坐儿,偶爾打開顯示布局邊界看看布局,偶爾開啟調(diào)試GPU過(guò)度繪制看一眼炭菌,都沒有好好研究過(guò)其他選項(xiàng)調(diào)試對(duì)于我們Android項(xiàng)目開發(fā)有什么用處黑低,大概這就是高級(jí)開發(fā)工程師與初級(jí)小菜鳥的區(qū)別吧,那次面試確實(shí)也發(fā)現(xiàn)了自己很多的不足第练,懂的東西都是皮毛娇掏,深入一點(diǎn)點(diǎn)都是一臉懵逼勋眯,噗~不說(shuō)傷心事了, 好啦塞蹭,每天進(jìn)步一點(diǎn)點(diǎn)番电,現(xiàn)在來(lái)研究看看吧辆琅。
我現(xiàn)在用的小米5s婉烟,一般安卓手機(jī)默認(rèn)沒有開啟開發(fā)者選項(xiàng),因此需要進(jìn)入設(shè)置 -> 關(guān)于手機(jī) ->連續(xù)點(diǎn)擊N次MIUI版本洞辣,即可開啟開發(fā)者模式了扬霜,其他安卓手機(jī)類似而涉,點(diǎn)擊N次Android版本號(hào)便可開啟了婴谱。然后在設(shè)置中的其他設(shè)置或者高級(jí)設(shè)置等等菜單中即可看到開發(fā)者選項(xiàng)的菜單了谭羔。
- 開啟開發(fā)者選項(xiàng)
開發(fā)者選項(xiàng)的總控制開發(fā),只有開啟它下面一切開關(guān)才是可用狀態(tài)客叉。
- 不鎖定屏幕
充電時(shí)不會(huì)休眠兼搏,主要就是方便開發(fā)佛呻,在開發(fā)過(guò)程之外的情況下記住了要關(guān)閉病线,不然得多費(fèi)電八吞簟!
- 直接進(jìn)入系統(tǒng)
點(diǎn)擊屏幕直接進(jìn)入系統(tǒng)而不會(huì)鎖屏纺裁,這里我的手機(jī)不能打開是因?yàn)槲议_了鎖屏密碼欺缘,下面小字也有說(shuō)明需要無(wú)屏幕密碼惭缰。
- 打開藍(lán)牙數(shù)據(jù)包日志
抓取所有的藍(lán)牙數(shù)據(jù)包到一個(gè)文件中漱受,在調(diào)試藍(lán)牙程序的時(shí)候比較方便昂羡。
- 打開藍(lán)牙調(diào)試日志
抓取所有的藍(lán)牙調(diào)試日志,在調(diào)試藍(lán)牙程序的時(shí)候比較方便怨愤。
- 設(shè)備解鎖狀態(tài)
- USB調(diào)試
開啟后撰洗,手機(jī)才能連接到電腦,然后調(diào)試试躏。這個(gè)總開關(guān)開啟了颠蕴,才可以開啟下面的USB調(diào)試和安裝助析。這個(gè)可用于在計(jì)算機(jī)和設(shè)備之間復(fù)制數(shù)據(jù)、在設(shè)備上安裝應(yīng)用而不發(fā)送通知以及讀取日志數(shù)據(jù)寡键。
- 撤銷USB調(diào)試授權(quán)
針對(duì)之前授權(quán)過(guò)的所有計(jì)算機(jī)撤銷USB調(diào)試的訪問(wèn)權(quán)限昌腰。
- USB安裝
是否允許通過(guò)USB安裝應(yīng)用膀跌,這個(gè)需同意捅伤,不然AS運(yùn)行的程序無(wú)法直接安裝在真機(jī)上。
- USB調(diào)試(安全設(shè)置)
這個(gè)比上面USB調(diào)試要高級(jí)點(diǎn)祠汇,可讓開發(fā)者使用電腦軟件通過(guò)USB模擬手勢(shì)點(diǎn)擊以及修改手機(jī)系統(tǒng)設(shè)置或權(quán)限可很。
- 選擇模擬位置信息應(yīng)用
允許代碼模擬位置我抠,比如地圖類應(yīng)用需要測(cè)試在外地的使用情況菜拓,通過(guò)開啟此項(xiàng)選項(xiàng)可以通過(guò)代碼模擬位置
- 啟用視圖屬性檢查功能
具體就是進(jìn)行視圖屬性檢查吧纳鼎,怎么用不清楚,用到的時(shí)候再來(lái)補(bǔ)充劝贸,開啟或關(guān)閉都會(huì)直接黑屏一瞬間悬荣。
- 選擇調(diào)試應(yīng)用
允許開發(fā)者在電腦上調(diào)試手機(jī)應(yīng)用。一般情況下無(wú)用言缤。
- 等待調(diào)試器
在選擇了一個(gè)調(diào)試應(yīng)用的情況下可開啟禁灼,調(diào)試應(yīng)用匯在執(zhí)行前等待附加調(diào)試器弄捕。
- 通過(guò)USB驗(yàn)證應(yīng)用
文字描述了,就是通過(guò)ADB/ADT檢查安裝的應(yīng)用是否存在有害行為穿铆。嘗試幾把荞雏,無(wú)法關(guān)閉掉平酿,暫時(shí)不知道如何關(guān)閉蜈彼,默認(rèn)開啟了,這樣也好棍辕,安全嘛痢毒。
- 日志記錄器緩沖區(qū)大小
可設(shè)置日志的緩沖區(qū)大小
- 無(wú)線顯示認(rèn)證
顯示無(wú)線顯示認(rèn)證選項(xiàng)
- 啟用WLAN詳細(xì)日志記錄功能
提升WLAN日志記錄級(jí)別(在WLAN選擇器中顯示每個(gè)SSID的RSSI)
- 主動(dòng)從WLAN網(wǎng)絡(luò)切換到移動(dòng)數(shù)據(jù)網(wǎng)絡(luò)
字面意思,試驗(yàn)開啟后連上的wifi并沒有就立即切換到移動(dòng)數(shù)據(jù)菇怀,應(yīng)該只是允許當(dāng)WLAN信號(hào)比較弱的時(shí)候,系統(tǒng)自動(dòng)將WLAN網(wǎng)絡(luò)切換成數(shù)據(jù)流量帅霜。
- 一律允許WLAN漫游掃描
根據(jù)接口中目前的數(shù)據(jù)流量允許/禁止WLAN漫游掃描身冀。
- 實(shí)用舊版DHCP客戶端
找到兩種回答:手機(jī)DHCP客戶端主要是為了從DHCP服務(wù)器獲得IP從而實(shí)現(xiàn)上網(wǎng)搂根,而通常DHCP客戶端需要從DHCP服務(wù)器獲得IP都是有四次協(xié)商剩愧,從而獲得IP。這就是舊版dhcp客戶端的意思穴翩。使用舊版DHCP客戶端 使用無(wú)線體驗(yàn)好一些芒帕。
舊版只能適配IPv4協(xié)議副签,新版可以適配IPv4和IPv6淆储。
- 始終開啟移動(dòng)數(shù)據(jù)網(wǎng)絡(luò)
移動(dòng)網(wǎng)絡(luò)以及WLAN一同開啟,即使連上wifi家浇,方便哪方網(wǎng)絡(luò)狀態(tài)不行快速切換本砰。
- 選擇USB配置
用于選擇USB配置,連接電腦主要的用處钢悲。
- 顯示觸摸操作
為觸摸提供視覺提示点额,開啟的時(shí)候,會(huì)有個(gè)圓圈圈表示手指的觸摸的地方莺琳,喜歡這種效果就打開还棱。
- 指針位置
開啟后惭等,會(huì)有個(gè)十字架琳要,而且會(huì)有平滑的線顯示手指觸摸的位置童叠,只顯示當(dāng)前觸摸數(shù)據(jù)厦坛,頂端還有坐標(biāo)杜秸,主要是為了方便開發(fā)凡橱,可方便對(duì)比開發(fā)得到的坐標(biāo)數(shù)據(jù)稼钩。
- 顯示Surface更新
屏幕稍微有點(diǎn)變化就閃爍,開啟后隨便一操作閃得我都要暈了巡李。大概是用來(lái)監(jiān)控surface變化吧侨拦,微小變化,可能直觀不是特別能看出來(lái)的季研,閃爍一下就很明顯了。
- 顯示布局邊界
開啟了就顯示剪輯豺鼻,邊距儒飒,各種線,看的我眼也要花了井誉,可以用于開發(fā)看其他app的布局,只是沒有數(shù)據(jù)在岂,只有各種邊界線蔽午。
- 強(qiáng)制使用從右到左的布局方向
這個(gè)開啟就神奇了,雖然文字沒有倒過(guò)來(lái)噢骄恶,文字圖標(biāo)左右都反過(guò)來(lái)了叠蝇,看效果。
用處嘛,可能對(duì)有些人來(lái)說(shuō)說(shuō)這樣子布局看起來(lái)更習(xí)慣吧堂淡。
- 窗口動(dòng)畫縮放
可以選擇彈出窗口動(dòng)畫縮放速度萤悴,也可以關(guān)閉動(dòng)畫覆履,都體驗(yàn)下就能發(fā)現(xiàn)動(dòng)畫效果了,比例越低伟众,則切換動(dòng)作較為生硬,動(dòng)畫效果更快先紫。
- 過(guò)渡動(dòng)畫縮放
差不多設(shè)置效果同上车摄,表示的是切換頁(yè)面時(shí)候的動(dòng)畫效果变屁。
- 動(dòng)畫程序時(shí)長(zhǎng)縮放
同上,表示啟動(dòng)app時(shí)候的動(dòng)畫闷板。
- 模擬輔助顯示設(shè)備
選擇其中一種類型的設(shè)備會(huì)在當(dāng)前的屏幕上再出現(xiàn)一個(gè)模擬的顯示設(shè)備遮晚,顯示的還是手機(jī)上當(dāng)前窗口的頁(yè)面糜颠,比較小。就是等于一個(gè)顯示當(dāng)前屏幕的一個(gè)小窗口元旬。開發(fā)過(guò)程中也許,在適配的時(shí)候朋譬,有點(diǎn)用處,可以利用一下狡赐。
- 強(qiáng)制進(jìn)行GPU渲染
在應(yīng)用程序中使用2D程序加速,Android的軟件應(yīng)用的界面可以使用CPU或GPU渲染搀擂,包括桌面,以前版本的圖形界面的渲染工作只有部分由GPU來(lái)完成威恼,其他的還是由CPU來(lái)做衬潦,選上這個(gè)就是強(qiáng)制由GPU來(lái)渲染附迷,由于GPU處理圖形比CPU好喊儡,所以GPU渲染應(yīng)用的界面會(huì)更流暢,同時(shí)減輕CPU的壓力,就是俗稱的硬件加速算柳,會(huì)增加界面的流暢程度。
但強(qiáng)制GPU也是有缺陷的。第一是強(qiáng)制GPU加速功能會(huì)增加功耗妥衣,降低待機(jī)時(shí)間。第二是狂票,部分舊程序本身不支持GPU渲染慌盯,沒有硬件加速hwa的就會(huì)出現(xiàn)崩潰。比較老的程序因?yàn)镾DK版本低不支持GPU加速灭必,或者開發(fā)時(shí)默認(rèn)不開啟GPU渲染,遇上gpu強(qiáng)制渲染就會(huì)出現(xiàn)問(wèn)題伶跷。
想開啟就開啟嘍~
- 顯示GPU視圖更新
開啟后整個(gè)屏幕都是紅的,屏幕上的區(qū)域更新時(shí)閃爍響應(yīng)的屏幕區(qū)域各種閃爍。還是別開了抵皱,眼都花了。當(dāng)然開發(fā)需要提示的時(shí)候還是開啟下吧。
- 顯示硬件層更新
下面小字也描述了,F(xiàn)lash硬件層進(jìn)行更新時(shí)會(huì)顯示為綠色位衩,大概做手機(jī)硬件軟件一塊兒的開發(fā)會(huì)開啟吧佛致。
- 調(diào)試GPU過(guò)度繪制
使用GPU繪圖時(shí)感昼,在屏幕上繪制不同的顏色來(lái)表明過(guò)度繪制的情況。
過(guò)度繪制情況的好壞通過(guò)顏色來(lái)表示奸绷,從藍(lán)色、綠色、淡紅色到紅色 线椰,分別代表從好到壞的漸變(1x過(guò)度繪制、2x過(guò)度繪制、3x過(guò)度繪制和超過(guò)4x過(guò)度繪制)躺孝。
界面上存在少量的淡紅色可以接受,但如果存在較多的大紅色就代表過(guò)度繪制有點(diǎn)嚴(yán)重了,這種時(shí)候厅篓,開發(fā)人員就要好好優(yōu)化一下自己寫的布局了宙项。
主要用于開發(fā)人員調(diào)試布局汇荐,避免寫出的布局過(guò)度繪制了,優(yōu)化性能革娄。
這里還有個(gè)選項(xiàng)很人性吶安寺,顯示適合綠色弱視患者查看區(qū)域言秸。贊一個(gè)。
- 調(diào)試非矩形剪裁操作
選擇下面不同的裁剪操作范舀,發(fā)現(xiàn)相冊(cè)里面照片->美化->調(diào)整這里裁剪下面這個(gè)選擇角度的區(qū)域顏色變化了聪全,還有當(dāng)選擇以綠色突出顯示測(cè)試?yán)L制命令的時(shí)候玫锋,在桌面翻頁(yè)的時(shí)候谦炬,即將翻到的頁(yè)面應(yīng)用圖標(biāo)都是綠色的,不大能明白這個(gè)功能有啥用看蚜。
- 強(qiáng)制啟用4x MSAA
4倍抗鋸齒疾党,非游戲達(dá)人,對(duì)此不熟悉蜓氨,哈哈。對(duì)畫質(zhì)有很大的提升,游戲畫面更為細(xì)膩和圓潤(rùn)顷霹,適合經(jīng)常玩游戲的用戶覆醇,前提是你的GPU帶的動(dòng)袍辞,不然耗電和發(fā)熱會(huì)增加,打王者榮耀的時(shí)候可以開啟噢噗
- 停用HW疊加層
停用的話板甘,所有應(yīng)用將共享視頻內(nèi)容寞奸,將不會(huì)經(jīng)常檢查碰撞與剪裁以顯示一個(gè)合適的圖像,將耗費(fèi)大量處理能力。而HW疊加層允許應(yīng)用有單獨(dú)的視頻內(nèi)存齐帚,性能要更好些敢朱,所以別停用就對(duì)了孝常,穩(wěn)穩(wěn)的沒毛病杖剪。
- 模擬顏色空間
針對(duì)一些特殊弱視或者色盲人群選用的顏色模擬,還挺人性的稿茉,不需要就不用設(shè)置了。
- 關(guān)閉USB音頻轉(zhuǎn)接
關(guān)閉自動(dòng)轉(zhuǎn)接至USB音頻外圍設(shè)備的功能痢士。
- 啟用嚴(yán)格模式
應(yīng)用程序在主線程上執(zhí)行長(zhǎng)時(shí)間操作時(shí)少态,屏幕閃爍!在打開某個(gè)應(yīng)用后屋摇,點(diǎn)返回退出但在進(jìn)程中仍然運(yùn)行颊艳,長(zhǎng)時(shí)間后屏幕會(huì)閃爍提示應(yīng)用還在在主線程上運(yùn)行。
- 顯示CPU使用情況
開啟后的顯示CPU使用情況,各類信息展現(xiàn)在旁邊祖很。
- GPU呈現(xiàn)模式分析
常用于Android性能分析的工具姜钳,GPU呈現(xiàn)模式用來(lái)測(cè)量app的幀速率,屬于GPU Profile工具的一種。在Android系統(tǒng)中是以每秒60幀為滿幀的已卸,那么用1秒÷60幀般贼,就能得出每幀為16毫秒(ms)時(shí)為滿幀的界限,每幀快于16ms即為流暢,而上圖綠線所標(biāo)示的高度即為16ms線叠洗,低于綠線即為流暢抵代。
如上圖案腺,可以看到一排柱狀圖在屏幕上涎才,從左到右動(dòng)態(tài)地顯示跌前,每一個(gè)垂直的柱狀圖代表一幀的渲染,越長(zhǎng)的垂直柱狀圖表示這一幀需要渲染的時(shí)間越長(zhǎng)。隨著需要渲染的幀數(shù)越來(lái)越多蜈出,他們會(huì)堆積在一起商叹,從而觀察到這段時(shí)間幀率的變化。
(GPU要繪制什么樣的視圖是需要CPU發(fā)出指令的过蹂,但CPU不會(huì)直接告訴GPU怎么做晚岭,而是會(huì)先將這一命令存入一個(gè)“盒子”,在盒子中會(huì)形成一個(gè)列表潜的,然后GPU從盒子中取出命令進(jìn)行視圖的渲染繪制。)
紅色代表了“執(zhí)行時(shí)間”抽活,它指的是Android渲染引擎執(zhí)行盒子中這些繪制命令的時(shí)間汁胆,假如當(dāng)前界面的視圖越多,那么紅色便會(huì)“跳”得越高释牺。
黃色通常較短千劈,它代表著CPU通知GPU“你已經(jīng)完成視圖渲染了”,不過(guò)在這里CPU會(huì)等待GPU的回話,當(dāng)GPU說(shuō)“好的知道了”,才算完事兒辜膝。假如橙色部分很高的話克懊,說(shuō)明當(dāng)前GPU過(guò)于忙碌崔梗,有很多命令需要去處理。
藍(lán)色用于判斷流暢度的話,參考意義是較大的伞鲫。藍(lán)色代表了視圖繪制所花費(fèi)的時(shí)間吠架,表示視圖在界面發(fā)生變化(更新)的用時(shí)情況。當(dāng)它越短時(shí),即便是體驗(yàn)上更接近“絲滑”俱诸,當(dāng)他越長(zhǎng)時(shí)锯岖,說(shuō)明當(dāng)前視圖較復(fù)雜或者無(wú)效需要重繪,即我們通常說(shuō)的“卡了”巍耗。
一般情況下驯耻,當(dāng)藍(lán)色低于綠線時(shí)都不會(huì)出現(xiàn)卡頓,但是想要追求真正的絲般順滑那當(dāng)然還是三色全部處于綠線以下最為理想知给。
當(dāng)開發(fā)發(fā)現(xiàn)曲線出現(xiàn)異常時(shí)筒扒,就該去做調(diào)整和優(yōu)化了,為用戶提供更好體驗(yàn)搂捧。
還有需要分析具體詳細(xì)的數(shù)據(jù)的時(shí)候,結(jié)合下面的命令來(lái)進(jìn)行:
$ adb shell dumpsys gfxinfo your_package
執(zhí)行該命令產(chǎn)生的日志中,你會(huì)發(fā)現(xiàn)一個(gè)標(biāo)題為: Profile data in ms. 這一節(jié)包含為每個(gè)窗口所屬應(yīng)用產(chǎn)生的3列表格。
- Draw 是消耗在構(gòu)建java顯示列表DisplayList的時(shí)間旬迹。說(shuō)白了就是執(zhí)行每一個(gè)View的onDraw方法椿猎,創(chuàng)建或者更新每一個(gè)View的DisplayList對(duì)象的時(shí)間。
- Process 是消耗在Android的2D渲染器執(zhí)行顯示列表的時(shí)間。你的視圖層次越多,要執(zhí)行的繪圖命令就越多危融。
- Execute 是消耗在排列每個(gè)發(fā)送過(guò)來(lái)的幀的順序的時(shí)間蛋勺,或者說(shuō)是CPU告訴GPU渲染一幀的時(shí)間距帅,這是一個(gè)阻塞調(diào)用探颈,因?yàn)镃PU會(huì)一直等待GPU發(fā)出接到命令的回復(fù)老翘。
關(guān)于Execute:如果執(zhí)行耗費(fèi)了過(guò)長(zhǎng)的時(shí)間,這意味著你是跑在前面的圖形管線。Android在運(yùn)行時(shí)可以有3個(gè)緩沖區(qū),如果你需要另一個(gè)應(yīng)用程序?qū)⒆枞钡狡渲械囊粋€(gè)緩沖區(qū)釋放出來(lái)。兩個(gè)原因會(huì)發(fā)生這種情況官扣。第一卖陵,你的應(yīng)用在Dalvik中快速繪制但在GPU顯示列表時(shí)候消耗了大量時(shí)間喘批。第二,你的應(yīng)用程序花了很長(zhǎng)的時(shí)間來(lái)執(zhí)行第幾幀,一旦管線滿了他將無(wú)法趕上,除非動(dòng)畫完成。
- 啟用OpenGL跟蹤
圖形視角效果器,是手機(jī)制作圖片軟件的輔助工具婆咸,比如ps3D立體圖倔丈,需要啟用這個(gè)工具才能實(shí)現(xiàn)再編輯過(guò)程中的圖片旋轉(zhuǎn),放大縮小復(fù)位等。
- 不保留活動(dòng)
用戶離開即銷毀每個(gè)活動(dòng),當(dāng)發(fā)生頁(yè)面跳轉(zhuǎn)時(shí),前一個(gè)Activity被立即銷毀厌丑,可用來(lái)模擬設(shè)備內(nèi)存不足時(shí)后臺(tái)Activity被銷毀的場(chǎng)景耕驰,若應(yīng)用做到開啟它時(shí)功能仍基本正常双饥,說(shuō)明代碼設(shè)計(jì)得比較合理,不同Activity之間的耦和很低刘急,打開這個(gè)選項(xiàng)的時(shí)候民轴,試了幾個(gè)應(yīng)用,都有奔潰現(xiàn)象。
- 后臺(tái)進(jìn)程限制
自定義設(shè)置后臺(tái)程序的進(jìn)程限制。標(biāo)準(zhǔn)限制是系統(tǒng)自行決定凶杖,還有選項(xiàng)是限制一個(gè)或者二三四五個(gè)后臺(tái)運(yùn)行杈湾。
- 系統(tǒng)內(nèi)存優(yōu)化級(jí)別
優(yōu)化系統(tǒng)內(nèi)存的設(shè)置,有各種級(jí)別可選,看各人不同情況選吧,開發(fā)測(cè)試或優(yōu)化應(yīng)用程序內(nèi)存情況的時(shí)候說(shuō)不定也是用得著的。
- 未啟動(dòng)的應(yīng)用
點(diǎn)進(jìn)去有個(gè)列表展現(xiàn)當(dāng)前手機(jī)系統(tǒng)中未啟動(dòng)的應(yīng)用。
- 顯示所有“應(yīng)用程序無(wú)響應(yīng)”
用軟件卡死了跳出會(huì)提示說(shuō)該“應(yīng)用無(wú)響應(yīng)是否關(guān)閉”的提示框。
- 顯示“強(qiáng)制關(guān)閉”
當(dāng)app出現(xiàn)FC(強(qiáng)制關(guān)閉)錯(cuò)誤時(shí),提示給用戶知曉。
- 啟用MIUI優(yōu)化
小米提供的MIUI優(yōu)化,開啟就享受優(yōu)化效果。
啊哈~這是欠了很久的整理總結(jié)筆記了侥猬,人太懶了铜邮,現(xiàn)在也是心血來(lái)潮秸苗,終于搞定了玖瘸,雖然還不完美蔑匣,可督促自己還是完成了一件事校套,繼續(xù)加油吧膳算!