Gradle for Android 第一篇( 從 Gradle 和 AS 開始 )

這一系列暫不更新,相關技術討論,請移步微信羣,謝謝,但願你們多多支持!java

圖片描述

正如你們所見,這是本英文書,而因爲國內的gradle翻譯資料不全,因此特次開闢專欄,翻譯gradle for android這本書,同時添加本身的心得體會以及在實際工做上的實戰,但願你們可以喜歡。android

這會是一個系列,因此若是你看完這篇文章,請看下列文章:shell

Gradle for Android 第二篇( Build.gradle入門 )segmentfault

Gradle for Android 第三篇( 依賴管理 )windows

Gradle for Android 第四篇( 構建變體 )瀏覽器

Gradle for Android 第五篇( 多模塊構建 )微信

Gradle for Android 第六篇( 測試)app

Gradle for Android 第七篇( Groovy入門 )eclipse

圖片描述

若是你是名Android開發新手,或者是名從eclipse切換到Android studio的新手,那麼我強烈建議您follow個人文章,正如封面所見,利用gradle構建工具來自動構建你的Android項目。廢話很少說,咱們直接開始吧。jvm

今天主要介紹Android studio工具的使用,以及cradle基礎入門,使用cradle wrapper和如何從eclipse遷移到Android studio。

這篇文章記於2015.12.30,Android studio正式版本已經開發到1.5,而預覽版已經到了2.0,因此轉到Android studio吧。

當你第一次打開Android studio的時候,有一個視圖顯示你即將建立的環境以及確保你使用了最新的Android SDK和必要的google依賴包,同時會讓你選擇是否建立AVD,這樣你就可使用模擬器了。在這兒多說幾句:

  1. 儘可能使用Android studio 2.0,由於它真的變快了,而其模擬器的速度也提高了很多,我使用至今,也無發現任何bug,因此徹底不用擔憂。

  2. 若是使用模擬器開發Android,儘可能使用Genymotion模擬器,儘管其如今的Android6.0仍然有不少bug,可是在其如下版本,其速度仍是很是快的,利用模擬器開發,爲虛擬機安裝文件夾瀏覽器,是及時查看SQLite表文件利器,具體操做辦法,能夠google。

  3. 儘可能使用最新的23.0.0以上的構建版本。

理解基本的Gradle

若是你想建立一個Android project基於gradle,那麼你必須寫一個構建腳本,這個文件一般稱之爲build.grade,你可能已經覺察到了,當咱們查看這一腳本,gradle會爲咱們提供不少默認的配置以及一般的默認值,而這極大的簡化了咱們的工做,例如ant和maven,使用他們的時候,咱們須要編寫大量的配置文件,而這很噁心。而gradle得默認配置,若是你須要使用本身的配置,徹底能夠簡單的去重寫他們就好。

Gradle腳本不是像傳統的xml文件那樣,而是一種基於Groovy的動態DSL,而Groovy語言是一種基於jvm的動態語言。

你徹底不用擔憂,你在使用gradle的時候,還須要去學習Groovy語言,該語言很容易閱讀,而且若是你已經學習過java的話,學習Groovy將不會是難事,若是你想開始建立本身的tasks和插件,那麼你最好對Groovy有一個較深的理解,然而因爲其基於jvm,因此你徹底可能經過純正的java代碼或者其餘任何基於jvm的語言去開發你本身的插件,關於插件開發,咱們後續將會有相關介紹。

Project和tasks

在grade中的兩大重要的概念,分別是project和tasks。每一次構建都是有至少一個project來完成,因此Android studio中的project和Gradle中的project不是一個概念。每一個project有至少一個tasks。每個build.grade文件表明着一個project。tasks在build.gradle中定義。當初始化構建進程,gradle會基於build文件,集合全部的project和tasks,一個tasks包含了一系列動做,而後它們將會按照順序執行,一個動做就是一段被執行的代碼,很像Java中的方法。

構建的生命週期

一旦一個tasks被執行,那麼它不會再次執行了,不包含依賴的Tasks老是優先執行,一次構建將會經歷下列三個階段:

  1. 初始化階段:project實例在這兒建立,若是有多個模塊,即有多個build.gradle文件,多個project將會被建立。

  2. 配置階段:在該階段,build.gradle腳本將會執行,爲每一個project建立和配置全部的tasks。

  3. 執行階段:這一階段,gradle會決定哪個tasks會被執行,哪個tasks會被執行徹底依賴開始構建時傳入的參數和當前所在的文件夾位置有關。

build.gradle的配置文件

基於grade構建的項目一般至少有一個build.gradle,那麼咱們來看看Android的build.gradle:

buildscript {
   repositories {
        jcenter()
   }
   dependencies {
       classpath 'com.android.tools.build:gradle:1.2.3'
 } 
}

這個就是實際構建開始的地方,在倉庫地址中,咱們使用了JCenter,JCenter相似maven庫,不須要任何額外的配置,grade還支持其餘幾個倉庫,不管是遠程仍是本地倉庫。

構建腳本也定義了一個Android構建工具,這個就是Android plugin的來源之處。Android plugin提供了全部須要去構建和測試的應用。每一個Android應用都須要這麼一個插件:

apply plugin: 'com.android.application'

插件用於擴展gradle腳本的能力,在一個項目中使用插件,這樣該項目的構建腳本就能夠定義該插件定義好的屬性和使用它的tasks。

注意:當你在開發一個依賴庫,那麼你應該使用'com.android.library',而且你不能同時使用他們2個,這將致使構建失敗,一個模塊要麼使用Android application或者Android library插件,而不是兩者。

當使用Android 插件的時候,Android標籤將能夠被使用,以下所示:

android {
       compileSdkVersion 22
       buildToolsVersion "22.0.1"
}

更多的屬性咱們將在第二章中進行討論。

項目結構

和eclipse對比來看,Android studio構建的結構有很大的不一樣:

MyApp
   ├── build.gradle
   ├── settings.gradle
   └── app
       ├── build.gradle
       ├── build
       ├── libs
       └── src
           └── main
               ├── java
               │   └── com.package.myapp
               └── res
                   ├── drawable
                   ├── layout
                   └── etc.

grade項目一般在根文件夾中包含一個build.gradle,使用的代碼在app這個文件夾中,這個文件夾也可使用其餘名字,而沒必要要定義爲app,例如當你利用Android studio建立一個project針對一個手機應用和一個Android wear應用的時候,模塊將被默認叫作application和wearable。

gradle使用了一個叫作source set的概念,官方解釋:一個source set就是一系列資源文件,其將會被編譯和執行。對於Android項目,main就是一個source set,其包含了全部的資源代碼。當你開始編寫測試用例的時候,你通常會把代碼放在一個單獨的source set,叫作androidTest,這個文件夾只包含測試。

開始使用Gradle Wrapper

grade只是一個構建工具,而新版本老是在更迭,因此使用Gradle Wrapper將會是一個好的選擇去避免因爲gradle版本更新致使的問題。Gradle Wrapper提供了一個windows的batch文件和其餘系統的shell文件,當你使用這些腳本的時候,當前gradle版本將會被下載,而且會被自動用在項目的構建,因此每一個開發者在構建本身app的時候只須要使用Wrapper。因此開發者不須要爲你的電腦安裝任何gradle版本,在mac上你只須要運行gradlew,而在windows上你只須要運行gradlew.bat。

你也能夠利用命令行./gradlew -v來查看當前gradle版本。下列是wrapper的文件夾:

myapp/
   ├── gradlew
   ├── gradlew.bat
   └── gradle/wrapper/
       ├── gradle-wrapper.jar
       └── gradle-wrapper.properties

能夠看到一個bat文件針對windows系統,一個shell腳本針對mac系統,一個jar文件,一個配置文件。配置文件包含如下信息:

#Sat May 30 17:41:49 CEST 2015
   distributionBase=GRADLE_USER_HOME
   distributionPath=wrapper/dists
   zipStoreBase=GRADLE_USER_HOME
   zipStorePath=wrapper/dists
   distributionUrl=https\://services.gradle.org/distributions/
   gradle-2.4-all.zip

你能夠改變該url來改變你的gradle版本。

使用基本的構建命令

使用你的命令行,導航到你的項目,而後輸入:

$ gradlew tasks

這一命令將會列出因此可運行的tasks,你也能夠添加--all參數,來查看全部的task。
當你在開發的時候,構建項目,你須要運行assemble task經過debug配置:

$ gradlew assembleDebug

該任務將會建立一個debug版本的app,同時Android插件會將其保存在MyApp/app/build/ outputs/apk目錄下。

除了assemble,還有三個基本的命令:

  • check 運行因此的checks,這意味着運行全部的tests在已連的設備或模擬器上。

  • build 是check和assemble的集合體。

  • clean 清楚項目的output文件。

保持舊的eclipse文件結構

關於如何將eclipse項目導入Android studio本文再也不介紹。

android {
     sourceSets {
       main {
         manifest.srcFile 'AndroidManifest.xml'
         java.srcDirs = ['src']
         resources.srcDirs = ['src']
         aidl.srcDirs = ['src']
         renderscript.srcDirs = ['src']
         res.srcDirs = ['res']
         assets.srcDirs = ['assets']
    }
     androidTest.setRoot('tests')
    } 
}

在grade文件中配置,將會保存eclipse目錄結構,固然,若是你有任何依賴的jar包,你須要告訴gradle它在哪兒,假設jar包會在一個叫作libs的文件夾內,那麼你應該這麼配置:

dependencies {
       compile fileTree(dir: 'libs', include: ['*.jar'])
}

該行意爲:將libs文件夾中全部的jar文件視爲依賴包。

總結

經過本文,咱們能夠學習到gradle的優點,以及爲何要使用gradle,咱們簡單的看了看Android studio,以及其是如何幫助咱們生成build文件。

同時咱們學習了Gradle Wrapper,其讓咱們維護以及分享項目變得更加簡單,咱們知道了如何建立一個新的項目在Android studio中,以及如何從eclispe遷移到Android studio而且保持目錄結構。

同時咱們學習了最基本的gradle task和命令行命令。在下一篇文章中,咱們將會定製本身的build文件。

相關文章
相關標籤/搜索