Android Studio之gradle的配置與介紹

1蚪缀、gradle的簡單介紹

Gradle是可以用于Android開發(fā)的新一代的Build System,也是Android Studio默認(rèn)的build工具恕出。其實(shí)Gradle腳本是基于一種JVM語言— Groovy询枚,再加上DSL組成的。由于Groovy是JVM語言浙巫,所以可以使用大部分的Java語言庫金蜀。所謂DSL就是專門針對Android開發(fā)的插件,比如標(biāo)準(zhǔn)Gradle之外的一些新的方法(Method)的畴、閉包(Closure)等等渊抄。通過我們簡單的了解知道Gradle的語法足夠簡潔和簡單,而且可以使用大部分的java包苗傅,所以它就當(dāng)之無愧地成為新一代的Build System抒线。

我想使用過Android Studio的都知道,使用Android Studio新建一個工程后渣慕,默認(rèn)會生成兩個build.gralde文件嘶炭,一個位于工程根目錄,一個位于app目錄下逊桦。如下所示:

$ find -name build.gradle

./app/build.gradle

./build.gradle

還有另外一個文件 --settings.gradle眨猎。

根目錄下的腳本文件是針對module的全局配置,它的作用域所包含的所有module是通過settings.gradle來配置强经。

app文件夾就是一個module睡陪,如果在當(dāng)前工程中添加了一個新的module — lib,就需要在settings.gralde文件中包含這個新的module匿情。

2兰迫、深入了解其基本結(jié)構(gòu)

我們用工程例子來深入的了解一下它的基本結(jié)構(gòu)。

①炬称、根目錄的build.gradle的內(nèi)容所示如下:

buildscript {

repositories {

jcenter()

}

dependencies {

classpath 'com.android.tools.build:gradle:1.0.0-rc4'

}

}

allprojects {

repositories {

jcenter()

maven {

url 'http://mvnrepo.xxx.com/mvn/repository'

}

}

}

解釋:classpath 'com.android.tools.build:gradle:1.0.0-rc4'就是Android特有的插件汁果,maven倉庫地址通過方法jCenter() 獲取,這也是默認(rèn)的maven倉庫玲躯。當(dāng)然也可以添加額外的maven倉庫地址据德,例如以上文件中的

maven {

url 'http://mvnrepo.xxx.com/mvn/repository'

}

②、app目錄下的build.gradle的內(nèi)容展示如下:

//設(shè)置腳本的運(yùn)行環(huán)境

buildscript {

//支持java 依賴庫管理(maven/ivy),用于項目的依賴跷车。

repositories {

mavenCentral()

}

//依賴包的定義棘利。支持maven/ivy,遠(yuǎn)程朽缴,本地庫善玫,也支持單文件

dependencies {

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

}

}

//聲明構(gòu)建的項目類型,這里當(dāng)然是android了

apply plugin: 'android'

//設(shè)置編譯android項目的參數(shù)

android {

compileSdkVersion 17

buildToolsVersion "17"

defaultConfig {

minSdkVersion 8

targetSdkVersion 17

}

//Android默認(rèn)配置

sourceSets {

main {

manifest.srcFile 'AndroidManifest.xml'

java.srcDirs = ['src']

resources.srcDirs = ['src']

aidl.srcDirs = ['src']

renderscript.srcDirs = ['src']

res.srcDirs = ['res']

assets.srcDirs = ['assets']

}

//測試所在的路徑密强,這里假設(shè)是tests文件夾蝌焚,沒有可以不寫這一行

instrumentTest.setRoot('tests')

}

//這個是解決lint報錯的代碼

lintOptions {

abortOnError false

}

/**

* 簽名設(shè)置

*/

signingConfigs {

myConfigs {

storeFile file("簽名文件地址")

keyAlias "..."

keyPassword "..."

storePassword "..."

}

}

/**

* 混淆設(shè)置

*/

buildTypes {

release {

signingConfig signingConfigs.myConfigs

runProguard true

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

}

}

/**

* 渠道打包(不同包名)

*/

productFlavors {

qqqq {

applicationId = '包名'

}

hhhhh {

applicationId='包名'

}

}

}

/**

* .so文件的導(dǎo)入

*/

task copyNativeLibs(type: Copy) {

from fileTree(dir: 'libs', include: 'armeabi/*.so') into 'build/lib'

}

tasks.withType(Compile) {

options.encoding = "UTF-8"

}

tasks.withType(Compile) {

compileTask -> compileTask.dependsOn copyNativeLibs

}

clean.dependsOn 'cleanCopyNativeLibs'

tasks.withType(com.android.build.gradle.tasks.PackageApplication) { pkgTask ->

pkgTask.jniFolders = [new File(buildDir, 'lib')]

}

//依賴庫

dependencies {

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

}

包依賴使用aar時分為本地依賴和遠(yuǎn)程依賴裹唆,分別如下:

本地依賴:

gradle 作為構(gòu)建工具誓斥,能夠很方便的使用本地jar包只洒,以下為使用的代碼塊:

dependencies {

//單文件依賴

compile files('libs/android-support-v4.jar')

//某個文件夾下面全部依賴

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

}

android {

}

遠(yuǎn)程依賴:

gradle 同時支持maven,ivy劳坑,我們用maven 作為例子毕谴,以下為代碼塊:

repositories {

//從中央庫里面獲取依賴

mavenCentral()

//或者使用指定的本地maven 庫

maven{

url "file://F:/githubrepo/releases"

}

//或者使用指定的遠(yuǎn)程maven庫

maven{

url "遠(yuǎn)程庫地址"

}

}

dependencies {

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

compile 'com.google.android:support-v4:r13'}

android {

}

對于項目依賴 android library的話,就不是依賴一個jar距芬,那么簡單了涝开,在這里需要使用gradle mulit project 機(jī)制。在過去框仔,android library并沒有一個很好的包管理方式舀武,簡單來說,在gradle出現(xiàn)以前离斩,官方并沒有一種用于管理android library 依賴包的方式银舱,一般我們都是直接下載別人的android library project 源碼進(jìn)行集成,而對于第三方的android-maven-plugin 用的是apklib 格式跛梗。而現(xiàn)在寻馏,官方終于推出一種android library的打包格式,擴(kuò)展名為*.aar核偿。前面提到诚欠,目前android gradle插件并不支持本地直接使用*.aar文件,對android library 進(jìn)行打包直接在library項目下面使用gradle build 即可漾岳,然后轰绵,你就會在 build/libs 目錄下看到兩個*.aar文件,一個debug包用的尼荆,一個是release 下用的左腔,看個人需求使用,這里我們用的是release 版本的 .aar 文件耀找。

引用腳本跟前面講的依賴庫相似:

dependencies {

compile(name: 'pulltorefresh', ext: 'aar')

}

包依賴jar:

依賴多個jar時:

compile group: 'com.alibaba', module: 'fastjson', version: 'latest.integration'

我們其實(shí)可以簡寫成:

compile 'com.alibaba:fastjson:latest.integration'

而latest.integration可以替換成具體的版本號翔悠,這里是獲取服務(wù)器上的最新版本。

如果要去除重復(fù)依賴可以這樣:

compile 'com.alibaba.fastjson.latest.integration' {

exclude module: 'annotations', group: 'com.google.android'

}

3野芒、命令執(zhí)行腳本

在Android工程根目錄下會自動生成一個shell腳本 - gradlew蓄愁,執(zhí)行之前記得加上x屬性 - chomod +x gradlew

gradle腳本中包含了很多 task,可以通過task名來指定需要執(zhí)行的task狞悲。

./gradlew build./gradlew assemble./gradlew assembleInnderDebug

4撮抓、總結(jié)說明

我估計現(xiàn)在大部分開發(fā)的項目普遍使用的是maven,但是不知道為什么摇锋,使用Gradle時經(jīng)常會遇到一些無法獲取遠(yuǎn)程依賴包的問題丹拯,最簡單的解決辦法就是把依賴包下載的本地站超。所以建議大家盡量使用本地依賴。如果介紹了這些你還不是太明白乖酬,那你可以自己在網(wǎng)上搜一些相關(guān)的知識學(xué)習(xí)學(xué)習(xí)死相,或者自己找些資料進(jìn)行了解,最好的學(xué)習(xí)就是挑戰(zhàn)自己而不是依賴別人咬像。

個人組織了一個高端Android微信交流群算撮,有意向的可以先分享此文章到朋友圈,再加我微信县昂,發(fā)送分享到朋友圈的截圖給我肮柜,我把你拉進(jìn)去。保你學(xué)到更多知識倒彰,可以第一時間收到干貨推送审洞。

公眾號“非著名程序員”,每天一篇原創(chuàng)技術(shù)分享和移動互聯(lián)網(wǎng)知識分享待讳,微信公眾號:smart_android 芒澜,歡迎大家關(guān)注。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末耙箍,一起剝皮案震驚了整個濱河市撰糠,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌辩昆,老刑警劉巖阅酪,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異汁针,居然都是意外死亡术辐,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進(jìn)店門施无,熙熙樓的掌柜王于貴愁眉苦臉地迎上來辉词,“玉大人,你說我怎么就攤上這事猾骡∪鹛桑” “怎么了?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵兴想,是天一觀的道長幢哨。 經(jīng)常有香客問我,道長嫂便,這世上最難降的妖魔是什么捞镰? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上岸售,老公的妹妹穿的比我還像新娘践樱。我一直安慰自己,他們只是感情好凸丸,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布拷邢。 她就那樣靜靜地躺著,像睡著了一般甲雅。 火紅的嫁衣襯著肌膚如雪解孙。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天抛人,我揣著相機(jī)與錄音,去河邊找鬼脐瑰。 笑死妖枚,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的苍在。 我是一名探鬼主播绝页,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼寂恬!你這毒婦竟也來了续誉?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤初肉,失蹤者是張志新(化名)和其女友劉穎酷鸦,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體牙咏,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡臼隔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了妄壶。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片摔握。...
    茶點(diǎn)故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖丁寄,靈堂內(nèi)的尸體忽然破棺而出氨淌,到底是詐尸還是另有隱情,我是刑警寧澤伊磺,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布盛正,位于F島的核電站,受9級特大地震影響奢浑,放射性物質(zhì)發(fā)生泄漏蛮艰。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望壤蚜。 院中可真熱鬧即寡,春花似錦、人聲如沸袜刷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽著蟹。三九已至墩蔓,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間萧豆,已是汗流浹背奸披。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留涮雷,地道東北人阵面。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像洪鸭,于是被迫代替她去往敵國和親样刷。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評論 2 348

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