最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android中的build.gradle文件深入講解

 更新時間:2018年10月25日 09:23:40   作者:Kepler  
這篇文章主要給大家介紹了關(guān)于Android中build.gradle文件的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

一、什么是Gradle

gradle是一個項目構(gòu)建工具,java開發(fā)中有兩個大名鼎鼎的項目構(gòu)建Maven,Ant,其中maven簡單易控深受開發(fā)者喜愛。
項目構(gòu)建工具是什么?能干嗎?

開發(fā)某些項目時,需要很多jar或者庫的支持,還沒開始開發(fā)就下載了n多個庫,浪費(fèi)了時間不說,這些庫之間兼容性又無法保證。刪了?白下載了。不刪?又不兼容。此時就需要使用項目構(gòu)建工具,簡單的說就是一個可以根據(jù)簡單的配置文件自動去下載相應(yīng)包/庫的軟件。自動的還很簡單,不用豈不虧了。多個項目構(gòu)建工具各有特點(diǎn),但是核心思想一樣。

簡單的說,Gradle是一個構(gòu)建工具,它是用來幫助我們構(gòu)建app的,構(gòu)建包括編譯、打包等過程。我們可以為Gradle指定構(gòu)建規(guī)則,然后它就會根據(jù)我們的“命令”自動為我們構(gòu)建app。Android Studio中默認(rèn)就使用Gradle來完成應(yīng)用的構(gòu)建。有些同學(xué)可能會有疑問:”我用AS不記得給Gradle指定過什么構(gòu)建規(guī)則呀,最后不還是能搞出來個apk?!?實際上,app的構(gòu)建過程是大同小異的,有一些過程是”通用“的,也就是每個app的構(gòu)建都要經(jīng)歷一些公共步驟。因此,在我們在創(chuàng)建工程時,Android Studio自動幫我們生成了一些通用構(gòu)建規(guī)則,很多時候我們甚至完全不用修改這些規(guī)則就能完成我們app的構(gòu)建。

有些時候,我們會有一些個性化的構(gòu)建需求,比如我們引入了第三方庫,或者我們想要在通用構(gòu)建過程中做一些其他的事情,這時我們就要自己在系統(tǒng)默認(rèn)構(gòu)建規(guī)則上做一些修改。這時候我們就要自己向Gradle”下命令“了,這時候我們就需要用Gradle能聽懂的話了,也就是Groovy。Groovy是一種基于JVM的動態(tài)語言,關(guān)于它的具體介紹,感興趣的同學(xué)可以文末參考”延伸閱讀“部分給出的鏈接。

我們在開頭處提到“Gradle是一種構(gòu)建工具”。實際上,當(dāng)我們想要更靈活的構(gòu)建過程時,Gradle就成為了一個編程框架——我們可以通過編程讓構(gòu)建過程按我們的意愿進(jìn)行。也就是說,當(dāng)我們把Gradle作為構(gòu)建工具使用時,我們只需要掌握它的配置腳本的基本寫法就OK了;而當(dāng)我們需要對構(gòu)建流程進(jìn)行高度定制時,就務(wù)必要掌握Groovy等相關(guān)知識了。限于篇幅,本文只從構(gòu)建工具使用者的角度來介紹Gradle的一些最佳實踐,在文末“延伸閱讀”部分給出了幾篇高質(zhì)量的深入介紹Gradle的文章,其中包含了Groovy等知識的介紹。

二、Gradle的基本組分

1.Project和Task

在Gradle中,每一個待構(gòu)建的工程是一個Project,構(gòu)建一個Project需要執(zhí)行一系列Task,比如編譯、打包這些構(gòu)建過程的子過程都對應(yīng)著一個Task。具體來說,一個apk文件的構(gòu)建包含以下Task:Java源碼編譯、資源文件編譯、Lint檢查、打包以生成最終的apk文件等等。

2.插件

插件的核心工作有兩個:一是定義Task;而是執(zhí)行Task。也就是說,我們想讓Gradle能正常工作,完成整個構(gòu)建流程中的一系列Task的執(zhí)行,必須導(dǎo)入合適的插件,這些插件中定義了構(gòu)建Project中的一系列Task,并且負(fù)責(zé)執(zhí)行相應(yīng)的Task。
在新建工程的app模塊的build.gradle文件的第一行,往往都是如下這句:

apply plugin: 'com.android.application'

