多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內(nèi)最全I(xiàn)T社區(qū)平臺(tái) 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁 > php開源 > 綜合技術(shù) > 【安卓筆記】gradle入門

【安卓筆記】gradle入門

來源:程序員人生   發(fā)布時(shí)間:2015-04-14 08:50:14 閱讀次數(shù):17641次
隨著Android Studio愈來愈完善,更多的開發(fā)者舍棄掉Eclipse。但是新的IDE與以往的Eclipse有很大區(qū)分,這致使部份開發(fā)者望而生畏,其中1個(gè)大家覺得比較麻煩的是Android Studio采取的新的構(gòu)建系統(tǒng),gradle。那末這篇文章我將對(duì)gradle進(jìn)行1個(gè)簡單介紹(主要講gradle配合Android Studio的使用),希望幫助大家熟習(xí)gradle。

1. gradle是甚么?
gradle跟ant/maven1樣,是1種依賴管理/自動(dòng)化構(gòu)建工具。但是跟ant/maven不1樣,它并沒有使用xml語言,而是采取了Groovy語言,這使得它更加簡潔、靈活,更加強(qiáng)大的是,gradle完全兼容maven和ivy。更多詳細(xì)介紹可以看它的官網(wǎng):http://www.gradle.org/
 

2.為何使用gradle?

更容易重用資源和代碼;
可以更容易創(chuàng)建不同的版本的程序,多個(gè)類型的apk包;
更容易配置,擴(kuò)大;
更好的IDE集成;


3.gradle入門需知

  1.基本配置:
首先明確gradle跟maven1樣,也有1個(gè)配置文件,maven里面是叫pom.xml,而在gradle中是叫build.gradle。Android Studio中的android項(xiàng)目通常最少包括兩個(gè)build.gradle文件,1個(gè)是project范圍的,另外一個(gè)是module范圍的,由于1個(gè)project可以有多個(gè)module,所以每一個(gè)module下都會(huì)對(duì)應(yīng)1個(gè)build.gradle。這么說有點(diǎn)抽象,看下面這個(gè)圖:

這是1個(gè)android工程的project視圖,上面那個(gè)是module下的build.gradle文件。下面那個(gè)是project下的build.gradle文件。這兩個(gè)文件是有區(qū)分的,project下的build.gradle是基于全部project的配置,而module下的build.gradle是每一個(gè)模塊自己的配置。下面看下這兩個(gè)build.gradle里面的內(nèi)容:

project#build.gradle:
// Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { //構(gòu)建進(jìn)程依賴的倉庫 repositories { jcenter() } //構(gòu)建進(jìn)程需要依賴的庫 dependencies {//下面聲明的是gradle插件的版本 classpath 'com.android.tools.build:gradle:1.1.0' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } } //這里面配置全部項(xiàng)目依賴的倉庫,這樣每一個(gè)module就不用配置倉庫了 allprojects { repositories { jcenter() } }
注:大家可能很奇怪,為何倉庫repositories需要聲明兩次,這實(shí)際上是由于它們作用不同,buildscript中的倉庫是gradle腳本本身需要的資源,而allprojects下的倉庫是項(xiàng)目所有模塊需要的資源。所以大家千萬不要配錯(cuò)了。

module#build.gradle:
//聲明插件,這是1個(gè)android程序,如果是android庫,應(yīng)當(dāng)是com.android.library apply plugin: 'com.android.application' android {//安卓構(gòu)建進(jìn)程需要配置的參數(shù) compileSdkVersion 21//編譯版本 buildToolsVersion "21.1.2"//buildtool版本 defaultConfig {//默許配置,會(huì)同時(shí)利用到debug和release版本上 applicationId "com.taobao.startupanim"//包名 minSdkVersion 15 targetSdkVersion 21 versionCode 1 versionName "1.0" } buildTypes {//這里面可以配置debug和release版本的1些參數(shù),比如混淆、簽名配置等 release {//release版本 minifyEnabled false//是不是開啟混淆 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'//混淆文件位置 } } } dependencies {//模塊依賴 compile fileTree(dir: 'libs', include: ['*.jar'])//依賴libs目錄下所有jar包 compile 'com.android.support:appcompat-v7:21.0.3'//依賴appcompat庫 }
defaultConfig中是1些基本配置,它會(huì)同時(shí)利用到debug/release版本上,下面羅列了所有可配項(xiàng)及對(duì)應(yīng)的值:


buildTypes結(jié)點(diǎn)很重要,這里可以配置構(gòu)建的版本的1些參數(shù),默許有兩個(gè)構(gòu)建版本release/debug,固然你可以自定義1個(gè)構(gòu)建版本,比如叫foo,然后通過gradlew assembleFoo就能夠生成對(duì)應(yīng)的apk了。
buildTypes里還有很多可配置項(xiàng),下面羅列了所有可配項(xiàng)和debug/release版本的默許值:

現(xiàn)在大家對(duì)build.gradle已初步了解了,我們?cè)倏聪缕渌?些與gradle相干的文件:
1.gradle.properties:
從名字上就知道它是1個(gè)配置文件,沒錯(cuò),這里面可以定義1些常量供build.gradle使用,比如可以配置簽名相干信息如keystore位置,密碼,keyalias等。
2.settings.gradle:
這個(gè)文件是用來配置多模塊的,比如你的項(xiàng)目有兩個(gè)模塊module-a,module-b,那末你就需要在這個(gè)文件中進(jìn)行配置,格式以下:
include ':module-a',':module-b'
3.gradle文件夾:
這里面有兩個(gè)文件,gradle-wrapper.jar和gradle-wrapper.properties,它們就是gradle wrapper。gradle項(xiàng)目都會(huì)有,你可以通過命令gradle init來創(chuàng)建它們(條件是本地安裝了gradle并且配置到了環(huán)境變量中)。

4.gradlew和gradlew.bat:
這分別是linux下的shell腳本和windows下的批處理文件,它們的作用是根據(jù)gradle-wrapper.properties文件中的distributionUrl下載對(duì)應(yīng)的gradle版本。這樣就能夠保證在不同的環(huán)境下構(gòu)建時(shí)都是使用的統(tǒng)1版本的gradle,即便該環(huán)境沒有安裝gradle也能夠,由于gradle wrapper會(huì)自動(dòng)下載對(duì)應(yīng)的gradle版本。
gradlew的用法跟gradle1模1樣,比如履行構(gòu)建gradle build命令,你可以用gradlew build。gradlew即gradle wrapper的縮寫。

2.gradle倉庫:
gradle有3種倉庫,maven倉庫,ivy倉庫和flat本地倉庫。聲明方式以下:
maven{ url "..." } ivy{ url "..." } flatDir{ dirs 'xxx' }
有1些倉庫提供了別名,可直接使用:
repositories{ mavenCentral() jcenter() mavenLocal() }
3.gradle任務(wù):
gradle中有1個(gè)核心概念叫任務(wù),跟maven中的插件目標(biāo)類似。
gradle的android插件提供了4個(gè)頂級(jí)任務(wù)
assemble 構(gòu)建項(xiàng)目輸出 check 運(yùn)行檢測(cè)和測(cè)試任務(wù) build 運(yùn)行assemble和check clean 清算輸出任務(wù)
履行任務(wù)可以通過gradle/gradlew+任務(wù)名稱的方式執(zhí),履行1個(gè)頂級(jí)任務(wù)會(huì)同時(shí)履行與其依賴的任務(wù),比如你履行
gradlew assemble
它通常會(huì)履行:
gradlew assembleDebug gradlew assembleRelease
這時(shí)候會(huì)在你項(xiàng)目的build/outputs/apk或build/outputs/aar目錄生成輸出文件

注:linux下履行構(gòu)建任務(wù)需要首先更改gradlew腳本的權(quán)限,然后才能履行該腳本:
chmod +x gradlew ./gradlew assemble
可以通過:
gradlew tasks
列出所有可用的任務(wù)。在Android Studio中可以打開右邊gradle視圖查看所有任務(wù)。

