以Android Studio講解Gradle在Android項目中的應用(一)

本文名詞:

Gradle/Android/Android Studio/android gradle plugin
在本文中AS代表Android Studio,gradle插件代表android gradle plugin。

本文目錄:

  1. 什麼是Gradle?
  2. Gradle的功能
  3. gradle與android studio的關係
  4. android項目中的gradle文件
  5. 擴展-不借助IDE使用gradle

什麼是Gradle?

Gradle是一個基於JVM的項目自動化構建開源工具,它使用一種基於Groovy的特定領域語言(DSL)來聲明項目設置,面向Java應用爲主。
什麼是構建工具?
構建工具是一個把源代碼(java)生成可執行應用程序(apk)的過程自動化的程序。構建包括編譯、連接跟把代碼打包成可用的或可執行的形式。
爲什麼要使用構建工具或構建自動化
將源代碼生成應用程序的大致過程如下:

  • 下載依賴包
  • 將源代碼編譯成二進制代碼
  • 打包生成的二進制代碼
  • 進行單元測試
  • 部署到系統

此過程手動操作相當繁瑣,而且在編寫源碼的過程中,經常會需要將源代碼生成可執行文件並安裝在系統中,進行調試,在小型項目中,可以手動調用構建過程,但是在大型的項目中很不實用,在構建過程中難以跟蹤什麼需要被構建、按照什麼順序構建以及項目中存在哪些依賴。使用自動化工具會使構建過程更爲連續,而且可以讓開發人員更專注於項目的開發。

Gradle的功能

上面我們瞭解了Gradle是將源代碼生成可執行文件的工具,但是Gradle具體功能分爲哪些呢?這些功能在此過程中起的作用?
Gradle的具體功能分爲以下幾種:

  • 依賴管理

在項目開發中,經常會依賴第三方庫,使用第三方庫的步驟是先下載jar文件,然後將jar文件加入到項目的lib中,然後項目纔可以使用,但是一旦jar文件更新,就需要重新下載新的jar包,重新替換,項目依賴的jar包多的時候,此工作量也很麻煩,可以說這種方式只有依賴,沒有管理。
Gradle 引用第三方庫方式是這樣的:
compile ‘com.android.support:support-v4:24.0.1’
類似這樣的依賴方式,是不是很方便?而且很直觀,直接可以看到源地址,升級的話直接改下版本號就可以了,這就是所謂的依賴管理,此依賴管理只限於google開發的jar包

  • 編譯

將java源代碼或資源編譯爲.class文件的過程。

  • 打包

將.class文件打包爲一個apk文件的過程。

  • 簽名

android系統及應用商店特性,在android系統中運行apk或在android應用商店發佈apk,需要對apk進行簽名。

  • 運行

用戶使用apk的過程,包含類的加載,類的執行等,即將apk在目標系統運行的過程。

gradle和android studio的關係

gradle是由Gradle公司開發的,android studio是由google開發的集成開發工具,主要用於android項目的開發和調試,支持gradle構建工具,gradle公司專門開發了android gradle plugin用於android studio來支持android項目的構建。
在安裝android studio時會安裝當前AS版本支持的最新的gradle和android gradle plugin的版本,默認路徑分別爲:
gradle默認路徑:C:\Users\用戶.gradle\wrapper\dists
android gradle plugin默認路徑:C:\Users\Administrator.gradle\caches\modules-2\files-2.1\com.android.tools.build\gradle

gradle其餘版本可以手動去官網下載,然後解壓至默認路徑即可,android gradle plugin在項目使用時會自動下載,不需要手動下載,但注意電腦需要聯網纔可以自動下載
需要注意的是:gradle是gradle公司開發,有版本號規則,android gradle plugin的版本號是由google定義的,有另外的定義規則,gradle和android gradle plugin版本不是對應的,因此在使用的時候注意版本的對應,另外android gradle plugin版本對應的gradle版本有限制,例如:android gradle plugin 3.5.0+只能對應gradle的5.4.1~5.6.4版本。

android項目中的gradle文件