這句話的意思就是應(yīng)用“com.android.application“這個插件來構(gòu)建app模塊,app模塊就是Gradle中的一個Project。也就是說,這個插件負(fù)責(zé)定義并執(zhí)行Java源碼編譯、資源文件編譯、打包等一系列Task。實際上"com.android.application"整個插件中定義了如下4個頂級任務(wù):

assemble: 構(gòu)建項目的輸出(apk)

check: 進(jìn)行校驗工作

build: 執(zhí)行assemble任務(wù)與check任務(wù)

clean: 清除項目的輸出

當(dāng)我們執(zhí)行一個任務(wù)時,會自動執(zhí)行它所依賴的任務(wù)。比如,執(zhí)行assemble任務(wù)會執(zhí)行assembleDebug任務(wù)和assembleRelease任務(wù),這是因為一個Android項目至少要有debug和release這兩個版本的輸出。

3.Gradle配置文件

我們在Android Studio中新建一個工程,可以得到如下的工程結(jié)構(gòu)圖:

上面我們說過,Android Studio中的一個Module即為Gradle中的一個Project。上圖的app目錄下,存在一個build.gradle文件,代表了app Module的構(gòu)建腳本,它定義了應(yīng)用于本模塊的構(gòu)建規(guī)則。我們可以看到,工程根目錄下也存在一個build.gradle文件,它代表了整個工程的構(gòu)建,其中定義了適用于這個工程中所有模塊的構(gòu)建規(guī)則。

接下來我們介紹一下上圖中其他幾個Gradle配置文件:

gradle.properties: 從它的名字可以看出,這個文件中定義了一系列“屬性”。實際上,這個文件中定義了一系列供build.gradle使用的常量,比如keystore的存儲路徑、keyalias等等。

gradlew與gradlew.bat: gradlew為Linux下的shell腳本,gradlew.bat是Windows下的批處理文件。gradlew是gradle wrapper的縮寫,也就是說它對gradle的命令進(jìn)行了包裝,比如我們進(jìn)入到指定Module目錄并執(zhí)行“gradlew.bat assemble”即可完成對當(dāng)前Module的構(gòu)建(Windows系統(tǒng)下)。

local.properties: 從名字就可以看出來,這個文件中定義了一些本地屬性,比如SDK的路徑。

settings.gradle: 假如我們的項目包含了不只一個Module時,我們想要一次性構(gòu)建所有Module以完成整個項目的構(gòu)建,這時我們需要用到這個文件。比如我們的項目包含了ModuleA和ModuleB這兩個模塊,則這個文件中會包含這樣的語句:include ':ModuleA', ':ModuleB'。

4.構(gòu)建腳本

