[翻譯]為 Eclipse “難民”準備的 Android 和 IDEA
這個月早些時候,我用於編寫 Android 專案的環境由 Eclipse 變成了 IntelliJ IDEA。總體來說,這體驗感棒極了,我更喜歡使用 IDEA 而不是 Eclipse 進行 Android 開發。而且現在 IntelliJ IDEA 11 EAP (Early Access) 已經有了視覺化的 layout(佈局) 視窗,幾乎沒有理由讓我再使用其它的工具編寫 Android 應用。我撰寫本文是為了幫助其它那些正在切換 IDE 的使用者。
為啥使用 IntelliJ IDEA 開發 Android?
無須再問 IDEA 是否是你心儀的 IDE,也無須再問公司是否強迫你使用它。但為了以防萬一(怕你還不是瘋狂粉絲),下面我要介紹一些 Android 方面的特性,正是這些特性讓我轉而使用它。
Find(查詢)功能(Alt+F7)知道 Android 的 XML 資源(字面意義指它們的內容)的存在,因此在專案資源當中的查詢工作變得更加簡單。而且,我發現 IDEA 的搜尋能力比 Eclipse 略顯智慧化。下面的例子中,你可以看到我在 layout XML 檔案中查詢某個 widget ID 時所發生的狀況:
圖01 IDEA 中查詢的用法
由於 IDEA 能夠識別 Android XML 資源,像 Rename(更名) (Shift+F6)這樣的重構動作將在 Java 程式碼和 XML 中共同進行。你可以在 XML 檔案中重新命名某個 widget 的 ID 並更新 Java 程式碼,也可以在 Java 程式碼中進行重新命名並更新 XML。下圖中,我正對 XML 中某個 widget ID 進行重新命名。真不錯。一般情況下,我不會在註釋和字串中進行搜尋,因為這實在有點太過火了。
圖02. 更名重構
在 Android 方面有一些特別的意圖,使 IDEA 開發之旅更加輕鬆。意圖就是在 Eclipse 中使用 Ctrl+1 啟用的 quick-fixes(快速修復)。在 IDEA 中用的是 Alt+Enter 。例如,如果在程式碼中引用了某個靜態字串,那麼應當可以將該字串移動到 strings.xml 中讓它成為一種資源。將游標移動到該字串,按下 Alt+Enter,接受所推薦的名稱,然後就可以繼續了。對於重構的 undo 操作,Ctrl+Z 也非常好用。IDEA 和 Eclipse 的一個重大差別就是對重構的支援。在 IDEA 中,無須編譯資原始檔來讓重構生效。有一種很常見的情況是:有一份破損的檔案,通過成對的自動更名或重構對它進行修補。
圖03. 移動重構
最後一點,在 IDEA 11 版本之前,Elcipse Android 的一個殺手級特性是基於 XML 佈局檔案的視覺化編輯器。個人而言,我不常使用拖放式的佈局編輯工具,但我仍然認同不用重新編譯和部署就能立刻看到程式碼所帶來變化這一特性的價值。Eclipse 的該項功能曾經更好一些。但現在 IDEA 11 有了佈局“Preview(預覽)”模式。對 XML 進行的修改立刻就能在預覽中看到更新。還可以快速更改 theme(主題),以橫屏或者豎屏模式進行預覽,切換到夜間模式,並選擇不同螢幕尺寸。如果確實需要視覺化編輯器,Eclipse 是首選。否則,IDEA 的預覽功能就足夠了。IDEA 部落格提供了更多資訊。
圖04. 視覺化預覽
讓我們開始 IDEA 之旅。
適應 IDEA
基礎佈局並非 IDEA 和 Eclipse 之間全部的差別。有一個主程式碼視窗(下圖中的右側)、一個專案檢視(左上)和一個結構檢視(左下)。凡是在 Eclipse 能夠找到的視窗,基本上也能在 IDEA 中找到。開始熟悉 IDEA 的方法之一是閱讀我幾年前寫的 DZone IDEA RefCard。今天它仍然合用。我將圖片進行了高亮處理,以展示相關的細節。
圖05. 專案檢視
在任何時候都可以通過按下 Escape 鍵跳轉到程式碼視窗,也可以通過 Shift+Escape 關閉任何開啟的工具視窗。IDEA 所沒有的概念是 Perspective(視角)。也許你喜歡 Eclipse 的視角。也許你喜歡在啟動偵錯程式時,程式碼視窗縮小成為郵票大小的小視窗。誰知道呢,或許從某個角度來說,這也是有好處的。在此我很難贊同這種觀點,關於視角我能想到的最佳詞彙是“討厭”。IDEA 所沒有的另一個概念是“Team Plugin(團隊外掛)”。對於各種版本控制系統,很難用一個像“Team”這樣的詞來以某種方式進行抽象概括。相反,當你啟用 Subversion 時,你就能使用 Subversion 的特性。Git 則使用 Git 特性。使用 Tools->Enable Version Control 選單項可以啟用版本控制系統。然後,通過快捷方式 Alt+9 調出版本 Version Control(版本控制)檢視。
執行、除錯及 Android 工具
在 IDEA 中的執行和除錯與 Eclipse 略有差別。可在螢幕上端的 Run/Debug(執行/除錯)下拉選單中管理“Run Configurations(執行配置)”。
圖06. 執行/除錯配置
可以建立臨時或者永久的執行配置。右鍵點選某個測試並選擇 Run(執行)可建立一個臨時的執行配置。如果想反覆執行該目標程式,將配置存為永久配置好了。如果你是 Maven 使用者,可以在 Maven 檢視中右鍵點選某個目標並建立一個執行物件,即一個 run:jetty 目標。IDEA 對 Maven 的支援妙不可言,因此假如你是 Maven 使用者的話實在是幸運了。
兩種產品之間,偵錯程式的特性非常接近。通過點選邊框(或者Ctrl+F8)可以設定斷點,選擇並點選某個引用可以將其新增到 Watch 視窗。我注意到,Eclipse 使用者更喜歡啟用或禁止斷點,而不是設定和刪除它們。如果這是你喜歡的方式,沒問題,可以通過按下 Ctrl+Shift+F8 來管理所有的斷點。同時,請注意下偵錯程式中的 Logcat 標籤頁,那裡將顯示 Android 的 Log 資訊。如果是 Running(執行)而不是 Debugging (除錯)程式,那麼 Logcat 將輸出到底部工具條的 “Android Logcat” 視窗中。
圖07. 除錯視窗
SDK 中所附帶的主要 Android 工具可以通過 Tools->Android 選單來呼叫。通過這種方式,可以匯出某個已經簽名的安裝包,並同時啟動 AVD 來管理模擬器和環境。如果需要像 “hierarchyviewer” 或 “monkeyrunner” 之類的 SDK 工具,就不得不從命令列自己啟動了。IDEA 也支援內建的 Android 測試,執行單元測試時,IDE 會提示選擇是進行 JUnit 測試還是 Android 測試。它會記住你的回答,因此如果選錯了,只需刪除執行配置從頭來過。它將再次提示。
管理 IDEA 專案
IDE 切換工作最困難的部分是 Project configuration (專案配置)和 Web Server COnfiguration (Web 伺服器配置)。幸運的是,作為一份 Android 指南,我們無需涉及後者。但還是需要對專案進行一些設定工作的。首先了解一些術語。“Eclipse Workspace(工作空間)” 就是 “IDEA Project(專案)”“Eclipse Project(專案)” 就是 “IDEA Module(模組)”。每個 Eclipse 工作空間由多個專案組成。每個 IDEA 專案由多個模組組成。如果有 Eclipse 專案檔案,那麼 IDEA 能夠毫無困難地匯入它們,這是入門的最便捷途徑。
通過 File->Project Structure 選單項可進行專案配置工作。還可以通過 Ctrl+Alt+Shift+S 快捷鍵開啟該視窗,我將其稱為“Paw Mash”(掌摑),因為你必須將左手做成熊掌狀並搗擊鍵盤才能夠開啟該視窗。在此,你可以指定原始檔夾、SDK 版本和依賴性關係。如果在下拉選單中未選中任何專案 SDK,或者列表顯示錯誤,可以點選左邊皮膚的 SDK 項並建立一個新的。
圖08. 專案配置
通過點選左邊的 module 條目可以對模組進行配置。此處可將某些資料夾標記為“源”或者“測試”。預設情況下,全新的 IDEA Android 專案沒有 "測試" 資料夾,因此必須新增該資料夾,並在此處將其標記為 Test Sources(測試源)。還可以通過點選中間顯示的 Android 刻面來改變某些 Android 編譯器設定。
圖09. 模組配置
關閉視窗之前還有最後一件事情。如果正在編寫 JUnit 測試,那麼需要將 JUnit 新增到專案依賴關係當中。如果只是通過 @Test 對某個方法進行標註,IDEA 將會提示將 junit.jar 新增到 classpath 當中。問題是 IDEA 將它新增為依賴關係的最後一項,這將導致測試失敗並顯示“java.lang.RuntimeException: Stub!”錯誤。調出該視窗,將 JUnit 提升到依賴關係列表的第一項。或者配置 Ivy/Maven/Whatever 為你自動完成這項操作。
圖10. 模組依賴關係
那是 Project Structure (專案結構)的快速導覽,讓我們前進到 Settings(設定)部分。Settings(設定)指的是與專案編譯無直接關聯的那些選項。包括像程式碼風格、版本控制、外掛等等內容。使用 File->Settings 或者“爪擊”技術點選 Ctrl+Alt+S 開啟 Settings 視窗。我將該快捷方式稱為“爪擊”,是因為必須將左手捏成鷹爪狀並衝擊鍵盤,通常 Settings 視窗會馬上開啟。 當你這麼做時,它會幫助釋放出一個強大的“Ka-KAW”。
這裡有成千上萬的設定項。最近我聽到一個建議:每個 IDE 的使用者都應當花上數個小時四處點選設定頁面,我認為這著實是個好主意。如你知道自己要找什麼卻無法找到,可以在左上的搜尋框中輸入所要查詢的詞彙,設定列表將會動態地展示匹配條目的頁面。比如說,如果你想要顯示 line number(行號),那麼輸入 Line 或者 Line Numbers 然後點選所返回的頁面就行了。在這種情況下,所看到畫面中的高亮部分是由 IDEA 產生的,用於指出對應的設定。
圖11. 設定配置
多數情況下,要進行修改的是預設設定。Showing Line Numbers(顯示行數)在 Editor->Appearance 頁面中。改變 Tab 和 空格的設定的操作必須基於每個檔案型別進行,可通過 Editor -> Code Style 頁面訪問該功能。預設情況下,IDEA 允許將游標移動到某個文字檔案的最後一行之後,可在 Editor 頁面中將該特性關閉。版本控制是必須很好地進行配置的內容,該配置必須在 Version Control 頁面進行。IDEA 中的 GitHub integration(GitHub 整合) 是一流的,但是前提是必須有 Git 支援,稍後我會推薦 BitBucket 來建立免費、私有的 git 主機。一般情況下,我發現自己總是使用 IDE 來進行本地提交操作及管理修改列表,而後通過命令列執行推送。
連結
就寫這麼多了!還有無數途徑可以學習到更多內容,以下是我喜歡的連結:
- 我撰寫的 《IntelliJ IDEA RefCard》
- 還是我撰寫的 IDEA 快捷鍵牆紙
- JetBrains 的 《為 Eclipse 使用者準備的 IDEA 問答》
- 我撰寫的 《從 Eclipse 轉到 IDEA 的 10 條提示》
- 我所有的 IDEA 相關博文
- Canoo 所有的 IDEA 相關博文
- 我在 JetBrains.tv 放置的其它視訊
- IDEA 鍵盤貼紙,方便學習快捷鍵
- 最後,還可以試下 閱讀手冊
和通常一樣,請隨意通過留言方式保持聯絡。可以從我的部落格站點 http://hamletdarcy.blogspot.com/ 閱讀更多內容,從 我的 YouTube 頻道 檢視更多視訊,還可以在 Twitter: @HamletDRC 對我進行關注。
原文連結:Android and IDEA for the Eclipse Refugee
本文參與iTran樂譯專案。
相關文章
- (翻譯)2016美國數學建模MCM F題(政策)翻譯:難民移民政策建模
- [譯] 為 JavaScript 程式設計師準備的 Flutter 指南JavaScript程式設計師Flutter
- IntelliJ IDEA 概要 [翻譯](IntelliJ IDEA Essentials)IntelliJIdea
- 翻譯的未來:翻譯機器和譯後編譯編譯
- [轉載]2016美國數學建模MCM F題(政策)翻譯:難民移入政策建模
- 20個為前端開發者準備的文件和指南前端
- 為何IntelliJ IDEA比Eclipse更好IntelliJIdeaEclipse
- 20個為前端開發者準備的文件和指南(6)前端
- 20個為前端開發者準備的文件和指南(7)前端
- 20個為前端開發者準備的文件和指南(8)前端
- 20個為前端開發者準備的文件和指南(1)前端
- 20個為前端開發者準備的文件和指南(5)前端
- 20個為前端開發者準備的文件和指南(2)前端
- 20個為前端開發者準備的文件和指南(3)前端
- 20個為前端開發者準備的文件和指南(4)前端
- 英文翻譯之女友太漂亮,感情難持久
- Android 布 局 翻 譯 器Android
- Android Dialog 翻譯文件Android
- 今天雜事少了些,翻譯進度也增長不少,準備開始放假~
- 淺談英漢翻譯:簡單到了極致反而難上加難
- 化繁為簡的翻譯機——直譯器模式模式
- 為敏捷團隊準備的Lisp敏捷Lisp
- 大資料翻頁的難點和技巧大資料
- 【IDEA&&Eclipse】1、為何 IntelliJ IDEA 比 Eclipse 更適合於專業java開發者IdeaEclipseIntelliJJava
- 給Android開發者的Flutter指南 (下) [翻譯]AndroidFlutter
- 給Android開發者的Flutter指南 (上) [翻譯]AndroidFlutter
- VR為難民發聲,傳遞人道主義精神VR
- 為WebSphere sMash做好準備Web
- Yurii談翻譯(十一)怎樣翻譯更地道:and不是“和”
- Android面試準備(中高階)Android面試
- [譯] Kotlin 標準方法備忘Kotlin
- Yurii談翻譯(五)怎樣翻譯更地道:so…that…的翻譯
- 為Apache Spark準備的深度學習ApacheSpark深度學習
- [翻譯]javax.cache: Java快取新標準Java快取
- Yurii談翻譯(九)怎樣翻譯更地道:冠詞a的翻譯
- Yurii談翻譯(十)怎樣翻譯更地道:最高階的翻譯
- Kotlin(android)協程中文翻譯KotlinAndroid
- Kerberos的元件和術語(翻譯和註解)ROS元件