轉(zhuǎn)自: http://blog.csdn.net/xiaoyaoyou1212/article/details/50277555一、Gradle介紹 Gradle是一個高級構(gòu)建系統(tǒng)和構(gòu)建工具,允許通過插件自定義構(gòu)建邏輯。Gradle的實(shí)質(zhì)是配置腳本,執(zhí)行一種類型的配置腳本時就會創(chuàng)建一個關(guān)聯(lián)的對象,它由三種腳本類型構(gòu)成,分別是構(gòu)建腳本(Build Script)、初始化腳本(Init Script)及設(shè)置腳本(Settings Script),其對應(yīng)的三種代理對象分別是PRoject對象、Gradle對象及Settings對象。
二、Gradle基礎(chǔ)配置
Android Studio對應(yīng)工程目錄
settings.gradle文件介紹 該文件是全局的項(xiàng)目配置文件,里面主要聲明一些需要加入gradle的module。build.gradle文件介紹 該文件如果是面向工程的,一般用來存儲構(gòu)建腳本的版本來源及工程的倉庫來源,如下圖所示,指定的構(gòu)建工具版本是gradle1.2.3,該工具及全局工程的倉庫來源都是jcenter;buildscript {    repositories {        jcenter()    }    dependencies {        classpath 'com.android.tools.build:gradle:1.2.3'    }}allprojects {    repositories {        jcenter()    }}1234567891011121314
1234567891011121314而如果該文件面向的是對應(yīng)的module,則一般指定的module類型,Android相關(guān)及依賴庫,如下圖所示為常用配置。
//module類型,常用的如:'com.android.application'、'com.android.library'、'java'、'maven'等。apply plugin: 'com.android.application'//Android常用配置android { //編譯版本 compileSdkVersion 22 //構(gòu)建工具版本 buildToolsVersion "22.0.1" //默認(rèn)配置 defaultConfig { //應(yīng)用包名 applicationId 'com.xyy.example' //最小版本 minSdkVersion 15 //目標(biāo)版本 targetSdkVersion 22 //應(yīng)用版本號 versionCode 1 //應(yīng)用版本名稱 versionName "1.0" //是否允許dex文件超過65535大小,默認(rèn)打開 multiDexEnabled true } //指定編譯版本 compileOptions{ sourceCompatibility JavaVersion.VERSION_1_7 targetCompatibility JavaVersion.VERSION_1_7 } //lint檢查配置,默認(rèn)關(guān)閉 lintOptions { abortOnError false } //渠道指定 productFlavors { } //簽名配置 signingConfigs { //調(diào)試版本 debug { storeFile file('×.keystore') storePassWord ××× keyAlias ×××× keyPassword ××× } //發(fā)布版本 release { //簽名文件目錄指定,相對于該module storeFile file('×.keystore') //簽名密碼 storePassword ××× //Alias名稱 keyAlias ×××× //Alias密碼 keyPassword ××× } } //構(gòu)建類型配置 buildTypes { debug { buildConfigField("boolean", "LOG_DEBUG", "true") versionNameSuffix "debug" minifyEnabled false zipAlignEnabled false shrinkResources false signingConfig signingConfigs.debug } release { //添加buildConfig配置字段,可以設(shè)置日志打印開關(guān)字段,方便發(fā)布時自動關(guān)閉打印日志 buildConfigField("boolean", "LOG_DEBUG", "false") //在生成的release版本APK后綴中添加"release"字段 versionNameSuffix "release" //是否混淆(特別注意:如果混淆文件未配置使用false) minifyEnabled false //是否支持Zip Align zipAlignEnabled true //是否清理無用資源 shrinkResources true //混淆文件指定 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' //簽名指定 signingConfig signingConfigs.release } } //相關(guān)源路徑的設(shè)置 sourceSets{ main{ manifest.srcFile 'AndroidManifest.xml' java.srcDirs = ['src'] resources.srcDirs = ['src'] aidl.srcDirs = ['src'] renderscript.srcDirs = ['src'] res.srcDirs = ['res'] assets.srcDirs = ['assets'] jniLibs.srcDirs = ['libs'] } }}//依賴配置dependencies { //本地依賴文件樹 compile fileTree(dir: 'libs', include: ['*.jar']) //遠(yuǎn)程依賴 compile '...' //遠(yuǎn)程編譯時依賴庫但不包含該庫,防止重復(fù)包含引起包沖突 provided '...' //本地依賴文件 compile files('...') //本地編譯時依賴文件,不包含該文件 provided files('...') //本地依賴工程 compile project('...')}123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
4 gradle.properties文件介紹 該文件一般用來存儲工程范圍內(nèi)的全局屬性,而如果是與開發(fā)者個人相關(guān)且不便納入版本控制的屬性,則放到 $HOME/.gradle 下的 gradle.properties 文件,比如簽署app的密鑰等。
三、多渠道打包配置
1.在AndroidManifest.xml中設(shè)置PlaceHolder(占位符) 在application下添加
<meta-data android:name="渠道名稱" //渠道名稱,可以使用android:value="${變量名}",假如變量名為XYY_FLAVORS,下面使用該變量進(jìn)行說明 android:value="渠道ID" />1234512345
2.在對應(yīng)module中的build.gradle文件中設(shè)置productFlavors(渠道信息) 首先在defaultConfig下設(shè)置默認(rèn)渠道
manifestPlaceholders = [XYY_FLAVORS: "渠道ID"]11
然后在android下指定需要打包的渠道信息
productFlavors { 渠道ID1 {} 渠道ID2 {} 渠道ID3 {} 渠道ID4 {} ...}productFlavors.all { flavor -> flavor.manifestPlaceholders = [XYY_FLAVORS: name]}1234567891012345678910
最后在buidTypes的release下指定發(fā)布時的渠道包名稱
applicationVariants.all { variant -> variant.outputs.each { output -> def outputFile = output.outputFile if(outputFile != null && outputFile.name.endsWith(".apk")){ def fileName = "xyy_v${defaultConfig.versionName}_${variant.productFlavors[0].name}.apk" output.outputFile = new File(outputFile.parent, fileName) } }}123456789123456789
3.使用assemble命令進(jìn)行打包 使用./gradlew assemble+productFlavor+buildType進(jìn)行打包,如: ./gradlew assembleBaiduRelease指定Baidu的release版本; ./gradlew assembleBaidu指定Baidu的release和debug版本; ./gradlew assembleRelease指定所有渠道的release版本; ./gradlew assemble指定所有渠道的release和debug版本。
四、Maven倉庫管理配置 1、本地配置,針對所有該用戶下所有工程 在$HOME/.gradle下添加init.gradle文件,這是Gradle初始化腳本,也是面向用戶的全局配置,配置如下:
allprojects{repositories { def REPOSITORY_URL = '本地倉庫路徑' //主要邏輯是判定如果是maven2及jcenter倉庫,都先執(zhí)行本地倉庫 all { ArtifactRepository repo -> if(repo instanceof MavenArtifactRepository){ def url = repo.url.toString() if (url.startsWith('https://repo1.maven.org/maven2') || url.startsWith('https://jcenter.bintray.com/')) { project.logger.lifecycle "Repository ${repo.url} replaced by $REPOSITORY_URL." remove repo } } } maven { url REPOSITORY_URL } }}123456789101112131415161718123456789101112131415161718
2、在對應(yīng)工程的build.gradle配置
allprojects { repositories { maven{ credentials{ username '用戶名' password '密碼' } url '本地倉庫路徑' } //jcenter() //mavenLocal() }}1234567891011121312345678910111213
3、上傳代碼到本地倉庫配置 在需要上傳的module下的build.gradle中添加如下配置
apply plugin:'maven'uploadArchives{ repositories{ mavenDeployer{ //指定groupId,在倉庫下展示為路徑com/xyy/example pom.groupId = "com.xyy.example" //指定版本號 pom.version = "1.0.0" repository(url: "本地倉庫路徑"){ authentication(userName: 用戶名, password: 密碼) } } }}12345678910111213141234567891011121314
五、自動化測試配置在需要進(jìn)行測試的module下的build.gradle文件中添加
apply from: '../config/quality.gradle'11
在工程下新建config文件夾,將如下路徑https://github.com/xiaoyaoyou1212/vb-android-app-quality/tree/master/config下的文件下載后放置到該文件夾下,再在該工程下使用gradle findbugs、gradle checkstyle、gradle lint及gradle pmd進(jìn)行代碼檢查,檢查的結(jié)果會在build下的reports文件夾下。
六、參考鏈接
Gradle插件用戶指南(譯)擁抱Gradle:下一代自動化工具Gradle腳本基礎(chǔ)全攻略
新聞熱點(diǎn)
疑難解答