擁抱Android Studio:從Eclipse到Android Studio的完美遷徙
原文地址 http://www.csdn.net/article/2015-12-17/2826507
擁抱變化,擁抱新事物
多年前央視有一套電視系列片: 大國崛起,主要講述那些曾經在站在世界舞臺中央的國家的興衰歷程。縱觀歷史,正是創新使得一個國家得以崛起。
Android 開發因為涉及到代碼編輯、UI 布局、打包等工序,最好使用一款 IDE。Google 最早提供了基于 Eclipse 的 ADT 作為開發工具,后于2013年 Google I/O 大會發布基于 IntelliJ IDEA 開發Android Studio。后者正式版發布之后,Google 宣布不再持續支持 ADT。Android Studio 有更快的速度,更好的代碼完成等特性。
時至今日,在我們研發 App 測試服務—— BugTags 的時候,在幫助用戶集成 Android SDK 的過程中,我們發現很多遺留項目依舊沒有從 ADT 遷移過來,依然有很多用戶對 Android Studio 懷著恐懼與不信任。我想我們有義務去做一個系列介紹,讓更多的人擁抱變化,擁抱新鮮事物。
本文系列一,主要介紹兩個工具的比較及其遷移。
Android Studio(IntelliJ IDEA)vs. ADT(Eclipse)
本文并不打算涉及 IDE 的圣戰,理論上只要配上插件,用得趁手,都差不多。然而本文也是帶有傾向性的,因為工作原因,筆者使用過 Eclipse 多年,也使用過多款 JetBrains 的 IDE,均不辱 XXX 語言開發第一 IDE 之名。下面介紹一些 Android Studio 的優勝的地方。
- 更快的運行速度;
- 更智能的自動補全;
你不用自動補全?那其實你 ADT 也不需要的, vi 或者一個記事本就足夠了;
- 更好的重構,IDEA 會幫你找到每一個需要重構的地方;
- 更好的索引與搜索,雙擊 shift 鍵搜索,文件搜索,代碼搜索,都很方便;
- 更好的版本管理功能(git/SVN);
- 更靈活強大集成腳本 gradle;
- 原生支持的從項目文件到操作系統的文件瀏覽器功能;
ADT 可以通過插件支持?問題來了,我為啥要去花寶貴的時間折騰這個插件呢;
- ……
以上省略一萬字。
相信我,對于 Android 開發者,切換到 Android Studio,經過短短學習曲線之后,你會愛上這個 IDE,并且即將由奢入儉難,再也回不去了。
從 ADT 遷移到 Android Studio
如果你看到上面的優點,已經克服了心中的懷疑和恐懼,準備動手遷移,下面提供一些遷移提示。
常用網站
部分需要KX上網
你無法KX上網?趕緊搜一下,自己搭或者買一個吧。世界如此多嬌,人生苦短。將你遇到過問題的出錯信息用 Google 搜索,第一條來自 stackoverflow 的答案就是你想要的。
- Android Studio 下載頁
- Android Studio:Android Developer 上 Android Studio 的介紹
- Android Tools:Android 工具首頁,有大量的深度的技術文檔
- Android Build Sytem:基于 gradle 的 Android 構建系統,最為關鍵的一篇文章
- 從 ADT 遷移指南:官方提供的遷移手冊
- Android Studio 國內下載渠道:良心網站,你懂的,但是筆者不對 Xcode Ghost之類的事情負責
ADT 與 Android Studio 目錄結構對比
ADT 項目結構
project/src/:放置代碼文件
project/libs:放置 .jar 庫或者 .so 庫
project/res:項目資源文件
project/AndroidManifest.xml:工程 manifest 文件
Android Studio 項目結構
Android Studio 的一個 project (項目)下可以包含多個獨立的 module(模塊),圖中 Bugtags-Android-Demo 便是一個項目,app 便是一個 module。結構如下。
project/build.gradle:項目的 build.gradle 文件,主要是全局的遠程庫配置、gradle 插件版本等信息
project/app:名字為 app 的模塊
project/build.gradle:模塊的 build.gradle 文件,是最關鍵的配置文件,后續會有文章繼續專門介紹 gradle build system
project/app/src:源碼文件夾
project/app/src/java:放置代碼文件
project/app/src/jniLibs:默認的.so 庫放置的位置,可以在模塊的 build.gradle 中通過jniLibs.srcDirs 值來修改所在位置
project/app/libs:放置 .jar 庫
從 ADT 遷移
本文主要參考這篇 遷移指南。Android Studio 提供了非常友好的導入向導。
在 Android Studio 導入
File->New->Import Project,找到你的 ADT 的 workspace 下的項目,一路點擊 YES,會生成一個全新的項目。
問題
- 項目之間有依賴
直接導入使用依賴的項目,被依賴的項目就會自動被導入到同一個項目中,作為一個模塊。
下文中的左側是 ADT 項目,右側是 Android Studio 項目。
其中 Bugtags-Android-Eclipse-Demo 使用 Bugtags-Android-Eclipse-Lib 作為依賴。
- 停留在界面上不動
這個狀態是 gradle 構建腳本嘗試去下載 gradle 的 wrapper,這個 wrapper 大概 3M, 需要KX上網,早期很多人就是在這個頁面卡住,放棄了 Android Studio。確保你已經KX上網,并且耐心等待,又或者點擊取消,先進項目看看。
Android Studio 的幾個關鍵概念
如果上面沒有問題,你已經能夠正常的看到 Android Studio 的項目工程了。
IDE 使用、快捷鍵什么的,筆者認為沒什么可寫的。自己熟悉吧。下面介紹一個對于 ADT 而言全新的概念。
build.gradle
在項目的 build.gradle 文件中,有如下內容:
// Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { repositories { jcenter()//這是構建插件所使用的遠程庫,后續會有一篇介紹庫的含義 } dependencies { classpath 'com.android.tools.build:gradle:2.0.0-alpha1'//這是項目所使用的 Android gradle 版本 } } allprojects { repositories { jcenter()//這是使用遠程庫依賴的時候,的遠程庫 } }
在每個模塊的 build.gradle 文件中,初始會有如下內容:
apply plugin: 'com.android.library' //com.android.library標示是一個庫模塊; //com.android.application標示這是一個應用模塊 android { compileSdkVersion 19//編譯 sdk 版本 buildToolsVersion "23.0.2"http://構建工具版本 defaultConfig { minSdkVersion 9 targetSdkVersion 19 } buildTypes {//打包類型 release { minifyEnabled false//是否混淆 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' } } } dependencies {//依賴管理 compile 'com.bugtags.library:bugtags-lib:1.0.8'//遠程 compile fileTree(dir: 'libs', include: ['*.jar'])//本地 jar 依賴 }
依賴管理
遠程依賴:
dependencies { compile 'com.bugtags.library:bugtags-lib:1.0.8' }
Android Studio 使用 gradle 進行依賴管理,兼容了 maven 的庫,一個經典的 maven 庫的配置如下:
<dependency> <groupId>com.bugtags.library</groupId> <artifactId>bugtags-lib</artifactId> <version>1.0.8</version> </dependency>
對比之后,你會發現 compile 的內容中,分為三部分 groupdId:artifactId:version
com.bugtags.library對應groupId
bugtags-lib對應 artifactId
1.0.8對應 version
本地依賴
dependencies { compile fileTree(dir: 'libs', include: ['*.jar'])//本地 jar 依賴 }
Android Studio 工程創建的時候,默認會有如上依賴,意義是把放在與該 build.gradle 文件同一層的 libs 文件夾中所有的 jar 文件都作為庫依賴。
同步依賴
一般情況下,你配置完了build.gradle 之后,該編輯框的上方會出現正在 sync 的標記。耐心等待完成即可。如果發現沒有同步成功,可以使用下面這個按鈕:
如果長時間未成功,則可以在控制臺使用:bash./gradlew build --info
以上命令來看控制臺輸出。
build variant
Android Studio 內置了多渠打包功能,就是所謂的 build variant,可以新建若干個 productflavor 來達到目的。 大致可以這樣:
這個功能十分的靈活和強大,舉個例子,你想要有兩個版本,一個收費版,一個免費版,在若干代碼文件和資源文件上,都不大一樣。
以前你可能選擇在代碼中判斷當前版本,加載不同的代碼和資源。或者使用 git 的 branch。
現在你可以使用 Android Studio 直接使用多個 productflavor, 在對應的 flavor 放置那些有區別的代碼和文件。一次打包,即可完成。 在下一篇系列文章中,筆者將會詳細介紹這個功能。
總結
新版本的 Android Studio 還有更多強大的功能,包括最新 preview 的 instant build,將會極大提升構建速度。后文將會詳細介紹。
一個工程從 ADT 遷移到 Android Studio 只需要很短的時間,連帶熟悉基本概念,半天基本可以完成。如果還沒有進行遷移的同學,要抓緊了,不要被世界拋棄了。
筆者 kvh先在這里挖一個系列坑,希望這個系列能夠讓讀者快速掌握 Android Studio 與 gradle,請持續關注。