Android Gradle 新手入門

1.? 什么是Gradle综芥?

Gradle 是一個基于Ant和Maven概念的項目自動化建構(gòu)工具蹈集。

2.? Gradle 基本概念

下圖是很基本的Android Gradle工程谐岁,目錄結(jié)構(gòu)也是正常的Gradle工程的樣式趴久。下載地址

2.1 ?StudyGradle/build.gradle(圖標(biāo)1)

這個文件是整個項目的gradle基礎(chǔ)配置文件:

buildscript {// 腳步運行環(huán)境

repositories {// 用于項目依賴

// 中央遠程倉庫

jcenter()

}

dependencies {

// gradle版本

classpath'com.android.tools.build:gradle:1.2.3'

// NOTE: Do not place your application dependencies here; they belong

// in the individual module build.gradle files

}

}

allprojects {

repositories {

jcenter()

}

}

這里主要描述了兩個方面:

1. gradle 版本

2. 倉庫的源地址

2.2 ?StudyGradle/app/build.gradle(圖標(biāo)2)

這個文件是Module名稱為app的gradle的配置文件运提,在此項目中是主要的gradle配置文件苍在。

//聲明插件類型,這里聲明的是Android程序

apply plugin:'com.android.application'

android {

//編譯SDK的版本

compileSdkVersion22

//build tools 的版本 對應(yīng)Android SDK Build-tools

buildToolsVersion"21.1.2"

defaultConfig {

//應(yīng)用包名

applicationId"com.example.dpt.studygradledemo"

minSdkVersion21

targetSdkVersion22

versionCode1

versionName"1.0"

}

buildTypes {//構(gòu)建類型晃虫,常用的有release和debug兩種皆撩,可以在這里面啟用混淆,啟用zipAlign以及配置簽名信息等

release {

//是否進行混淆

minifyEnabled false

//混淆文件位置

proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-rules.pro'

}

}

// 移除lint檢查的error

lintOptions {

abortOnError false

}

}

dependencies {

// 編譯依賴libs目錄下的所有jar包

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

// //應(yīng)用格式: packageName:artifactId:version

// 依賴 support-v4

compile'com.android.support:support-v4:22.2.0'

// 依賴 card view

compile'com.android.support:cardview-v7:22.2.0'

// 依賴 library module

compile project(':demolibrary')

compile'com.android.support:palette-v7:22.2.0'

}

ps:

1. 開頭第一行apply plugin: ‘com.android.application’哲银,這表示該module是一個app module扛吞,應(yīng)用了com.android.application插件,如果是一個android library荆责,那么這里的是apply plugin: ‘com.android.library’滥比。'com.android.application'是較新的寫法,但不是最新的寫法做院。

2. buildToolsVersion 對應(yīng)Android SDK Build-tools的版本盲泛,如圖


2.2.1 ?buildTypes{}

buildTypes是構(gòu)建類型濒持,常用的有release和debug兩種,可以在這里面啟用混淆寺滚,啟用zipAlign以及配置簽名信息等柑营。


2.2.2 ?defaultConfig{}

這里描述的是一些項目基礎(chǔ)默認(rèn)配置

常用的屬性有:versionCode,versionName,minSdkVersion,targetSdkVersion,applicationId等


2.2.3 ?dependencies{}

dependencies就不屬于Android專有的配置了,它定義了該module需要依賴的jar村视,aar官套,jcenter庫信息。

1. compile fileTree(dir: 'libs', include: ['*.jar']) 編譯依賴libs目錄下的所有jar包

2. compile 'com.android.support:support-v4:22.2.0' 依賴 support-v4

3. compile project(':demolibrary') 依賴其他module

ps:

其中依賴開源組件的格式為:packageName:artifactId:version 例如蓖议,compile 'com.android.support:support-v4:22.2.0'

StudyGradle/demolibrary/build.gradle(圖標(biāo)2)

這個是一個依賴庫的module配置文件

//聲明Android library

apply plugin:'com.android.library'

