Android SDK上手指南:運(yùn)行與調(diào)試
譯文我們?cè)诒鞠盗薪坛坍?dāng)中已經(jīng)學(xué)習(xí)了關(guān)于Android應(yīng)用程序開(kāi)發(fā)的不少知識(shí)。在上一篇文章中,我們了解了如何將硬件與虛擬設(shè)備同Eclipse進(jìn)行對(duì)接。而在今天的指南里,我們將探索如何通過(guò)Eclipse在物理設(shè)備及Android虛擬設(shè)備(簡(jiǎn)稱(chēng)AVD)上進(jìn)行應(yīng)用程序運(yùn)行與調(diào)試。
介紹
對(duì)于一直在關(guān)注本系列Android應(yīng)用程序開(kāi)發(fā)教程的朋友來(lái)說(shuō),首先需要強(qiáng)調(diào)一點(diǎn):我們?cè)谥拔恼轮袆?chuàng)建出的應(yīng)用程序暫時(shí)還沒(méi)什么實(shí)際用處,但我們可以通過(guò)它來(lái)體驗(yàn)應(yīng)用的運(yùn)行流程,并以此為基礎(chǔ)介紹一些非常重要的Eclipse ADT實(shí)用程序。隨著大家開(kāi)發(fā)水平的提高,未來(lái)的新應(yīng)用必然會(huì)變得更先進(jìn)也更復(fù)雜,到那時(shí)我們現(xiàn)在所介紹的調(diào)試工作將扮演極為重要的角色。在完成了今天的指南后,大家可能希望花點(diǎn)時(shí)間對(duì)自己創(chuàng)建的應(yīng)用作出調(diào)整,而后嘗試將其運(yùn)行在物理或者虛擬設(shè)備上。掌握了這種方法,大家就可以在開(kāi)發(fā)過(guò)程中定期將應(yīng)用程序半成品運(yùn)行在設(shè)備之上,從而實(shí)現(xiàn)邊開(kāi)發(fā)邊調(diào)試的理想效果。
1.運(yùn)行
第一步
當(dāng)我們?cè)谔摂M或者物理設(shè)備上編譯并運(yùn)行自己的Android應(yīng)用時(shí),Eclipse會(huì)處理大部分必要的細(xì)節(jié)工作。Eclipse以及ADT會(huì)為我們的應(yīng)用創(chuàng)建一個(gè)APK文件,同時(shí)將其安裝在我們所使用的設(shè)備上。APK文件也就是用戶們從Google Play商店中所下載的應(yīng)用文件格式。不過(guò)大家還需要進(jìn)行額外一些步驟來(lái)進(jìn)行應(yīng)用程序的發(fā)布,這些內(nèi)容我們將在之后的教程中一一說(shuō)明??傊?,Eclipse會(huì)首先建立一個(gè)用于調(diào)試的APK文件,我們可以通過(guò)這套IDE將其直接運(yùn)行在設(shè)備上。
相信大家已經(jīng)通過(guò)上一篇指南文章了解了如何利用相關(guān)技術(shù)啟動(dòng)自己的AVD或者將硬件設(shè)備與計(jì)算機(jī)相連。我們將讓?xiě)?yīng)用程序運(yùn)行在接入的設(shè)備之上。無(wú)論是虛擬還是物理設(shè)備,都必須滿足我們?cè)趹?yīng)用程序清單當(dāng)中所指定的最低API級(jí)別,否則將無(wú)法正常運(yùn)行應(yīng)用對(duì)象。
第二步
現(xiàn)在我們可以首先為自己的應(yīng)用程序創(chuàng)建一套運(yùn)行配置方案。在Eclipse當(dāng)中,選擇“運(yùn)行”而后選擇“運(yùn)行配置”。在運(yùn)行配置窗口左側(cè),大家將看到可以運(yùn)行的應(yīng)用程序類(lèi)型清單。在其中選擇“Android應(yīng)用程序”然后點(diǎn)擊上方的新建按鈕。
在打開(kāi)的新配置項(xiàng)目當(dāng)中,在名稱(chēng)欄內(nèi)輸入一個(gè)名稱(chēng)以替代現(xiàn)有文本。請(qǐng)大家選擇一個(gè)清晰的名稱(chēng),讓自己能夠明確區(qū)分不同應(yīng)用程序?,F(xiàn)在點(diǎn)擊“瀏覽”按鈕,在其中選擇自己的應(yīng)用程序項(xiàng)目,而后點(diǎn)擊“OK”。
點(diǎn)擊“目標(biāo)”選項(xiàng)卡。大家可以讓Eclipse自動(dòng)選擇要啟動(dòng)應(yīng)用程序的設(shè)備,也可以將其設(shè)置為每次運(yùn)行應(yīng)用程序時(shí)都提醒用戶手動(dòng)選擇。這套選項(xiàng)只適用于同時(shí)有多種設(shè)備接入Eclipse的情況,例如一臺(tái)硬件設(shè)備與一套AVD。
請(qǐng)注意,我們的應(yīng)用程序現(xiàn)在已經(jīng)被列舉在運(yùn)行配置清單的Android應(yīng)用程序當(dāng)中。當(dāng)一切準(zhǔn)備就緒之后,大家可以從這里進(jìn)行應(yīng)用程序啟動(dòng)——相信在未來(lái)的實(shí)際工作中,各位的工作區(qū)內(nèi)還將包含更多應(yīng)用。
點(diǎn)擊“運(yùn)行”。如果大家在配置中設(shè)定了每次運(yùn)行前提示用戶選擇一種設(shè)備,那么Eclipse這時(shí)就將提供對(duì)應(yīng)選項(xiàng)。選擇當(dāng)前要使用的物理或者虛擬設(shè)備。如果我們沒(méi)有接入設(shè)備或者運(yùn)行AVD,但又在設(shè)定中要求Eclipse自動(dòng)選擇設(shè)備,則系統(tǒng)會(huì)啟動(dòng)一套適用于當(dāng)前情況的AVD。大家也可以通過(guò)Eclipse工具欄中的“運(yùn)行”按鈕來(lái)啟動(dòng)上一次應(yīng)用程序所使用的運(yùn)行環(huán)境,這就省去了每一次打開(kāi)運(yùn)行配置窗口的麻煩。
提示:在應(yīng)用程序運(yùn)行配置的“目標(biāo)”選項(xiàng)卡中,如果大家向下滾動(dòng)則會(huì)看到多種模擬器選項(xiàng),其中還包含命令行區(qū)域。大家可以點(diǎn)擊此處查看使用AVD過(guò)程中可能需要的各種命令行參數(shù)。
第三步
當(dāng)我們運(yùn)行自己的應(yīng)用程序時(shí),Eclipse會(huì)將APK復(fù)制到目標(biāo)設(shè)備當(dāng)中、進(jìn)行安裝并啟動(dòng)主Activity。
大家應(yīng)該還記得我們當(dāng)初在按鈕上建立的這套基本用戶交互機(jī)制;點(diǎn)擊按鈕來(lái)改變顯示文本內(nèi)容(在AVD當(dāng)中使用鼠標(biāo)模擬點(diǎn)擊操作,在實(shí)機(jī)上則使用手指進(jìn)行觸控)。
第四步
在大家開(kāi)發(fā)自己的應(yīng)用程序時(shí),很可能需要重復(fù)將當(dāng)前成果加以進(jìn)行、編輯內(nèi)容然后再次運(yùn)行。在這種情況下,Log將成為我們使用頻率最高的主要工具之一。在Java文件當(dāng)中,我們可以編寫(xiě)輸出至LogCat的相關(guān)信息來(lái)幫助自己更順暢地完成開(kāi)發(fā)與調(diào)試工作。在我們的主Activity類(lèi)中,將以下實(shí)例變量添加到原有類(lèi)內(nèi)容之前:
這是一條標(biāo)記常量,我們通常利用它來(lái)編寫(xiě)日志輸出信息;通過(guò)類(lèi)名稱(chēng),我們可以更明確地看到當(dāng)前日志信息來(lái)自哪個(gè)類(lèi)。在onClick方法中,將以下代碼添加到按鈕文本設(shè)定部分之前:
大家需要將“android.util.Log”導(dǎo)入到自己的類(lèi)當(dāng)中。在向Log中寫(xiě)入內(nèi)容時(shí),我們可以從多種方法中作出選擇,從而表達(dá)與目的相符的對(duì)應(yīng)信息。在上述代碼中,我們用v來(lái)指代詳細(xì)(verbose)。大家還可以用d來(lái)指代調(diào)試信息(debug message)、i指代信息(information)、w指代警告(warning)并用e指代錯(cuò)誤(error)。
現(xiàn)在保存我們的文件并通過(guò)“運(yùn)行”按鈕再次運(yùn)行應(yīng)用程序。請(qǐng)大家確保自己已經(jīng)在Eclipse當(dāng)中打開(kāi)了LogCat View。再次點(diǎn)擊設(shè)備或者AVD上的UI按鈕?,F(xiàn)在向下滾動(dòng)LogCat View直至我們找到對(duì)應(yīng)的運(yùn)行信息。
正如大家所見(jiàn),以上彩色信息反映每種情況下Log方法的實(shí)際運(yùn)行情況。我們可以通過(guò)在文本框中輸入內(nèi)容的形式搜索信息,這一點(diǎn)在顯示信息量較大的時(shí)候非常有用——例如使用硬件設(shè)備運(yùn)行應(yīng)用程序時(shí)。
提示:如果大家發(fā)現(xiàn)自己在使用LogCat View時(shí)Eclipse停止響應(yīng)或者崩潰,則需要在“窗口”——>“偏好設(shè)置”——>“Android”——>“LogCat”中設(shè)置LogCat信息的最大緩沖數(shù)量。如果這樣的調(diào)整仍然無(wú)法解決問(wèn)題,請(qǐng)進(jìn)一步降低緩沖數(shù)量并再試一次。
2.測(cè)試
我們?cè)诮裉斓奈恼庐?dāng)中不會(huì)討論太多測(cè)試方面的細(xì)節(jié),因?yàn)檫@是一項(xiàng)非常重要也相當(dāng)重復(fù)的工作、將成為大家未來(lái)Android學(xué)習(xí)過(guò)程當(dāng)中的主要課題之一。在準(zhǔn)備好進(jìn)行測(cè)試之后,大家可以在Eclipse當(dāng)中創(chuàng)建一個(gè)測(cè)試專(zhuān)用項(xiàng)目。Android開(kāi)發(fā)者指南當(dāng)中專(zhuān)門(mén)提供了“測(cè)試基本原理”與“Activity測(cè)試指南”兩個(gè)章節(jié),從深層次講解了Android平臺(tái)上的測(cè)試知識(shí)。測(cè)試工具全部以JUnit為基礎(chǔ),作為匯聚專(zhuān)有Android測(cè)試資源并加以擴(kuò)展的解決方案,JUnit專(zhuān)為Android開(kāi)發(fā)工作而生。如果大家已經(jīng)熟悉了對(duì)Java代碼的測(cè)試工作,那么應(yīng)該會(huì)更清楚自己需要在Android應(yīng)用測(cè)試當(dāng)中做些什么。
3.調(diào)試
第一步
盡管大家并不需要馬上對(duì)應(yīng)用程序進(jìn)行調(diào)試,不過(guò)我還是要通過(guò)今天的文章為大家初步介紹DDMS(即Dalvik調(diào)試監(jiān)控服務(wù)器)以及這些工具能為開(kāi)發(fā)流程帶來(lái)的實(shí)際價(jià)值。我們已經(jīng)了解了Eclipse當(dāng)中的一種調(diào)試View,也就是LogCat;不過(guò)另外幾種同樣值得大家認(rèn)真掌握。
在運(yùn)行在或者連接著Eclipse的虛擬設(shè)備或者硬件設(shè)備上,我們可以通過(guò)選擇“窗口”、“打開(kāi)視圖”、“DDMS”的方式開(kāi)啟DDMS視圖。在這里,大家能夠利用Eclipse右上方的按鈕在DDMS視圖與Java視圖之間進(jìn)行切換。
第二步
讓我們就DDMS視圖展開(kāi)探討。上一次我們已經(jīng)了解過(guò)設(shè)備視圖(其中會(huì)顯示一份清單,羅列所有已經(jīng)連接的設(shè)備外加運(yùn)行其中的進(jìn)程鏈接)。選擇一項(xiàng)進(jìn)程后即可訪問(wèn)設(shè)備視圖中的各按鈕。正面通過(guò)名稱(chēng)從列表中找出我們自己的按鈕。
在選中對(duì)應(yīng)進(jìn)程之后,點(diǎn)擊設(shè)備視圖中的“Update Threads”按鈕以開(kāi)啟Threads View。
“Update Heap”按鈕對(duì)于Heap View也將起到同樣的作用。在未來(lái)的開(kāi)發(fā)工作當(dāng)中,大家還會(huì)根據(jù)需要了解其它視圖的作用,其中一些只與執(zhí)行特定任務(wù)類(lèi)型的應(yīng)用程序相關(guān)。不過(guò)現(xiàn)在我們不考慮太多,只把時(shí)間用在DDMS當(dāng)中值得關(guān)注的內(nèi)容身上。
模擬器視圖提供針對(duì)任何運(yùn)行中虛擬設(shè)備實(shí)例的控制選項(xiàng),大家可以在設(shè)備列表中選擇一套AVD并打開(kāi)其模擬器控制選項(xiàng)卡來(lái)查看相關(guān)內(nèi)容。另外,需要注意的是我們可以在設(shè)備視圖當(dāng)中停止當(dāng)前運(yùn)行著的進(jìn)程、調(diào)試運(yùn)行中進(jìn)程并強(qiáng)制執(zhí)行垃圾回收。在我們結(jié)束對(duì)DDMS的說(shuō)明之前,應(yīng)用程序一定正運(yùn)行在硬件或者虛擬設(shè)備之上,請(qǐng)?jiān)谠O(shè)備視圖中選擇對(duì)應(yīng)設(shè)備并點(diǎn)擊“截圖”按鈕。
這時(shí)新窗口中將出現(xiàn)當(dāng)前設(shè)備顯示內(nèi)容的截圖結(jié)果。在這里,大家可以保存或者復(fù)制該圖片,并將其用于應(yīng)用程序商店中的宣傳資料當(dāng)中。受篇幅所限,我們對(duì)調(diào)試工作的說(shuō)明比較簡(jiǎn)略,大家可以點(diǎn)擊此處查看Android開(kāi)發(fā)者指南當(dāng)中關(guān)于Android應(yīng)用程序調(diào)試的內(nèi)容。
總結(jié)
當(dāng)我們開(kāi)始著手創(chuàng)建Android應(yīng)用程序時(shí),需要關(guān)注的重點(diǎn)在于運(yùn)行應(yīng)用程序并將信息記錄到控制臺(tái)以監(jiān)控應(yīng)用的運(yùn)行活動(dòng)。不過(guò)隨著項(xiàng)目復(fù)雜程度的提升,大家往往會(huì)在應(yīng)用程序發(fā)布前的準(zhǔn)備階段用到大量Eclipse當(dāng)中不可或缺的Android調(diào)試與測(cè)試工具。在本系列教程的下一篇文章中,我們將介紹Android Activity生命周期,只有掌握了這方面知識(shí)、大家才能真正開(kāi)始創(chuàng)建功能全面的應(yīng)用程序。
原文鏈接:
http://mobile.tutsplus.com/tutorials/android/android-sdk-running-debugging/