1. 程式人生 > >AndroidStudio開發必備常識之Gradle構建

AndroidStudio開發必備常識之Gradle構建

  • 1、Android Studio是Google開發的一款面向Android開發者的IDE, 支援Windows、Mac、Linux等作業系統,基於流行的Java語言整合開發環境IntelliJ搭建而成。但是Android Studio 1.0推出後,Google官方將逐步放棄對原來主要的Eclipse ADT的支援,併為Eclipse使用者提供了工程遷移的解 決辦法。不過相信作為Developer的你上手AS 1.0以後你再也不願意使用原來苦逼的Eclipse+ADT了,你會被AS的各種強大所吸引。現在已經是AndroidStudio2.0穩定版本。現在85%以上的網際網路公司都是的是AS,所以學好AS是多麼的重要 。
  • 2、學號AS的前提就是知道了解把握明白gradle是作什麼的? 首先gradle是一個構建工具、gradle是以Groovy語言為基礎的gradle主要面向的是Java語言。
  • 3、gradle詳細介紹以及一些用法:
  • 3.1、通過gradle配置第三方jar包:我們看到,每個module都有一個build.gradle檔案,它其實是對應module的配置檔案。關build.gradle檔案中具體內容的含義,我們將在最後一段進行講解。
    我們先來看一下名為app的這個module,它的build.gradle對應的圖形介面其實是下面這個Project Stucture:

這裡寫圖片描述

切換到dependencies標籤下,如下圖所示:

這裡寫圖片描述

上圖中,點選新增,然後選擇”Library dependency”,彈出如下介面:

這裡寫圖片描述

我們在搜尋框中輸入“gson”,然後確定,就彈出了箭頭處的我們需要的jar包,新增它即可:

這裡寫圖片描述

之後我們會發現,app這個module的build.gradle中多了一行程式碼,表示引入了gson.jar:

這裡寫圖片描述

其實,如果你能記得住上方這行程式碼,直接寫出程式碼來也是可以匯入的。

此時,gson這個jar包不再是出現在libs這個資料夾下了,而是出現在最下方的External Libraries中,如下圖所示:(而且是最新版本哦)

這裡寫圖片描述

  • 3.2、gradle匯入jar包的特點:(和libs資料夾匯入jar包的區別)
    gradle匯入jar包更方便,一行程式碼即可搞定。不像後者那樣還要自己去官方下載。如果官方將jar包更新了,我們只需要在build.gradle中改一下版本號就行了,不用重新去官網下載。

  • 3.3、通過gradle匯入的jar包是從哪裡來的:需要注意的是:不是所有的jar包都是可以通過gradle來匯入的。那通過gradle匯入的jar包是從哪裡來的呢?解釋如下:我們發現HelloWorld這個project的目錄下有一個build.gradle檔案,開啟它:

這裡寫圖片描述

上圖中第17行的”jcenter()”的意思是,所有通過gradle匯入的jar包都是從http://bintray.com/bintray/jcenter這個中央倉庫上扒下來的。如果你需要的jar包在這個網站上沒有,那就無法通過gradle的方式來匯入哦。

  • 3.4、簽名打包的兩種方式:
    注:給我們自己開發的app簽名,就代表著我自己的版權,以後要進行升級,也必須要使用相同的簽名才行。簽名就代表著自己的身份(即keystore),多個app可以使用同一個簽名。如果不知道簽名是啥意思,請自行百度哦。在eclipse中籤名的方法是:選中工程,郵件選擇”export-android-export android application”
    1、方式1:通過Android Studio進行簽名:
    選中app這個module,選擇選單欄”Build-Generate signed apk”:

這裡寫圖片描述

彈出如下介面:

這裡寫圖片描述

上圖中,如果你是第一次使用簽名,就單擊紅框部分建立一個新的簽名;如果你之前有過簽名的檔案,就選擇藍框部分進行匯入即可。那我就先選擇紅框部分吧:

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

上圖中,點選”finish”之後,可以看到Android Studio的最下方顯示:Gradle正在執行assembleRelease這樣一個任務,如下圖所示:

這裡寫圖片描述

生成簽名好的apk之後,會彈出提示:

這裡寫圖片描述

這裡寫圖片描述

2、方式2:通過命令列的方式進行簽名:
(1)載入Key Store:我們先刪掉上面的通過第一種方式所簽名的apk檔案。接下來進行第二種方式來簽名,即命令列的方式。
開啟Project Stucture圖形化介面:

這裡寫圖片描述

上圖中,選中app這個module,然後切換到singning標籤欄,緊接著點選新增,然後生成release簽名信息,緊接著點選”OK”。接著做如下操作:

這裡寫圖片描述

上圖中,切換到Build Types標籤,將Signing config選擇為”release”,即將剛剛生成的release簽名信息配置進去。

操作完成之後,我們可以看到app這個module的build.gradle檔案多出瞭如下紅框部分的程式碼:

這裡寫圖片描述

然後執行選單欄的”build-clean Project”:

這裡寫圖片描述

(2)生成realease版本的apk:

緊接著在命令列Terminal輸入如下命令:(AS已經將命令列Terminal整合到了軟體當中)gradlew assembleRelease如果執行成功,效果如下:

這裡寫圖片描述

生成的簽名好的apk在如下位置:

這裡寫圖片描述

3、為什麼要使用gradlew命令而不是gradle命令:
在HelloWorld工程目錄下有一個gradle資料夾,在gradle/wrapper目錄下有一個gradle-wrapper.properties檔案,開啟它:

這裡寫圖片描述

上圖代表著HelloWorld這個工程所依賴的gradle的版本資訊。上圖的紅線表示,如果我們的工程中沒有gradle,軟體會根據這個url去下載gradle,終於知道為啥第一次開啟AS時會這麼慢了吧?如果我們執行了gradlew命令,實際上是執行上面的gradle wrapper,然後找到我們已經下載好的gradle 2.2.1。如果現在有很多個工程,但是每個工程的gradle版本都不一樣,我就必須要將每個版本的gradle都要配置到環境變數當中,而執行了gradlew命令,就會避免這個麻煩。

  • 4、BuildConfig檔案:BuildConfig是IDE自動生成的一個類,在elipse中即存放在gen目錄下(如R檔案)。而在Adroid Studio中,BuildConfig檔案存放的位置是:app/build/generated/source/buildconfig/dubug//BuildConfig.java中。如下圖所示:

這裡寫圖片描述

  • 5、module中build.gradle檔案引數含義:主要是module的build.gradle,截圖如下:

這裡寫圖片描述

01行:apply plugin: ‘com.android.application’ 表示該module是這個應用程式的module

15行:applicationId “com.smyhvae.helloworld” 應用程式的包名

16、17行:向下相容的最小版本、編譯版本。 注:在app/src/main/AndroidManifest.xml中不再出現這個資訊了。

23行:需不需要利用24行的proguard檔案來混淆程式碼。在release狀態下,最好改為true。

  • 6、到此為止AS的基本情況相信你已經有個大致瞭解了。具體比Eclipse的優勢體現在如下幾點:

**a、AS是Google專門為Android基於IntelliJ IDEA打造的利器。親生的永遠是最好的,只是現在還在成長中而已。
b、AS在速度上不管哪一個方面都比Eclipse快。
c、Darcula主題UI簡直就是極客範,帥爆了。
d、強大的智慧提示補全功能在寫程式碼時簡直比Eclipse高效率N倍。
e、智慧儲存,不需要Ctrl + S。效率會大大提升。
f、整合Gradle構建工具,Gradle集合了Ant和Maven的優點,不管是配置、編譯、打包都非常牛逼。
g、UI編輯器簡直比Eclipse高效N倍,自帶了多裝置的實時預覽,簡直是神器。多語言適配點選地球直接輸入,再也不用比較那個string沒有翻譯了。
h、內建終端直接替代cmd命令列,一個IDE全部搞定。
i、完善的外掛系統,如Git、Markdown、Gradle等,直接搜尋下載。
j、版本控制系統,安裝的時候就自帶GitHub, Git, SVN等流行的版本控制系統,可以直接check out你的專案,邊寫程式碼邊右鍵可以直接具備BCompare功能與其他版本進行對比修改。**

  • 7、注意記住的地方:
  • Android Studio目錄結構:
.idea://AS生成的工程配置檔案,類似Eclipse的project.properties。
app://AS建立工程中的一個Module。
gradle://構建工具系統的jar和wrapper等,jar告訴了AS如何與系統安裝的gradle構建聯絡。
External Libraries://不是一個資料夾,只是依賴lib檔案,如SDK等。

新建工程專案後AS的Module目錄結構如下所示:

build://構建目錄,相當於Eclipse中預設Java工程的bin目錄,滑鼠放在上面右鍵Show in Exploer即可開啟資料夾,
        編譯生成的apk也在這個目錄的outs子目錄,不過在AS的工程裡是預設不顯示out目錄的,就算有編譯結果也不顯示,右鍵開啟通過資料夾直接可以看。
libs://依賴包,包含jar包和jni等包。
src://原始碼,相當於eclipse的工程。
main://主資料夾 
java://Java程式碼,包含工程和新建是預設產生的Test工程原始碼。 
res://資原始檔,類似Eclipse。
layout://App佈局及介面元素配置,雷同Eclipse。
menu://App選單配置,雷同Eclipse。 
values://雷同Eclipse。
dimens.xml//定義css的配置檔案。 
strings.xml//定義字串的配置檔案。 
styles.xml//定義style的配置檔案。
......//arrays等其他檔案。
......//assets等目錄
AndroidManifest.xml//App基本資訊(Android管理檔案) 
ic_launcher-web.png://App圖示 
build.gradle://Module的Gradle構建指令碼
  • 8、Android Studio構建系統基礎
  • 專案建立成功後會自動下載Gradle,這個過程特別慢,建議翻牆。下載的Gradle在Windows平臺會預設在 C:\Documents and Settings<使用者名稱>\ .gradle\wrapper\dists目錄,這個目錄下有個gradle-x.xx-all的資料夾,。也可以自己手動到Gradle官網下載對應的版本,然後將下載的.zip檔案 (也可以解壓)複製到上述的gradle-x.xx-all 資料夾下。每一個Module都需要有一個gradle配置檔案,語法都是一樣,唯一不同的是開頭宣告的是apply plugin。注意區分不同位置的build.gradle檔案。
    AS的工程根目錄下的build.gradle檔案:
buildscript {       //設定指令碼的執行環境
    repositories {  //支援java依賴庫管理(maven/ivy等),用於專案的依賴
        //mavenCentral()    //僅僅是不同的網路倉庫而已
        jcenter()           //推薦使用這個倉庫
    }
    //依賴包的定義。支援maven/ivy、遠端、本地庫、單檔案,前面定義了repositories{}jcenter庫,使用jcenter的依賴只需要按照
    //類似於com.android.tools.build:gradle:1.0.0-rc2,gradle就會自動的往遠端庫下載相應的依賴。
    dependencies {  
        classpath 'com.android.tools.build:gradle:1.0.0-rc2'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}
//多專案的集中配置,多數構建工具,對於子專案的配置,都是基於繼承的方式。Gradle除了提供繼承方式設定子專案,還提供這種配置
allprojects {
    repositories {
        jcenter()
    }
}

AS的工程根目錄下的settings.gradle檔案:

include ':app'      //module
include ':my_lib'   //module(build as lib)

AS的工程根目錄下的Module的build.gradle檔案(此處以一個簡單的Lib module的gradle為例):

//plugin在AS裡取值一般為'com.android.library'或者'com.android.application'
apply plugin: 'com.android.library' //構建為lib

android {
    compileSdkVersion 17            //編譯需要SDK版本
    buildToolsVersion "19.1.0"      //SDK Manager確定本地安裝該版本才可以

    defaultConfig {
        minSdkVersion 8         //最小版本
        targetSdkVersion 17     //目標版本
    }

    buildTypes {                //編譯項
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
    }
}

dependencies {                  //依賴支援
    compile 'com.android.support:support-v4:18.+'
}

Gradle打包APP簽名:
預設情況下,debug被配置成使用一個debug keystory。debug keystory使用了預設的密碼和預設key及預設的key密碼。debug構建型別會自動使用debug簽名配置。 在你的Module的build.gradle檔案中新增:

android {
    ......
    signingConfigs {
       myConfig{
         storeFile file("yanbober.keystore")
            storePassword "gradle"
            keyAlias "gradle"
            keyPassword "gradle"
        }
    }

   buildTypes{
     release {
        runProguard true
        zipAlignEnabled true
        // 移除無用的resource檔案
        shrinkResources true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

        signingConfig  signingConfigs.myConfig
     } 
   }
}

雖然經常使用專案根目錄的相對路徑作為keystore的路徑,但是也可以使用絕對路徑,儘管這並不推薦(除了自動創建出來的debug keystore)。 執行gradle clean gradle build即可生成簽名混淆對齊的app。