首先我們來看一下工程目錄下的build.gradle,它指定了真?zhèn)€整個項目的構(gòu)建規(guī)則,它的內(nèi)容如下:

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {

repositories {
google()
jcenter()//構(gòu)建腳本中所依賴的庫都在jcenter倉庫下載
}
dependencies {
classpath 'com.android.tools.build:gradle:3.2.1'//指定了gradle插件的版本


// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}

allprojects {
repositories {
google()
jcenter()//當(dāng)前項目所有模塊所依賴的庫都在jcenter倉庫下載
}
}

task clean(type: Delete) {
delete rootProject.buildDir
}

我們再來簡單介紹下app模塊的build.gradle的內(nèi)容:

apply plugin: 'com.android.application'//加載用于構(gòu)建Android項目的插件

android {//構(gòu)建Android項目使用的配置
compileSdkVersion 28 //指定編譯項目時使用的SDK版本
defaultConfig {
applicationId "com.example.ssts.myapplication"http://包名
minSdkVersion 15//指定支持的最小SDK版本
targetSdkVersion 28//針對的目標(biāo)SDK版本
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}

buildTypes {//針對不同的構(gòu)建版本進(jìn)行一些設(shè)置
release {//對release版本進(jìn)行的設(shè)置
minifyEnabled false//是否開啟混淆
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'//指定混淆文件的位置 
}
}
}

dependencies {//指定當(dāng)前模塊的依賴
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}

三、常見配置

整個工程的build.gradle通常不需我們改動,這里我們介紹下一些對模塊目錄下build.gradle文件的常見配置。

1.依賴第三方庫

當(dāng)我們的項目中用到了了一些第三方庫時,我們就需要進(jìn)行一些配置,以保證能正確導(dǎo)入相關(guān)依賴。設(shè)置方法很簡單,比如我們在app模塊中中用到了Fresco,只需要在build.gradle文件中的dependencies塊添加如下語句:

dependencies {

...

compile 'com.facebook.fresco:fresco:0.11.0'

}

這樣一來,Gradle會自動從jcenter倉庫下載我們所需的第三方庫并導(dǎo)入到項目中。

2.導(dǎo)入本地jar包

在使用第三方庫時,除了像上面那樣從jcenter倉庫下載,我們還可以導(dǎo)入本地的jar包。配置方法也很簡單,只需要先把jar文件添加到app\libs目錄下,然后在相應(yīng)jar文件上單擊右鍵,選擇“Ad As Library”。然后在build.gradle的dependencies塊下添加如下語句:

compile files('libs/xxx.jar')

實際上我們可以看到,系統(tǒng)為我們創(chuàng)建的build.gradle中就已經(jīng)包含了如下語句:

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

這句話的意思是,將libs目錄下的所有jar包都導(dǎo)入。所以實際上我們只需要把jar包添加到libs目錄下并“Ad As Library"即可。

3.依賴其它模塊

假設(shè)我們的項目包含了多個模塊,并且app模塊依賴other模塊,那么我們只需app\build.gradle的denpendencies塊下添加如下語句:

compile project(':other')

4.構(gòu)建輸出為aar文件

通常我們構(gòu)建的輸出目標(biāo)都是apk文件,但如果我們的當(dāng)前項目時Android Library,我們的目標(biāo)輸出就是aar文件。要想達(dá)到這個目的也很容易,只需要把build.gradle的第一句改為如下:

apply plugin:'com.android.library'

這話表示我們使用的插件不再是構(gòu)建Android應(yīng)用的插件,而是構(gòu)建Android Library的插件,這個插件定義并執(zhí)行用于構(gòu)建Android Library的一系列Task。

5.自動移除不再使用的資源

只需進(jìn)行如下配置:

android {
...
}
buildTypes {
release {
...
shrinkResources true
...
}
}
}

6.忽略Lint錯誤

在我們構(gòu)建Android項目的過程中,有時候會由于Lint錯誤而終止。當(dāng)這些錯誤來自第三方庫中時,我們往往想要忽略這些錯誤從而繼續(xù)構(gòu)建進(jìn)程。這時候,我們可以只需進(jìn)行如下配置:

android {
...
}
buildTypes {
release {
...
shrinkResources true
...
}
}
}

7.集成簽名配置

在構(gòu)建release版本的Android項目時,每次都手動導(dǎo)入簽名文件,鍵入密碼、keyalias等信息十分麻煩。通過將簽名配置集成到構(gòu)建腳本中,我們就不必每次構(gòu)建發(fā)行版本時都手動設(shè)置了。具體配置如下:

signingConfigs {
myConfig { //將"xx"替換為自己的簽名文件信息
storeFile file("xx.jks")
storePassword "xx"
keyAlias "xx"
keyPassword "xx"
}
}
android {
buildTypes {
release {
signingConfig signingConfigs.myConfig //在release塊中加入這行
...
}
}
...
}

真實開發(fā)中,我們不應(yīng)該把密碼等信息直接寫到build.gradle中,更好的做法是放在gradle.properties中設(shè)置:

RELEASE_STOREFILE=xxx.jks

RELEASE_STORE_PASSWORD = xxx

RELEASE_KEY_ALIAS=xxx

RELEASE_KEY_PASSWORD=xxx

然后在build.gradle中直接引用即可:

signingConfigs {
myConfig { 
storeFilefile(RELEASE_STOREFILE)
storePassword RELEASE_STORE_PASSWORD
keyAlias RELEASE_KEY_ALIAS
keyPassword RELEASE_KEY_PASSWORD 
}
}

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

最新評論

油尖旺区| 黑山县| 黑龙江省| 伊吾县| 龙南县| 水富县| 榆树市| 文成县| 来宾市| 阳朔县| 甘泉县| 廊坊市| 临江市| 汕尾市| 腾冲县| 金阳县| 白玉县| 化州市| 沅江市| 南京市| 迭部县| 石泉县| 武胜县| 辉南县| 临朐县| 巴楚县| 临颍县| 青海省| 丹东市| 临夏市| 南靖县| 上栗县| 武胜县| 遵义市| 沈丘县| 城步| 蒙阴县| 兴仁县| 桃江县| 茌平县| 凤冈县|