Android Studio提供了豐富的內置開發工具,以及更豐富的插件生態系統。本系列的前三篇文章重點介紹如何使用Android Studio 安裝和設置以及編碼和運行一個簡單的移動應用程序。現在,您將熟悉一些更高級的工具:三個內置工具和三個插件,用於調試和提高Android應用程序代碼的質量和生產率。
本文介紹了適用於Android Studio的以下工具:
內置調試工具
- Logcat
- Debug
- Lint
用於提高開發人員生產力的插件
- ADB Idea
- Codota
- Lombok Plugin
Android Studio 3.5的新功能
在最新版本的Android Studio中查找所需內容,包括對Kotlin的支持以及對內存管理和UI響應能力的改進。
記錄和調試Android應用
有問題的應用程序是失去用戶的潛在原因。Logcat和Debug是Android Studio內置的兩個工具,可用於識別和修復Android代碼中的錯誤。
記錄Android:Logcat
您可能不需要或不希望爲每個錯誤提供完善的調試器。在某些情況下,記錄和更正某些變量的值就足夠了。Android Studio的Logcat非常適合此任務。
Logcat是一個命令行工具(集成到Android Debug Bridge-ADB中),可轉儲系統消息日誌,可幫助您查找和修復代碼中的問題。消息包括有關設備何時引發錯誤的堆棧跟蹤,並記錄您有意嵌入android.util.Log
該類的消息。Logcat非常有用,它已直接集成到Android Studio中,您可以在其中從“ **視圖”**菜單或工具窗口欄訪問它。
logcat的窗口分爲下拉列表和其他控件隨後消息區的一個水平行。從左到右,控件是:
- 標識已連接設備和模擬器的下拉列表。(參見圖1。)
- 一個下拉列表,用於標識所選設備上已安裝的APK軟件包。
- 日誌記錄級別的下拉列表:
- 詳細:顯示所有消息。
- 調試:顯示僅在開發期間有用的調試日誌消息,以及下拉列表中較低的消息級別。
- 信息:顯示常規使用的預期日誌消息,以及下拉列表中較低的消息級別。
- 警告:顯示尚未出現錯誤的可能問題,以及下拉列表中較低的消息級別。
- 錯誤:顯示引起錯誤的問題-引發異常,以及聲明消息級別。
- 斷言:顯示開發人員期望永遠不會發生的問題。
- 搜索欄,其中唯一出現的消息是包含您在此控件中鍵入的文本的消息。
- 一個複選框,可讓您在搜索欄中使用正則表達式。例如,在圖1的上下文中,您可以指定SystemClock |。AlarmManager(即消息必須包含兩個字)。
- 用於過濾郵件的下拉列表,包括以下選項:
- 無過濾器(默認)將導致顯示所選設備的所有消息,而不管所選的APK軟件包如何。
- 僅顯示所選應用程序僅顯示所選設備上所選APK軟件包的消息,這些消息具有適當的日誌級別或更低的日誌級別。
- 編輯過濾器配置可讓您創建自定義過濾器。
在源代碼中,您可以插入對各種android.util.Log
方法的調用以記錄消息。例如,您可能調用public static int i(String tag, String msg)
來記錄INFO
-level消息或public static int w(String tag, String msg)
記錄WARN
-level消息。
對於這兩種方法,傳遞給標記的字符串都標識消息的來源(例如,調用此日誌記錄方法的方法),傳遞給msg的字符串標識所記錄的消息。
另外,您可以調用System.out
和System.err
的print()和println()
方法。調用System.out
方法可完成與log.i()
調用相同的操作;對System.err
方法的調用與log.w()
調用完成的功能相同。
在圖2中,僅顯示的消息是針對在模擬Nexus 5X設備上運行的示例應用進程的。此外,這些消息必須包含**“僅顯示選定的應用程序”**過濾器onCreate
並被其接受。
有關Logcat的更多信息
查看Google的“ 使用Logcat編寫和查看日誌 ”以瞭解有關Logcat的更多信息。還要學習android.util.Log
課程的文檔。
調試Android:調試
對於非常簡單的應用程序,使用Logcat記錄和更正代碼是可以的。對於更復雜的應用程序,這種調試形式可能很乏味。相反,您將需要一些可以調試應用程序的可執行代碼的東西。Android Studio的內置調試工具提供了許多功能,包括以下功能:
- 選擇要在其上調試應用程序的設備。
- 在應用程序代碼(Java,Kotlin或C / C ++)中設置斷點。
- 在運行時檢查變量並評估表達式。
使用此調試工具之前,需要滿足一些先決條件:
-
如果您的應用程序包含C / C ++源代碼,則需要從SDK Manager 安裝LLDB(請參見圖3)。幸運的是,本系列的示例應用程序(W2A)不包含C / C ++代碼,因此我們可以忽略此先決條件。
圖3.選中LLDB複選框,然後單擊OK以安裝LLDB -
您必須在連接的設備上啓用調試。但是,如果您使用的是模擬器(本例中使用的是模擬器),則可以忽略此先決條件。默認情況下,在模擬設備上啓用調試。
-
您必須運行可調試的構建變體。默認情況下,它是爲您創建的,因此在許多情況下(包括本示例),您不必擔心。
讓我們開始一個快速調試會話。
簡單的Android調試
假設您在打開示例應用程序(W2A.java)的編輯器窗口的情況下運行Android Studio,那麼第一步就是在該public void onCreate(Bundle savedInstanceState)
行上設置一個斷點。通過突出顯示此行並執行以下操作之一來設置斷點:
- 單擊行左側的裝訂線區域;該行應變成粉紅色。
- 從“ 運行”菜單中選擇“切換行斷點”。
- 同時按Ctrl和F8。
現在,從“ **運行”**菜單中選擇“ 調試”應用程序,或單擊工具欄上的相應圖標。如果模擬器未運行,則將看到“ **選擇部署目標”對話框。我選擇了Nexus 5X API 15,**然後單擊“ 確定”。
在等待模擬設備上線時,單擊工具窗口欄上的“ **調試”**按鈕以顯示“ **調試”**窗口。最終,您應該看到類似於圖4的內容。
調試窗口提供了step over, into, and out of a method等圖標按鈕。圖5顯示了我們逐步採用一種方法時會發生什麼。
單擊相應的圖標按鈕,然後從“ 運行”菜單中選擇“ 跳過”,或按F8鍵。這使我們onCreate()
在逐步執行每個方法調用時可以更深入地研究方法。
爲onCreate()
方法選擇帶有結束符}
的行,然後選擇**“運行至光標”**。您會收到有關該應用程序正在運行的通知。解鎖設備後,您應該會看到示例應用程序的活動窗口。
有關調試的更多信息
查看Google的“ 調試您的應用 ”以瞭解有關在Android Studio中進行調試的更多信息;例如,如何使用各種斷點。
使用GAPID進行調試
雖然這裏沒有介紹,但我建議您檢出GAPID:Graphics API Debugger,這是一組調試工具,可讓您檢查,調整和重播從Android應用程序到圖形驅動程序的調用。
用Lint進行代碼檢查
無論您多麼認真地編寫它,源代碼都可能包含錯誤,樣式問題,並且可能引用由於某種原因而處於非活動狀態的資源。短絨是一種工具,可以掃描源代碼以查找這些令人討厭的錯誤,並報告給開發人員。
Lint是用於Android SDK的內置linter。 您可以使用它來查找問題,例如目標API不支持或不贊成使用的元素和API調用。
要在Android Studio中運行Lint,請從“ **分析”**菜單中選擇“ 檢查代碼… ” 。這樣會打開“ **指定檢查範圍”**對話框。
從對話框中選擇所需的範圍(在這種情況下爲整個項目),然後單擊“ **確定”**開始檢查。結果將顯示在“ **檢查結果”**窗口中,並按類別進行組織。
出於其本質,Lint挑選了一些問題,否則可能會使應用程序代碼混亂。一旦發現,就很容易修復圖8所示的三個Java警告:只需聲明androidAnimation
private
並從兩個findViewById()
方法調用中刪除強制類型轉換。
有關Lint的更多信息
查看“ 使用lint check改進代碼 ”以瞭解有關在Android Studio中使用Lint的更多信息,並瞭解Android SDK的獨立Lint工具。
安裝和使用Android Studio插件
儘管內置工具有其優點,但許多其他工具也可以作爲插件使用。在本節中,我們將研究三個插件,以提高您在Android Studio中的編碼效率:
- ADB Idea
- Codota
- Lombok Plugin
Android Studio插件管理器
Android Studio的插件管理器使查找和安裝插件非常容易。通過選擇激活插件管理器文件 > 設置,然後插件從設置對話框:
接下來,單擊“ **瀏覽存儲庫…”**以打開“ **瀏覽存儲庫”**對話框,其中顯示了受支持插件的完整列表。我們將使用此對話框選擇第一個插件ADB Idea。
提升您的Android生產力
代碼快捷方式:ADB Idea
通過提供對常用ADB命令(例如啓動和卸載應用程序)的快速訪問,_ADB Idea_加快了Android的日常開發。
在插件的存儲庫列表中選擇“ ADB Idea ”,然後單擊“ 安裝”按鈕。Android Studio繼續下載並安裝插件。然後,它重新標記“ 安裝以重新啓動Android Studio”。對於每個插件,我必須在單擊Restart Android Studio之後重新選擇插件,然後再次單擊此按鈕以重新啓動Android Studio。
安裝後,Android Studio允許您從其“ **工具”**菜單訪問ADB Idea 。選擇“ **工具”>“ ADB Idea”,**然後從出現的彈出菜單中選擇適當的命令。
選擇ADB Restart App之後,我在事件日誌窗口中以及在我的Amazon Kindle設備上重新啓動的應用程序中看到以下消息。
查找可用的代碼:Codota
您可以使用_Codota_插件來訪問Codota搜索引擎,該引擎使您可以瀏覽數百萬個公開可用的Java源代碼片段,以解決Android編碼問題。
在插件的存儲庫列表中選擇Codota,然後單擊“ **安裝”**按鈕。Android Studio下載並安裝了插件後,它將重新標記“ 安裝”按鈕以重新啓動Android Studio。重新啓動會激活Codota。
重新啓動後,您將遇到“ Codota身份驗證”對話框。單擊鏈接,然後按照說明接收令牌。然後,將令牌粘貼到上述對話框中,然後單擊“執行”。
藉助Android Studio,您可以通過在編輯器窗口中右鍵單擊Java代碼並選擇“ **獲取相關示例”**菜單項來訪問Codota,如圖16所示。
單擊此菜單項將導致瀏覽器顯示一個包含相關代碼示例的頁面。例如,以下頁面提供了與findViewById
相關的示例:
自動生成Java代碼:Lombok
Lombok項目提供了一組註釋,可用於代替樣板代碼,從而節省了您手動編寫此代碼的時間。
在插件的存儲庫列表中選擇Lombok插件,然後單擊安裝。Android Studio下載並安裝插件後,它將提示您重新啓動Android Studio。重新啓動會激活Lombok插件。
用一個簡單的例子說明 Lombok的用處。假設我們將以下最小Robot
類添加到示例應用程序的W2A.java
源文件中:
class Robot
{
private String name;
}
此類的想法是,我們將存儲正在設置動畫的機器人的名稱以及可能有用的任何其他信息,並將此信息顯示爲toast彈窗(一條小消息,類似於工具提示)。
我們可能需要花費幾分鐘時間來向此代碼添加構造函數和getter/setter方法。但是,更好的選擇是讓Lombok爲我們添加此樣板。步驟如下:
- 右鍵單擊
Robot
。 - 從彈出菜單中選擇“ 重構 ”。
- 從下一個彈出菜單中選擇“ Lombok ”。
- 從下一個彈出菜單中選擇Default @Data。
現在,您應該觀察@lombok.Data
到class Robot
標頭前面有一個註釋。此註釋使構造函數,getter / setter方法以及其他樣板代碼自動生成。您可以通過重複前面的步驟來查看所有的這些樣板,但是這次選擇Delombok而不是Lombok。您會看到Lombok生成了如下內容:
class Robot
{
private String name;
public Robot() {
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public boolean equals(final Object o) {
if (o == this) return true;
if (!(o instanceof Robot)) return false;
final Robot other = (Robot) o;
if (!other.canEqual((Object) this)) return false;
final Object this$name = this.getName();
final Object other$name = other.getName();
if (this$name == null ? other$name != null : !this$name.equals(other$name)) return false;
return true;
}
protected boolean canEqual(final Object other) {
return other instanceof Robot;
}
public int hashCode() {
final int PRIME = 59;
int result = 1;
final Object $name = this.getName();
result = result * PRIME + ($name == null ? 43 : $name.hashCode());
return result;
}
public String toString() {
return "Robot(name=" + this.getName() + ")";
}
}
第四部分的結論
Android Studio是用於開發Android應用程序的絕佳環境(儘管有些漏洞)。在這個簡短的系列文章中,我向您展示瞭如何下載和安裝Android Studio,引導您完成了簡短的Android應用程序開發教程,向您展示瞭如何在安卓模擬器上構建和運行應用程序,並向您介紹了許多有用的方法用於Android開發的工具和插件。
還有更多的東西可供您學習。例如,您可能想玩Android Profiler來監視應用程序的性能並發現任何隱藏的性能瓶頸。您可能還需要安裝和探索其他插件來提高編碼效率。
希望您將Android Studio及其內置工具和可擴展插件架構一起使用,以開發Android移動應用。