Gradle常用總結

前言

之前在多版本多渠道打包,還有混淆相關的文章中對gradle相關的內容有一部分的瞭解,但是沒有系統綜合的總結過相關的知識內容,這裏就一些碰到的問題做一下總結!

什麼是Gradle?

Gradle是一個開源的自動化構建工具,被應用在AS中去構建我們的Android項目,代替了之前Eclipse中的ant。首先我們要明確一點,Gradle不是一種語言,它使用的是Groovy語言,關於Groovy,這裏不多說,想要了解的可以查閱一些資料。

Gradle version和Gradle plugin version的區別

好像15年之前,Android Studio都沒怎麼普及,我第一次接觸AS之後,也是被其中的編譯配置搞懵逼了,那時候牆的厲害,各種編譯不過,有的時候前一次編譯過了,後一次就又不過!
Gradle version:對應的是Gradle官方發行的release版本,跟Android Studio半毛錢關係沒有。
具體在gradle-wrapper.properties文件中:

...
distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip

Gradle plugin version:這個說的插件是指AS中的Gradle插件,是AS以Gradle發行版本爲基礎,結合Android SDK Build Tools專用於構建 Android 應用的插件。
具體在項目的build.gradle中:

buildscript {
    ...
    dependencies {
        classpath 'com.android.tools.build:gradle:4.0.0'
    }
}

一般來說,每次AS的大版本更新,都會有一次Gradle插件的更新,而且兩者的版本號基本上一樣,當然也會有AS更新,但是插件不更新的情況。也就是說Gradle插件是獨立於AS單獨維護更新的。

再說回gradle和gradle plugin,兩者的區別上邊已經說清楚了,關於兩者的版本對應關係可以到AS官網這個頁面查看:版本對應關係

AS中的Gradle配置

這裏以最新的AS4.0爲例,其中gradel配置頁面較之前版本UI有所改變,但是內容不變:
在這裏插入圖片描述
默認情況下,使用的是gradle-wrapper.properties這個文件中的配置:

distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-6.11-all.zip

它會先在GRADLE_USER_HOME這裏邊去找有沒有對應的版本(這裏是6.1.1),如果沒有則去distributionUrl這個地址去下載,下載完成則會放在distributionPath對應的文件夾下。
說個題外話,上邊提到早期牆的厲害,導致這個url下載不了,就出現項目死活編譯不了的問題。

我們也注意到下邊還有一個Specified location,就我們手動指定Gradle目錄位置,其實我們在下載更新一個版本的AS後,這個安裝目錄中就帶有該Gradle插件所依賴的最新版的gradle,我們直接將該gradle地址,寫在後邊即可!編譯的時候,就會直接使用本地的gradle,而不會再去GRADLE_USER_HOME查找下載了!

Gradle構建流程

通常來說,Gradle一次完整的構建過程通常分成如下 三個部分:
初始化階段:首先,在初始化階段 Gradle 會決定哪些項目模塊要參與構建,並且爲每個項目模塊創建一個與之對應的 Project 實例。
配置階段:然後,配置工程中每個項目的模塊,並執行包含其中的配置腳本。
任務執行:最後,執行每個參與構建過程的 Gradle task。

詳細可以參考:深度探索 Gradle 自動化構建技術(三、Gradle 核心解密)
文章寫的非常好!建議閱讀!

常用命令和配置

多版本多渠道打包
這個就不在贅述了,之前有篇文章總結過,需可以查看:
Android Gradle 多版本多APK打包,修改生成APK名稱

另外在設置不同的編譯類型變量時,比如設置不同的baseUrl地址,也可以這樣寫:

buildTypes {
    ...
	preRelease {
	    initWith(release)
	    buildConfigField "String", "BASE_URL", "\"https://xxxxxxxx/\""
	}
}

我們在使用的時候,直接使用BuildConfig.BASE_URL即可!
使用 exclude 來排除三方庫中某些不需要或者是重複的依賴
比如之前常見的v4包衝突

implementation ('com.xx.xx:XXX:1.0.0') {
    exclude group: 'com.android.support' 
}

命令

./gradlew projects #從root從上往下列出所有的project
./gradlew tasks #列出項目中所有的任務
./gradlew dependencies #列出項目中所有的依賴

./gradlew clean #clean,相當於清空build文件夾
./gradlew build #編譯打包
./gradlew installDebug #編譯並安裝debug包

./gradlew assembleDebug #編譯並打所有渠道的debug包
./gradlew assemble #編譯並打所有渠道的debug,release包
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章