溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Gradle構(gòu)建系統(tǒng)怎么在Android Studio 中使用

發(fā)布時(shí)間:2021-01-16 10:16:10 來(lái)源:億速云 閱讀:238 作者:Leah 欄目:移動(dòng)開發(fā)

今天就跟大家聊聊有關(guān)Gradle構(gòu)建系統(tǒng)怎么在Android Studio 中使用,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

1.Gradle是什么?

Gradle 是一個(gè)JVM平臺(tái)上的自動(dòng)化的構(gòu)建工具,支持多項(xiàng)目構(gòu)建,強(qiáng)有力依賴管理(本地或者遠(yuǎn)程依賴),構(gòu)建腳本使用Groovy語(yǔ)言編寫。

在Android Studio的 project 視圖下的 gradle/ wrapper/gradle-wrapper.properties 路徑下聲明了項(xiàng)目使用的Gradle版本號(hào),這里使用的是 3.3版本

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

2.Gradle Android Plugin 是什么?

在項(xiàng)目根目錄中的build.gradle文件中有如下設(shè)置:

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

這里聲明的是項(xiàng)目對(duì) Gradle Android Plugin 的依賴,其版本號(hào)為2.3.3。Gradle的Android插件提供了許多專為構(gòu)建Android的操作項(xiàng)。

classpath表明的是類路徑,該Android Plugin for Gradle 的對(duì)應(yīng)文件位置在Android Studio根目錄下的:gradle/m2repository/com/android/tools/build/gradle/對(duì)應(yīng)版本號(hào)/gradle-3.0.0.jar

Gradle構(gòu)建系統(tǒng)怎么在Android Studio 中使用

附上我電腦上的路徑

可以看到,我們依賴的僅僅就是jar文件,build.gradle的腳本是使用Groovy語(yǔ)言編寫的,Groovy編寫的程序可以運(yùn)行在JVM虛擬機(jī)中。而Android Plugin for Gradle是專門為構(gòu)建Android項(xiàng)目提供庫(kù)文件。

平時(shí)我們經(jīng)常使用的比如 buildToolsVersion、compileSdkVersion,buildTypes{ }、sourceSets { }、defaultConfig{ }等方法函數(shù)(是的,就是方法,這是Groovy語(yǔ)言中的閉包和函數(shù)調(diào)用時(shí)的特性,現(xiàn)在無(wú)需關(guān)心,后面第三部分有講到這個(gè)),都是Gradle Android Plugin 這個(gè)庫(kù)提供的方法。可不要以為Gradle僅僅是用來(lái)構(gòu)建Android項(xiàng)目。

3.Android Studio中的compileSdkVersion、buildToolsVersion、minSdkVersion、targetSdkVersion這些配置項(xiàng)是什么?

  1. compileSdkVersion 26 :編譯項(xiàng)目使用的Android SDK的版本號(hào)為26,可以使用對(duì)應(yīng)版本號(hào)提供的API進(jìn)行編程

  2. minSdkVersion 14 :定義最小可以運(yùn)行app的android系統(tǒng)版本號(hào)為14

  3. targetSdkVersion 26 :指定測(cè)試app的android系統(tǒng)版本號(hào)為26

  4. buildToolsVersion "26.0.2" :指定Android Studio中 sdk 構(gòu)建工具的版本號(hào)、命令行工具等構(gòu)建工具,在使用Android plugin 3.0.0版本或以上時(shí),該屬性可以不用設(shè)置,插件會(huì)提供默認(rèn)版本號(hào)。

在導(dǎo)入github上面的工程時(shí),如果該工程所需要的Gradle版本、Android Plugin版本、buildToolsVersion版本,SDK 版本與你本地不符合時(shí),往往會(huì)卡死,所以在導(dǎo)入之前可以更改為你本地的版本,在進(jìn)行導(dǎo)入即可。

4. Gradle Wrapper是什么?

The Gradle Wrapper allows you to execute Gradle builds on machines where Gradle is not installed. This is useful for example for some continuous integration servers. It is also useful for an open source project to keep the barrier low for building it. The wrapper is also very interesting for the enterprise. It is a zero administration approach for the client machines. It also enforces the usage of a particular Gradle version thus minimizing support issues.
Gradle Wrapper 可以在沒(méi)有安裝Gradle的機(jī)器上執(zhí)行Gradle 構(gòu)建,經(jīng)常在持續(xù)性構(gòu)建平臺(tái)上所使用,例如jenkis。同時(shí)對(duì)于客戶端機(jī)器來(lái)說(shuō)零成本管理。

Gradle User Guide

第二部分. 關(guān)于Android Studio 工程項(xiàng)目你需要知道的一些東西

  1. Android Studio項(xiàng)目工程包含一個(gè)Application module,包含若干個(gè)Library module。 Library module可以是Android library,也可以是java library。

  2. Android Library : 包含Android項(xiàng)目中的源代碼、資源文件、manifest文件,被編譯為AAR文件。AAR文件可做為Android 應(yīng)用模塊的依賴。

  3. java library : 僅包含java源文件,編譯的結(jié)果為JAR文件,可作為Android 應(yīng)用模塊的依賴或者java 項(xiàng)目的依賴。

  4. 每個(gè)module都可以被單獨(dú)的構(gòu)建,測(cè)試與調(diào)試,同時(shí)moudle可用來(lái)作為其他工程使用的library。

第三部分 .實(shí)際工程分析

通過(guò)github上的timber項(xiàng)目分析各模塊下的build.gradle配件文件的含義。可以直接到github上搜索找到該項(xiàng)目。