android {

//編譯SDK版本

compileSdkVersion22

//build tools 的版本 對應(yīng)Android SDK Build-tools

buildToolsVersion"21.1.2"

defaultConfig {

minSdkVersion21

targetSdkVersion22

versionCode1

versionName"1.0"

}

buildTypes {

release {

minifyEnabled false

proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-rules.pro'

}

}

}

dependencies {

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

}

ps:

1. 這里需要注意的是apply plugin 這里聲明為Android library

2.3 ?StudyGradle/build.gradle(圖標(biāo)3)

這個文件是全局的項目配置文件虏杰,里面主要聲明一些需要加入gradle的module

include':app',':demolibrary'

2.4 ?Gradle Wrapper(圖標(biāo)4)

android studio希望你能在電腦上不安裝gradle的情況下,依然使用gradle管理android項目勒虾,因此通過AS創(chuàng)建的每個項目都會內(nèi)嵌一個gradle wrapper纺阔,作用是檢查你當(dāng)前的共工作環(huán)境是否安裝了創(chuàng)建本項目時所用的gradle版本。

如果沒有修然,它會自動下載相應(yīng)的gradle放在~/.gradle/wrapper.目錄下笛钝。這樣當(dāng)你在你的項目里使用gradle時,可以通過gradlw命令使用當(dāng)前項目環(huán)境的gradle版本愕宋,而不受環(huán)境變量的影響玻靡。

很多人會遇到一個項目build很久,很大一部分原因就是因為這個中贝,他會去下載自帶的gradle wrapper囤捻,50多M,大部分情況下需要翻墻

如果不能翻墻邻寿,也可以更改**gradle-wrapper.properties**的配置

1

2

3

4

5distributionBase=GRADLE_USER_HOME

distributionPath=wrapper/dists

zipStoreBase=GRADLE_USER_HOME

zipStorePath=wrapper/dists

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

3. 打包

3.1 Gradle Flavor

寫項目的時候經(jīng)常會遇到以下的情況:

1. 需要生成測試版本和正式版本的apk

2. 測試版本和正式版本的URL是不一樣的

3. 測試版本和正式版本的包名需要不一致蝎土,這樣才能安裝到同一部手機上面。

4. 不同apk需要應(yīng)用名不同绣否,圖標(biāo)不同誊涯,某些常量不同....

