這篇文章主要介紹了Android中如何配置build.gradle的相關(guān)知識(shí),內(nèi)容詳細(xì)易懂,操作簡(jiǎn)單快捷,具有一定借鑒價(jià)值,相信大家閱讀完這篇Android中如何配置build.gradle文章都會(huì)有所收獲,下面我們一起來看看吧。
讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對(duì)這個(gè)行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡(jiǎn)單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:域名注冊(cè)、虛擬空間、營(yíng)銷軟件、網(wǎng)站建設(shè)、東河網(wǎng)站維護(hù)、網(wǎng)站推廣。一、Project的build.gradle文件:
對(duì)應(yīng)的build.gradle代碼如下:
// Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript {//這里是gradle腳本執(zhí)行所需依賴,分別是對(duì)應(yīng)的maven庫和插件 repositories { google()//從Android Studio3.0后新增了google()配置,可以引用google上的開源項(xiàng)目 jcenter()//是一個(gè)類似于github的代碼托管倉庫,聲明了jcenter()配置,可以輕松引用 jcenter上的開源項(xiàng)目 } dependencies { classpath 'com.android.tools.build:gradle:3.0.0'////此處是android的插件gradle,gradle是一個(gè)強(qiáng)大的項(xiàng)目構(gòu)建工具 // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } } allprojects {//這里是項(xiàng)目本身需要的依賴,比如項(xiàng)目所需的maven庫 repositories { google() jcenter() } } // 運(yùn)行g(shù)radle clean時(shí),執(zhí)行此處定義的task任務(wù)。 // 該任務(wù)繼承自Delete,刪除根目錄中的build目錄。 // 相當(dāng)于執(zhí)行Delete.delete(rootProject.buildDir)。 // gradle使用groovy語言,調(diào)用method時(shí)可以不用加()。 task clean(type: Delete) { delete rootProject.buildDir }
buildscript{}閉包里是gradle腳本執(zhí)行所需依賴,分別是對(duì)應(yīng)的maven庫和插件。
allprojects{}閉包里是項(xiàng)目本身需要的依賴,比如項(xiàng)目所需的maven庫。
task clean(type: Delete){}是運(yùn)行g(shù)radle clean時(shí),執(zhí)行此處定義的task任務(wù),該任務(wù)繼承自Delete,刪除根目錄中的build目錄。其中buildscript包含repositories閉包和dependencies閉包。
repositories{}閉包:配置遠(yuǎn)程倉庫
該閉包中聲明了jcenter()和google()的配置,其中jcenter是一個(gè)代碼托管倉庫,上面托管了很多Android開源項(xiàng)目,在這里配置了jcenter后我們可以在項(xiàng)目中方便引用jcenter上的開源項(xiàng)目,從Android Studio3.0后新增了google()配置,可以引用google上的開源項(xiàng)目。
dependencies{}閉包:配置構(gòu)建工具
該閉包使用classpath聲明了一個(gè)Gradle插件,由于Gradle并不只是用來構(gòu)建Android項(xiàng)目,因此此處引入相關(guān)插件來構(gòu)建Android項(xiàng)目,其中'3.3.3'為該插件的版本號(hào),可以根據(jù)新的版本號(hào)來調(diào)整。
二、Module的build.gradle文件:
從文件內(nèi)容可以看出,主要分為三大部分,如下圖所示:
1、apply plugin:
// 聲明是Android程序, //com.android.application 表示這是一個(gè)應(yīng)用程序模塊 //com.android.library 標(biāo)識(shí)這是一個(gè)庫模塊 //而這區(qū)別:前者可以直接運(yùn)行,后著是依附別的應(yīng)用程序運(yùn)行 apply plugin: 'com.android.application'
文件中第一行使用apply plugin表示應(yīng)用了一個(gè)插件,該插件一般有兩種值可選:
'com.android.application',表示該模塊為應(yīng)用程序模塊,可以直接運(yùn)行,打包得到的是.apk文件
'com.android.library',表示該模塊為庫模塊,只能作為代碼庫依附于別的應(yīng)用程序模塊來運(yùn)行,打包得到的是.aar文件
2、android{}閉包:
這個(gè)閉包主要為了配置項(xiàng)目構(gòu)建的各種屬性:
2.1、添加signingConfigs{}閉包:
signingConfigs {// 自動(dòng)化打包配置 release {// 線上環(huán)境 keyAlias 'test' keyPassword '123456' storeFile file('test.keystore') storePassword '123456' } debug {// 開發(fā)環(huán)境 keyAlias 'test' keyPassword '123456' storeFile file('test.keystore') storePassword '123456' } }
可以手動(dòng)添加簽名配置,也可以通過Project Structure 選中app,點(diǎn)擊Singing添加,具體步驟如下圖所示:
配置Singing.png
簽名配置完成后可以方便帶簽名打包,在module的Build Variants中有兩個(gè)Type,分別是debug和release,可以選擇任意一個(gè)類型進(jìn)行打包,并且他們會(huì)利用各自配置的Key進(jìn)行打包,執(zhí)行 Run app或者Build->Build apk就會(huì)自動(dòng)在module name/app/build/outputs/apk路徑下生成Apk文件。另一種打包方式是Build->Generate Signed APK填寫簽名信息生成Apk。
2.2、compileSdkVersion:設(shè)置編譯時(shí)用的Android版本
2.3、buildToolsVersion:設(shè)置編譯時(shí)使用的構(gòu)建工具的版本,Android Studio3.0后去除此項(xiàng)配置
2.4、defaultConfig{}閉包:
compileSdkVersion 27//設(shè)置編譯時(shí)用的Android版本 defaultConfig { applicationId "com.billy.myapplication"http://項(xiàng)目的包名 minSdkVersion 16//項(xiàng)目最低兼容的版本 targetSdkVersion 27//項(xiàng)目的目標(biāo)版本 versionCode 1//版本號(hào) versionName "1.0"http://版本名稱 testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"http://表明要使用AndroidJUnitRunner進(jìn)行單元測(cè)試 }
applicationId:指定了項(xiàng)目的包名。
minSdkVersion:指定項(xiàng)目最低兼容的版本,如果設(shè)備小于這個(gè)版本或者大于maxSdkVersion(一般不用)將無法安裝這個(gè)應(yīng)用,這里指定為16,表示最低兼容到Android 4.1系統(tǒng)。
targetSdkVersion:指定項(xiàng)目的目標(biāo)版本,表示在該目標(biāo)版本上已經(jīng)做過充分測(cè)試,系統(tǒng)會(huì)為該應(yīng)用啟動(dòng)一些對(duì)應(yīng)該目標(biāo)系統(tǒng)的新功能特性,Android系統(tǒng)平臺(tái)的行為變更,只有targetSdkVersion的屬性值被設(shè)置為大于或等于該系統(tǒng)平臺(tái)的API版本時(shí),才會(huì)生效。例如,若指定targetSdkVersion值為22,則表示該程序高只在Android5.1版本上做過充分測(cè)試,在Android6.0系統(tǒng)上(對(duì)應(yīng)targetSdkVersion為23)擁有的新特性如系統(tǒng)運(yùn)行時(shí)權(quán)限等功能就不會(huì)被啟用。
versionCode:表示版本號(hào),一般每次打包上線時(shí)該值只能增加,打包后看不見。
versionName:表示版本名稱,展示在應(yīng)用市場(chǎng)上。
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"表明要使用AndroidJUnitRunner進(jìn)行單元測(cè)試。
2.5、 buildTypes{}閉包:
這個(gè)閉包主要指定生成安裝文件的主要配置,一般包含兩個(gè)子閉包,一個(gè)是debug閉包,用于指定生成測(cè)試版安裝文件的配置,可以忽略不寫;另一個(gè)是release閉包,用于指定生成正式版安裝文件的配置。兩者能配置的參數(shù)相同,較大的區(qū)別默認(rèn)屬性配置不一樣,兩種模式支持的屬性配置如下圖:
buildTypes配置.png
buildTypes {// 生產(chǎn)/測(cè)試環(huán)境配置 release {// 生產(chǎn)環(huán)境 buildConfigField("boolean", "LOG_DEBUG", "false")//配置Log日志 buildConfigField("String", "URL_PERFIX", "\"https://release.cn/\"")// 配置URL前綴 minifyEnabled false//是否對(duì)代碼進(jìn)行混淆 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'//指定混淆的規(guī)則文件 signingConfig signingConfigs.release//設(shè)置簽名信息 pseudoLocalesEnabled false//是否在APK中生成偽語言環(huán)境,幫助國(guó)際化的東西,一般使用的不多 zipAlignEnabled true//是否對(duì)APK包執(zhí)行ZIP對(duì)齊優(yōu)化,減小zip體積,增加運(yùn)行效率 applicationIdSuffix 'test'//在applicationId 中添加了一個(gè)后綴,一般使用的不多 versionNameSuffix 'test'//在applicationId 中添加了一個(gè)后綴,一般使用的不多 } debug {// 測(cè)試環(huán)境 buildConfigField("boolean", "LOG_DEBUG", "true")//配置Log日志 buildConfigField("String", "URL_PERFIX", "\"https://test.com/\"")// 配置URL前綴 minifyEnabled false//是否對(duì)代碼進(jìn)行混淆 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'//指定混淆的規(guī)則文件 signingConfig signingConfigs.debug//設(shè)置簽名信息 debuggable false//是否支持?jǐn)帱c(diǎn)調(diào)試 jniDebuggable false//是否可以調(diào)試NDK代碼 renderscriptDebuggable false//是否開啟渲染腳本就是一些c寫的渲染方法 zipAlignEnabled true//是否對(duì)APK包執(zhí)行ZIP對(duì)齊優(yōu)化,減小zip體積,增加運(yùn)行效率 pseudoLocalesEnabled false//是否在APK中生成偽語言環(huán)境,幫助國(guó)際化的東西,一般使用的不多 applicationIdSuffix 'test'//在applicationId 中添加了一個(gè)后綴,一般使用的不多 versionNameSuffix 'test'//在applicationId 中添加了一個(gè)后綴,一般使用的不多 } }
release{}閉包和debug{}閉包兩者能配置的參數(shù)相同,較大的區(qū)別默認(rèn)屬性配置不一樣:
minifyEnabled:表明是否對(duì)代碼進(jìn)行混淆,true表示對(duì)代碼進(jìn)行混淆,false表示對(duì)代碼不進(jìn)行混淆,默認(rèn)的是false。
proguardFiles:指定混淆的規(guī)則文件,這里指定了proguard-android.txt文件和proguard-rules.pro文件兩個(gè)文件,proguard-android.txt文件為默認(rèn)的混淆文件,里面定義了一些通用的混淆規(guī)則。proguard-rules.pro文件位于當(dāng)前項(xiàng)目的根目錄下,可以在該文件中定義一些項(xiàng)目特有的混淆規(guī)則。
buildConfigField:用于解決Beta版本服務(wù)和Release版本服務(wù)地址不同或者一些Log打印需求控制的。例如:配置buildConfigField("boolean", "LOG_DEBUG", "true"),這個(gè)方法接收三個(gè)非空的參數(shù),第一個(gè):確定值的類型,第二個(gè):指定key的名字,第三個(gè):傳值,調(diào)用的時(shí)候BuildConfig.LOG_DEBUG即可調(diào)用。
debuggable:表示是否支持?jǐn)帱c(diǎn)調(diào)試,release默認(rèn)為false,debug默認(rèn)為true。
jniDebuggable:表示是否可以調(diào)試NDK代碼,使用lldb進(jìn)行c和c++代碼調(diào)試,release默認(rèn)為false
signingConfig:設(shè)置簽名信息,通過signingConfigs.release或者signingConfigs.debug,配置相應(yīng)的簽名,但是添加此配置前必須先添加signingConfigs閉包,添加相應(yīng)的簽名信息。
renderscriptDebuggable:表示是否開啟渲染腳本就是一些c寫的渲染方法,默認(rèn)為false。
renderscriptOptimLevel:表示渲染等級(jí),默認(rèn)是3。
pseudoLocalesEnabled:是否在APK中生成偽語言環(huán)境,幫助國(guó)際化的東西,一般使用的不多。
applicationIdSuffix:和defaultConfig中配置是一的,這里是在applicationId 中添加了一個(gè)后綴,一般使用的不多。
versionNameSuffix:表示添加版本名稱的后綴,一般使用的不多。
zipAlignEnabled:表示是否對(duì)APK包執(zhí)行ZIP對(duì)齊優(yōu)化,減小zip體積,增加運(yùn)行效率,release和debug默認(rèn)都為true。
2.6、sourceSets{}閉包:配置目錄指向
sourceSets {//目錄指向配置 main { jniLibs.srcDirs = ['libs']//指定lib庫目錄 } }
配置 jniLibs.srcDirs = ['libs'],可以在Android studio的Android視圖下生成jniLibs文件夾,可以方便我們存放jar包和庫文件,其中Android視圖下的jniLibs和project視圖下的libs指向同一文件夾(app→libs),如下圖所示:
2.7、packagingOptions{}閉包:打包時(shí)的相關(guān)配置
當(dāng)項(xiàng)目中依賴的第三方庫越來越多時(shí),有可能會(huì)出現(xiàn)兩個(gè)依賴庫中存在同一個(gè)(名稱)文件。如果這樣,Gradle在打包時(shí)就會(huì)提示錯(cuò)誤(警告)。那么就可以根據(jù)提示,然后使用以下方法將重復(fù)的文件剔除,比較常用的是通過exclude去除重復(fù)的文件,例如:
packagingOptions{ //pickFirsts做用是 當(dāng)有重復(fù)文件時(shí) 打包會(huì)報(bào)錯(cuò) 這樣配置會(huì)使用第一個(gè)匹配的文件打包進(jìn)入apk // 表示當(dāng)apk中有重復(fù)的META-INF目錄下有重復(fù)的LICENSE文件時(shí) 只用第一個(gè) 這樣打包就不會(huì)報(bào)錯(cuò) pickFirsts = ['META-INF/LICENSE'] //merges何必 當(dāng)出現(xiàn)重復(fù)文件時(shí) 合并重復(fù)的文件 然后打包入apk //這個(gè)是有默認(rèn)值得 merges = [] 這樣會(huì)把默默認(rèn)值去掉 所以我們用下面這種方式 在默認(rèn)值后添加 merge 'META-INF/LICENSE' //這個(gè)是在同時(shí)使用butterknife、dagger2做的一個(gè)處理。同理,遇到類似的問題,只要根據(jù)gradle的提示,做類似處理即可。 exclude 'META-INF/services/javax.annotation.processing.Processor' }
2.8、productFlavors{}閉包:多個(gè)渠道配置
這個(gè)配置是經(jīng)常會(huì)使用到的,通常在適配多個(gè)渠道的時(shí)候,需要為特定的渠道做部分特殊的處理,比如設(shè)置不同的包名、應(yīng)用名等。場(chǎng)景:當(dāng)我們使用友盟統(tǒng)計(jì)時(shí),通常需要設(shè)置一個(gè)渠道ID,那么我們就可以利用productFlavors來生成對(duì)應(yīng)渠道信息的包,如:
android { productFlavors { wandoujia { //豌豆莢渠道包配置 manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"] //manifestPlaceholders的使用在后續(xù)章節(jié)(AndroidManifest里的占位符)中介紹 } xiaomi { manifestPlaceholders = [UMENG_CHANNEL_VALUE: "xiaomi"] applicationId "com.wiky.gradle.xiaomi" //配置包名 } _360 { manifestPlaceholders = [UMENG_CHANNEL_VALUE: "_360"] } //... } }
當(dāng)然也有更簡(jiǎn)潔的方式:
android { productFlavors { wandoujia {} xiaomi {} _360 {} //... } productFlavors.all { //批量修改,類似一個(gè)循序遍歷 flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name] } }
配置完之后,在命令行窗口中(Terminal)中輸入gradlew assembleRelease(windows)即可開始打包,在Mac系統(tǒng)中對(duì)應(yīng)指令應(yīng)該是./gradlew assembleRelease。當(dāng)然,如果想要debug版本的包,將指令中assembleRelease改為assembleDebug即可。最后生成的包還是在app/build/outputs/apk中,默認(rèn)命名格式如app-wandoujia-release-unsigned.apk,在module的Build Variants中可以選擇相應(yīng)的渠道。
注:Android Studio3.0需在主app的build.gradle里面的
defaultConfig { targetSdkVersion:*** minSdkVersion :*** versionCode:*** versionName :*** //版本名后面添加一句話,意思就是flavor dimension 它的維度就是該版本號(hào),這樣維度就是都是統(tǒng)一的了 flavorDimensions "versionCode" }
2.9、lintOptions{}閉包:代碼掃描分析
Lint 是Android Studio 提供的 代碼掃描分析工具,它可以幫助我們發(fā)現(xiàn)代碼結(jié)構(gòu)/質(zhì)量問題,同時(shí)提供一些解決方案,而且這個(gè)過程不需要我們手寫測(cè)試用例。
Lint 發(fā)現(xiàn)的每個(gè)問題都有描述信息和等級(jí)(和測(cè)試發(fā)現(xiàn) bug 很相似),我們可以很方便地定位問題,同時(shí)按照嚴(yán)重程度進(jìn)行解決。
//程序在編譯的時(shí)候會(huì)檢查lint,有任何錯(cuò)誤提示會(huì)停止build,我們可以關(guān)閉這個(gè)開關(guān) lintOptions { abortOnError false //即使報(bào)錯(cuò)也不會(huì)停止打包 checkReleaseBuilds false //打包release版本的時(shí)候進(jìn)行檢測(cè) }
3、dependencies{}閉包:
該閉包定義了項(xiàng)目的依賴關(guān)系,一般項(xiàng)目都有三種依賴方式:本地依賴、庫依賴和遠(yuǎn)程依賴。本地依賴可以對(duì)本地的jar包或目錄添加依賴關(guān)系,庫依賴可以對(duì)項(xiàng)目中的庫模塊添加依賴關(guān)系,遠(yuǎn)程依賴可以對(duì)jcener庫上的開源項(xiàng)目添加依賴關(guān)系。從Android Studio3.0后compile引入庫不在使用,而是通過api和implementation,api完全等同于以前的compile,用api引入的庫整個(gè)項(xiàng)目都可以使用,用implementation引入的庫只有對(duì)應(yīng)的Module能使用,其他Module不能使用,由于之前的項(xiàng)目統(tǒng)一用compile依賴,導(dǎo)致的情況就是模塊耦合性太高,不利于項(xiàng)目拆解,使用implementation之后雖然使用起來復(fù)雜了但是做到降低偶合興提高安全性。
dependencies {//項(xiàng)目的依賴關(guān)系 implementation fileTree(include: ['*.jar'], dir: 'libs')//本地jar包依賴 implementation 'com.android.support:appcompat-v7:27.1.1'//遠(yuǎn)程依賴 implementation 'com.android.support.constraint:constraint-layout:1.1.2' testImplementation 'junit:junit:4.12'//聲明測(cè)試用例庫 androidTestImplementation 'com.android.support.test:runner:1.0.2' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' }
implementation fileTree(include: ['*.jar'], dir: 'libs'):implementation fileTree是一個(gè)本地依賴聲明,表示將libs目錄下所有.jar后綴的文件都添加到項(xiàng)目的構(gòu)建路徑當(dāng)中。
implementation 'com.android.support:appcompat-v7:27.1.1':implementation語句為 遠(yuǎn)程依賴聲明,'com.android.support:appcompat-v7:27.1.1'為一個(gè)標(biāo)準(zhǔn)的遠(yuǎn)程依賴庫格式,其中com.android.support為域名部分,用于區(qū)分不同公司的庫;appcompat-v7為組件名稱,用于區(qū)分同一個(gè)公司的不同庫;27.1.1為版本號(hào),用于區(qū)分同一個(gè)庫的不同版本。加上這句聲明后,Gradle在構(gòu)建項(xiàng)目時(shí)會(huì)先檢查一下本地是否已經(jīng)緩存過該庫,若沒有緩存則自動(dòng)聯(lián)網(wǎng)下載,下載后自動(dòng)添加到項(xiàng)目的構(gòu)建路徑中去。
testImplementation和androidTestImplementation:表示聲明測(cè)試用例庫。
Module完整的build.gradle配置如下:
// 聲明是Android程序, //com.android.application 表示這是一個(gè)應(yīng)用程序模塊 //com.android.library 標(biāo)識(shí)這是一個(gè)庫模塊 //而這區(qū)別:前者可以直接運(yùn)行,后著是依附別的應(yīng)用程序運(yùn)行 apply plugin: 'com.android.application' android { signingConfigs {// 自動(dòng)化打包配置 release {// 線上環(huán)境 keyAlias 'test' keyPassword '123456' storeFile file('test.jks') storePassword '123456' } debug {// 開發(fā)環(huán)境 keyAlias 'test' keyPassword '123456' storeFile file('test.jks') storePassword '123456' } } compileSdkVersion 27//設(shè)置編譯時(shí)用的Android版本 defaultConfig { applicationId "com.billy.myapplication"http://項(xiàng)目的包名 minSdkVersion 16//項(xiàng)目最低兼容的版本 targetSdkVersion 27//項(xiàng)目的目標(biāo)版本 versionCode 1//版本號(hào) versionName "1.0"http://版本名稱 flavorDimensions "versionCode" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"http://表明要使用AndroidJUnitRunner進(jìn)行單元測(cè)試 } buildTypes {// 生產(chǎn)/測(cè)試環(huán)境配置 release {// 生產(chǎn)環(huán)境 buildConfigField("boolean", "LOG_DEBUG", "false")//配置Log日志 buildConfigField("String", "URL_PERFIX", "\"https://release.cn/\"")// 配置URL前綴 minifyEnabled false//是否對(duì)代碼進(jìn)行混淆 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'//指定混淆的規(guī)則文件 signingConfig signingConfigs.release//設(shè)置簽名信息 pseudoLocalesEnabled false//是否在APK中生成偽語言環(huán)境,幫助國(guó)際化的東西,一般使用的不多 zipAlignEnabled true//是否對(duì)APK包執(zhí)行ZIP對(duì)齊優(yōu)化,減小zip體積,增加運(yùn)行效率 applicationIdSuffix 'test'//在applicationId 中添加了一個(gè)后綴,一般使用的不多 versionNameSuffix 'test'//在applicationId 中添加了一個(gè)后綴,一般使用的不多 } debug {// 測(cè)試環(huán)境 buildConfigField("boolean", "LOG_DEBUG", "true")//配置Log日志 buildConfigField("String", "URL_PERFIX", "\"https://test.com/\"")// 配置URL前綴 minifyEnabled false//是否對(duì)代碼進(jìn)行混淆 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'//指定混淆的規(guī)則文件 signingConfig signingConfigs.debug//設(shè)置簽名信息 debuggable false//是否支持?jǐn)帱c(diǎn)調(diào)試 jniDebuggable false//是否可以調(diào)試NDK代碼 renderscriptDebuggable false//是否開啟渲染腳本就是一些c寫的渲染方法 zipAlignEnabled true//是否對(duì)APK包執(zhí)行ZIP對(duì)齊優(yōu)化,減小zip體積,增加運(yùn)行效率 pseudoLocalesEnabled false//是否在APK中生成偽語言環(huán)境,幫助國(guó)際化的東西,一般使用的不多 applicationIdSuffix 'test'//在applicationId 中添加了一個(gè)后綴,一般使用的不多 versionNameSuffix 'test'//在applicationId 中添加了一個(gè)后綴,一般使用的不多 } } sourceSets {//目錄指向配置 main { jniLibs.srcDirs = ['libs']//指定lib庫目錄 } } packagingOptions{//打包時(shí)的相關(guān)配置 //pickFirsts做用是 當(dāng)有重復(fù)文件時(shí) 打包會(huì)報(bào)錯(cuò) 這樣配置會(huì)使用第一個(gè)匹配的文件打包進(jìn)入apk // 表示當(dāng)apk中有重復(fù)的META-INF目錄下有重復(fù)的LICENSE文件時(shí) 只用第一個(gè) 這樣打包就不會(huì)報(bào)錯(cuò) pickFirsts = ['META-INF/LICENSE'] //merges何必 當(dāng)出現(xiàn)重復(fù)文件時(shí) 合并重復(fù)的文件 然后打包入apk //這個(gè)是有默認(rèn)值得 merges = [] 這樣會(huì)把默默認(rèn)值去掉 所以我們用下面這種方式 在默認(rèn)值后添加 merge 'META-INF/LICENSE' //這個(gè)是在同時(shí)使用butterknife、dagger2做的一個(gè)處理。同理,遇到類似的問題,只要根據(jù)gradle的提示,做類似處理即可。 exclude 'META-INF/services/javax.annotation.processing.Processor' } productFlavors { wandoujia {} xiaomi {} _360 {} } productFlavors.all { //批量修改,類似一個(gè)循序遍歷 flavor -> flavor.manifestPlaceholders = [IFLYTEK_CHANNEL: name] } //程序在編譯的時(shí)候會(huì)檢查lint,有任何錯(cuò)誤提示會(huì)停止build,我們可以關(guān)閉這個(gè)開關(guān) lintOptions { abortOnError false //即使報(bào)錯(cuò)也不會(huì)停止打包 checkReleaseBuilds false //打包release版本的時(shí)候進(jìn)行檢測(cè) } } dependencies { //項(xiàng)目的依賴關(guān)系 implementation fileTree(include: ['*.jar'], dir: 'libs') //本地jar包依賴 implementation 'com.android.support:appcompat-v7:27.1.1' //遠(yuǎn)程依賴 implementation 'com.android.support.constraint:constraint-layout:1.1.2' testImplementation 'junit:junit:4.12' //聲明測(cè)試用例庫 androidTestImplementation 'com.android.support.test:runner:1.0.2' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' }
關(guān)于“Android中如何配置build.gradle”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對(duì)“Android中如何配置build.gradle”知識(shí)都有一定的了解,大家如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。