4.常見問題

1.導(dǎo)入本地jar包:
跟eclipse不太1樣,android studio導(dǎo)入本地jar除將jar包放到模塊的libs目錄中之外,還得在該模塊的build.gradle中進(jìn)行配置,配置方式是在dependencies結(jié)點(diǎn)下進(jìn)行以下聲明:
compile files('libs/xxx.jar')
如果libs下有多個(gè)jar文件,可以這樣聲明:
compile fileTree(dir: 'libs', include: ['*.jar'])

2.導(dǎo)入maven庫:
compile 'com.android.support:appcompat-v7:21.0.3'
可見,格式為
compile 'groupId:artifactId:version'

3.導(dǎo)入某個(gè)project:
你的app是多模塊的,假定有兩個(gè)模塊app和module-A,并且app模塊是依賴module-A的,這時(shí)候候我們就需要在app模塊的build.gradle中的dependencies結(jié)點(diǎn)下配置依賴:
compile project(':module-A')
并且你需要在settings.gradle中把module-A模塊包括進(jìn)來:
include ':module-A',':app'
另外,這類情況下module-A模塊是作為庫存在的,因此它的build.gradle中的插件聲明通常應(yīng)當(dāng)是這樣的:
apply plugin: 'com.android.library'
而且,作為library的模塊module-A的build.gradle文件的defaultConfig中是不允許聲明applicationId的,這點(diǎn)需要注意。

4.聲明3方maven倉庫:
可能你項(xiàng)目需要的1些庫文件是在你們公司的私服上,這時(shí)候候repositories中唯一jcenter就不行了,你還需要把私服地址配到里面來,注意,應(yīng)當(dāng)配到project的build.gradle中的allprojects結(jié)點(diǎn)下或直接配到某個(gè)模塊中如果唯一這個(gè)模塊用到。
配置方式:
repositories{ maven{ url="http://mvnrepo.xxx.com" } }

5.依賴3方aar文件:
compile 'com.aaa.xxx:core:1.0.1@aar'

6.將庫項(xiàng)目導(dǎo)出為aar:
首先你的項(xiàng)目必須是1個(gè)庫項(xiàng)目,build.gradle中進(jìn)行配置:
apply plugin : 'com.android.library'
然后你可以在命令行中進(jìn)到項(xiàng)目目錄,履行以下gradle任務(wù):
gradlew assembleRelease//確保該目錄下有g(shù)radlew文件
生成的aar在/build/output/aar文件夾中
7.援用本地aar:
 首先將aar文件放到模塊的libs目錄下,然后在該模塊的build.gradle中聲明flat倉庫:
repositories{ flatDir{ dirs 'libs' } }
最后在dependencies結(jié)點(diǎn)下依賴該aar模塊:
dependencies{ compile (name:'xxx',ext:'aar') }
8.排除依賴:
當(dāng)出現(xiàn)依賴沖突的時(shí)候可以通過排除依賴解決,具體方式以下:
compile (group:'xxx',name:'xxx',version:'xxx'){ exclude group:'xxx',module:'xxx'//module對(duì)應(yīng)的就是artifactId }


9.多dex支持(打包65k方法數(shù)限制)
 首先在build.gradle的buildConfig中增加以下配置:
multiDexEnabled true
接著,在dependencies結(jié)點(diǎn)下增加以下依賴:
dependencies{ compile 'com.android.support:multidex:1.0.0' }
最后,讓你的Application繼承MultiDexApplication,如果你的利用沒有聲明Application,可以在manifest文件的application結(jié)點(diǎn)下增加name屬性,值為android.support.multidex.MultiDexApplication。
詳細(xì)內(nèi)容參見官方文檔。

10.自動(dòng)移除不用資源
 可以在buildTypes結(jié)點(diǎn)中增加以下配置:
buildTypes{ release{ minifyEnabled true shrinkResources true } }
11.疏忽lint毛病:
可以在build.gradle文件中的android結(jié)點(diǎn)下增加以下配置:
android{ lintOptions{ abortOnError false } }
12.聲明編譯的java版本
可以在build.gradle文件中的android結(jié)點(diǎn)下增加以下配置:
compileOptions { sourceCompatibility JavaVersion.VERSION_1_7 targetCompatibility JavaVersion.VERSION_1_7 }

13.利用簽名配置
首先在module的build.gradle中增加這些字段:
storeFiles:keystore文件存儲(chǔ)位置,通常是.jks文件 storePassword 密碼 keyAlias keystore別名 keyPassword 密碼

具體配置方式為:
首先在build.gradle的android結(jié)點(diǎn)下增加以下配置:
signingConfigs { //debug版本的簽名配置,通常不用配,由于有默許的debug簽名 debug { } release { storeFile file("key.jks") storePassword "123456" keyAlias "mykey" keyPassword "123456" } }

注:debug的默許簽名為:

signingConfig android.signingCongfigs.debug
位置為
${home}.androiddebug.keystore
然后在buildTypes結(jié)點(diǎn)下的對(duì)應(yīng)版本中添加上面的配置:
buildTypes{ release{ signingConfig signingConfigs.release } }
固然,release不是固定的名稱,你可以隨意取,比如這樣:
android { signingConfigs { debug { storeFile file("debug.keystore") } myConfig { storeFile file("other.keystore") storePassword "android" keyAlias "androiddebugkey" keyPassword "android" } } buildTypes { foo { debuggable true jniDebuggable true signingConfig signingConfigs.myConfig } } }

真實(shí)開發(fā)中,把密碼配置到build.gradle中不是很好的做法,最好的做法是放在gradle.properties中:
RELEASE_STOREFILE=xxx.jks RELEASE_STORE_PASSWORD=123456 RELEASE_KEY_ALIAS=mykey RELEASE_KEY_PASSWORD=123456
然后直接援用便可:
storeFile file(RELEASE_STOREFILE) storePassword RELEASE_STORE_PASSWORD keyAlias RELEASE_KEY_ALIAS keyPassword RELEASE_KEY_PASSWORD

14.定制buildConfig:
在build.gradle中配置:
buildTypes{ release{ buildConfigField "string","type",""release"" } debug{ buildConfigField "string","type",""debug"" } }
這樣就會(huì)在BuildConfig類中生成type字段:
//build/generate/source/buildConfig/release/包名/ 路徑下的BuildConfig.java public static final String type = "release" //build/generate/source/buildConfig/debug/包名/ 路徑下的BuildConfig.java public static final String type = "debug"

























生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 亚洲肥妇| 国产午夜精品一区二区三区不卡 | 日韩一区二区视频在线观看 | 午夜精品久久久久久久第一页 | 一区二区视频在线观看高清视频在线 | 一级成人毛片 | 欧美日韩一区二区三区久久 | 男人天堂999 | 亚洲永久在线 | 国产精品久久久精品三级 | 欧美三区在线观看 | 国产精品久久久久久免费播放 | 性生活一级毛片 | 国产毛片久久精品 | 国产欧美国产精品第一区 | 久久天堂影院 | 97精品伊人久久久大香线蕉 | 亚洲二区在线视频 | 忘忧草wyc.apk | 一道本一区二区三区 | 亚洲三级欧美 | 亚洲一区二区欧美日韩 | 亚洲精品www久久久久久 | 欧美另类videosbestsex | 国产亚洲精品激情一区二区三区 | 一区二区三区四区日韩 | 亚洲国产综合精品中文第一区 | 91精品国产99久久 | 男人天堂国产 | 性xxxxxx| 日本国产一区在线观看 | 久久夜视频 | 欧美精品videosbestsex日本 | 午夜a级 | japanese高清广州国产 | 亚洲邪恶天堂影院在线观看 | 羞羞免费网页登界面入口 | 波多野结衣在线观看视频 | 色哟永久免费 | 曰本裸色私人影院噜噜噜影院 | 波多野结衣中文字 |