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