AS通過gradle構建工具構建android項目,gradle是依據什麼來構建android項目的?
在每個android項目中都有相應的gradle配置文件,gradle通過讀取這些配置文件,對android項目進行構建,每個項目中包含的gradle文件分別有以下幾種:
在這裏插入圖片描述

  • 項目文件夾下的.gradle文件夾
    此文件夾是項目構建項目時生成的臨時文件,可刪除。
  • 項目文件夾下的gradle文件夾
    此文件夾中有一個wrapper文件夾,wrapper文件夾內有一個jar包和gradle-wrapper.properties配置文件,此文件夾的意思是gradle包裝。
    何爲gradle包裝?爲什麼要有gradle包裝?
    gradle wrapper是爲了實現支持多項目,也就是實現每個項目有不同的gradle版本而存在的。
    具體解釋如下:
    默認新建一個項目,然後點擊 AS 上的運行,默認就會直接幫你安裝 Gradle ,我們不需要額外的安裝 Gradle 了,但是其實這個 Gradle 不是真正的 Gradle ,他叫 Gradle Wrapper ,意爲 Gradle 的包裝,什麼意思呢?假設我們本地有多個項目,一個是比較老的項目,還用着 Gradle 1.0 的版本,一個是比較新的項目用了 Gradle 2.0 的版本,但是你兩個項目肯定都想要同時運行的,如果你只裝了 Gradle 1.0 的話那肯定不行,所以爲了解決這個問題,Google 推出了 Gradle Wrapper 的概念,就是他在你每個項目都配置了一個指定版本的 Gradle ,你可以理解爲每個 Android 項目本地都有一個小型的 Gradle ,通過這個每個項目你可以支持用不同的 Gradle 版本來構建項目。
    gradle-wrapper.jar文件是在AS安裝時即存在在安裝路徑中,在安裝文件中的路徑爲D:\Program Files\Android\Android Studio\plugins\android\lib\templates\gradle\wrapper\gradle\wrapper,新建項目時拷貝一份至wrapper文件夾中,所有Android項目中此文件均一樣。
    gradle-wrapper.properties文件中定義了Gradle的路徑以及版本,內容如下:
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip
  • 項目文件夾下的build.gradle

此文件內配置了項目使用的android gradle plugin的插件版本。

dependencies {
    classpath 'com.android.tools.build:gradle:3.5.2'
}
  • 項目文件夾下的setting.gradle

此文件是全局的項目配置文件,裏面主要聲明一些需要加入 gradle 的 module。

include ':app'
rootProject.name='MVPDemo'  //此爲項目名稱
  • 項目文件下的gradlew以及gradlew.bat文件

這兩個文件同項目文件夾下的gradle包裝中的jar文件,都是在新建項目時複製過來的文件,其目錄爲D:\Program Files\Android\Android Studio\plugins\android\lib\templates\gradle\wrapper,gradlew是在linux和mac下使用的,gradlew.bat是在window下使用的,提供在命令行下執行gradle命令的功能。

  • app或各module文件夾下的build文件夾

此文件夾爲項目編譯運行過程中的臨時文件,可刪除,注意:生成的apk文件在此文件夾中。

  • app或各module文件夾下的build.gradle

此文件配置了項目的編譯sdk,目標sdk,最低支持的sdk版本以及項目依賴庫,下面的代碼展示的爲app下的配置文件。

apply plugin: 'com.android.application'

android {
    compileSdkVersion 29
    buildToolsVersion "29.0.2"
    defaultConfig {
        applicationId "com.example.mvpdemo"
        minSdkVersion 19
        targetSdkVersion 29
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}

//dependencies 內容爲項目依賴庫
dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'androidx.appcompat:appcompat:1.1.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test.ext:junit:1.1.1'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}

擴展-不借助IDE使用Gradle

gradle支持android項目,AS或其他IDE不是必須的,可以不借助IDE來構建項目,需要手動編寫gradle配置文件,使用命令行調用gradle命令進行構建,下面簡單介紹幾個常用的gradle命令,此命令針對windows系統,使用以下命令時需要將目錄切換到項目文件夾下方可使用,因爲以下命令是針對項目的。
gradlew -v
使用gradle wrapper命令查詢項目使用的gradle版本號。

gradlew build
檢查依賴並編譯打包,此命令把debug和release環境下的包都打包出來,如果正式發佈只需要release包,可以參照下條命令。

gradlew assembleRelease
編譯並打包release包。

gradlew assembleDebug
編譯並打包debug包。

參考鏈接:
https://zhuanlan.zhihu.com/p/21473540

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章