>通過Productflavor你可以配置此flavor對應(yīng)的包名,簽名信息蒜撮,版本名暴构, 版本號等,具體可配置項可以到這里[查看](http://apdr.qiniudn.com/com.android.build.gradle.internal.dsl.ProductFlavor.html)段磨。

productFlavors{

max1 {

applicationId"com.example.dpt.gradle.max1"

}

x1 {

applicationId"com.example.dpt.gradle.x1"

}

}

輸出所有apk

1

./gradlewassemble

輸出任意flavor

1

./gradlewassembleX1

> 生成的apk在StudyGradle/app/build/outputs/apk/目錄下

3.2 簡單使用場景

3.2.1 使用不同包名

國內(nèi)應(yīng)用市場取逾、渠道眾多,更換包名是最簡單的需求了

productFlavors{

max1 {

applicationId"com.example.dpt.gradle.max1"

}

x1 {

applicationId"com.example.dpt.gradle.x1"

}

}

3.2.2 buildConfig(控制變量)

Gradle會在產(chǎn)生源碼階段為flavor生成一個BuildConfig.java文件薇溃。BuildConfig類默認(rèn)提供了一些常量字段菌赖,比如應(yīng)用的版本名(VERSION_NAME),應(yīng)用的包名(PACKAGE_NAME)等沐序。更強大的是琉用,開發(fā)者還可以添加自定義的一些字段。

android {

defaultConfig {

//自定義boolean型常量

buildConfigField ('boolean','AUTO_UPLOAD','false')

//自定義String型常量

buildConfigField('String','SERVER_URI','"默認(rèn) uri"')

}

productFlavors{

max1 {

applicationId"com.example.dpt.gradle.max1"

//自定義boolean型常量

buildConfigField ('boolean','AUTO_UPLOAD','true')

//自定義String型常量

buildConfigField('String','SERVER_URI','"Max uri"')

//自定義res常量

resValue('string','app_name','MAX')

}

x1 {

applicationId"com.example.dpt.gradle.x1"

//自定義String型常量

buildConfigField('String','SERVER_URI','"X1 uri"')

//自定義res常量

resValue('string','app_name','X1')

}

}

}

3.2.3 這還遠遠不夠

>如果我們想更換大量文案策幼,圖標(biāo)邑时,布局,甚至是不同版本使用有差異的控件怎么辦特姐?

可在**src**文件夾下創(chuàng)建同**Flavor**晶丘,在里面可以對各種不同的Flavor,編寫不同的需求唐含。

在Demo中浅浮,兩個不同的Flavor在詳情頁,使用了不同的布局和控件捷枯。

![enter image description here](http://7d9pic.com1.z0.glb.clouddn.com/gradle_flavor.png)

具體代碼在Demo中的part2滚秩,分支

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市淮捆,隨后出現(xiàn)的幾起案子郁油,更是在濱河造成了極大的恐慌,老刑警劉巖攀痊,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件桐腌,死亡現(xiàn)場離奇詭異,居然都是意外死亡苟径,警方通過查閱死者的電腦和手機案站,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來棘街,“玉大人蟆盐,你說我怎么就攤上這事〉疟蹋” “怎么了舱禽?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長恩沽。 經(jīng)常有香客問我誊稚,道長,這世上最難降的妖魔是什么罗心? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任里伯,我火速辦了婚禮,結(jié)果婚禮上渤闷,老公的妹妹穿的比我還像新娘疾瓮。我一直安慰自己,他們只是感情好飒箭,可當(dāng)我...
    茶點故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布狼电。 她就那樣靜靜地躺著蜒灰,像睡著了一般。 火紅的嫁衣襯著肌膚如雪肩碟。 梳的紋絲不亂的頭發(fā)上强窖,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天,我揣著相機與錄音削祈,去河邊找鬼翅溺。 笑死,一個胖子當(dāng)著我的面吹牛髓抑,可吹牛的內(nèi)容都是我干的咙崎。 我是一名探鬼主播,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼吨拍,長吁一口氣:“原來是場噩夢啊……” “哼褪猛!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起密末,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤握爷,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后严里,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體新啼,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年刹碾,在試婚紗的時候發(fā)現(xiàn)自己被綠了燥撞。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡迷帜,死狀恐怖物舒,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情戏锹,我是刑警寧澤冠胯,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站锦针,受9級特大地震影響荠察,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜奈搜,卻給世界環(huán)境...
    茶點故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一悉盆、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧馋吗,春花似錦焕盟、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽灼卢。三九已至,卻和暖如春堰怨,著一層夾襖步出監(jiān)牢的瞬間芥玉,已是汗流浹背蛇摸。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工备图, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人赶袄。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓揽涮,卻偏偏與公主長得像,于是被迫代替她去往敵國和親饿肺。 傳聞我的和親對象是個殘疾皇子蒋困,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,452評論 2 348

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,737評論 25 707
  • 轉(zhuǎn)載注明出處:http://www.reibang.com/p/5255b100930e 0. 前言 完全由個人翻...
    王三的貓阿德閱讀 2,504評論 0 4
  • Gradle配置最佳實踐 本文會不定期更新,推薦watch下項目敬辣。如果喜歡請star雪标,如果覺得有紕漏請?zhí)峤籭ssu...
    Solang閱讀 1,629評論 0 4
  • 為什么要使用多線程? 1. 使用更多的處理器核心 2. 更快的響應(yīng)時間 3. 更好的編程模型 線程優(yōu)先級 在Jav...
    士多啤梨蘋果橙_cc15閱讀 166評論 0 0
  • 其實這篇文章是存了很久的草稿溉跃,寫了一半沒有繼續(xù)完稿村刨。終于得空繼續(xù)完善它,之后還會抽時間繼續(xù)研究Spring AOP...
    鳴鳴那只羊閱讀 5,121評論 1 8