Gradle構(gòu)建系統(tǒng)怎么在Android Studio 中使用

1.Timber項(xiàng)目結(jié)構(gòu)

根目錄的setting.gradle文件,告訴Gradle需要構(gòu)建的模塊包括那些

include ':timber',include ':timber-lint',include ':timber-sample'

a.其中timber-sample是Application 模塊,對(duì)應(yīng)聲明為

apply plugin: 'com.android.application'

b.timber是android library 模塊,對(duì)應(yīng)聲明為

apply plugin: 'com.android.library'

c.timber-lint是java library模塊,對(duì)應(yīng)聲明為

apply plugin: 'java-library'

2. build.gradle 文件中結(jié)構(gòu)解釋, 大招來(lái)了 :)

下面我將通過(guò)簡(jiǎn)單易懂的方式去讓使用者理解build腳本文件的結(jié)構(gòu)。

常見的模塊下build.gradle文件格式如下:

apply plugin: 'com.android.application'

android {
  compileSdkVersion 25
  buildToolsVersion "26.0.1"
  defaultConfig {
   
  }
  buildTypes {

  }
}

dependencies {

}

2.1: “apply plugin: 'com.android.application'” 語(yǔ)句解釋:

Gradle是使用Groovy所寫,這里是調(diào)用了 apply方法,Groovy中方法調(diào)用時(shí)可以省略括號(hào),在你按住Control + 左鍵(mac為command+左鍵)時(shí),可以進(jìn)入到對(duì)應(yīng)的類中,之前上文也提到過(guò),Android Plugin 僅僅是Jar文件,讓我們進(jìn)入看看其中的對(duì)應(yīng)方法是什么?

public interface PluginAware {
  void apply(Map<String, ?> options);
}

在Grovvy中 a.b() 這種格式可以寫為a b

所以呢 compileSdkVersion ,apply 等語(yǔ)句都是在調(diào)用對(duì)應(yīng)的函數(shù)

2.2 xxx { } 格式到底是什么?

def debugClosure(int num, String str, Closure closure){ 
   //dosomething 
} 

debugClosure(1, "groovy", { 
 println"hello groovy!" 
})

首先"{ }" 在Groovy語(yǔ)言中是“閉包”,簡(jiǎn)單講閉包就是用“{ }”擴(kuò)起來(lái)的一段代碼段 ,在Groovy中有調(diào)用方法的時(shí)候有這樣一條規(guī)定:“在調(diào)用方法的時(shí)候,如果方法僅有一個(gè)參數(shù)是Closure類型(也就是閉包),調(diào)用的時(shí)候,可以把閉包中的執(zhí)行的代碼寫到括號(hào)中,為xxx({ }),當(dāng)把括號(hào)省略之后就變成了 xxx{ } 格式”。

最前面代碼中的"android{ }"語(yǔ)句函數(shù)定義在Project類中,函數(shù)定義為:

AppExtension android(Closure configuration);

結(jié)論:build.gradle腳本文件在運(yùn)行的其實(shí)就是在執(zhí)行一系列的函數(shù)

3. 根目錄下build.gradle文件分析

該文件定義的是整個(gè)項(xiàng)目的構(gòu)建配置,該配置同樣生效于其他module

3.1 extra 屬性

我們可以在項(xiàng)目頂級(jí)build.gradle中聲明ext 塊,在其中定義的屬性可以在其他各個(gè)模塊中去使用,通過(guò)這種方式可以一次性更改項(xiàng)目的各個(gè)模塊的構(gòu)建配置。

ext {
  compileSdkVersion = 26、
  supportLibVersion = "26.1.0"
}

使用:在其他模塊通過(guò)rootProject.ext.compileSdkVersion去使用該屬性。

3.2 buildScript 塊

buildscript {
 repositories {
  jcenter()
  google()
 }

 dependencies {
  classpath deps.androidPlugin
  classpath 'com.github.ben-manes:gradle-versions-plugin:0.17.0'
 }
}

其中repositories中聲明的是遠(yuǎn)程倉(cāng)庫(kù)的類別,平時(shí)我們?cè)赿ependencies塊中使用的類似compile 'io.reactivex:rxjava:1.0.0'語(yǔ)句,它在jcenter倉(cāng)庫(kù)中都是唯一存在,在構(gòu)建的時(shí)候,本地如果沒(méi)有的話,會(huì)到j(luò)center中去進(jìn)行下載對(duì)應(yīng)的版本。

4. 模塊下的build.gradle文件分析

1、defaultConfig 塊:定義的是APK各種構(gòu)建版本的默認(rèn)設(shè)置,這里面的一些屬性可在AndroidManifest.xml文件中重載配置

  applicationId 'com.example.myapp'
  minSdkVersion 15
  targetSdkVersion 26
  versionCode 1
  versionName "1.0"
 }

productFlavors 塊: 可以配置多種產(chǎn)品類型,比如可以一個(gè)是free,另外一種類型是免費(fèi)

productFlavors {
  free {
   applicationId 'com.example.myapp.free'
  }

  paid {
   applicationId 'com.example.myapp.paid'
  }
 }

buildTypes 塊:可以配置多種構(gòu)建類型的相應(yīng)的配置項(xiàng),比如debug、relase版本。

buildTypes {
  release {
    minifyEnabled true 
    proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
  }
 }

看完上述內(nèi)容,你們對(duì)Gradle構(gòu)建系統(tǒng)怎么在Android Studio 中使用有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI