欲了解Android Studio,必先知道Gradle
http://www.jcodecraeer.com/a/anzhuokaifa/Android_Studio/2015/0126/2361.html
泡在網(wǎng)上的日子 發(fā)表于 2015-01-26 13:28?第?11306?次閱讀?Gradle,Android Studio
編輯推薦:稀土掘金,這是一個(gè)高質(zhì)量的技術(shù)干貨分享社區(qū),web前端、Android、iOS、設(shè)計(jì)資源和產(chǎn)品,滿足你的學(xué)習(xí)欲望。
在前面的文章Android Studio初體驗(yàn)?一文中,我們新建了一個(gè)項(xiàng)目,其中提到了向?qū)a(chǎn)生的build.gradle文件,我們也大致看了build.gradle中的腳本內(nèi)容,這篇文章將對(duì)gradle作更詳細(xì)的講解 。這篇文章我們將介紹Gradle的安裝、Gradle的基本語(yǔ)法、Gradle的打包,內(nèi)容會(huì)比較枯燥,但是對(duì)build.gradle腳本中參數(shù)的解釋這部分還是非常有用的。Gradle是Eclipse開發(fā)轉(zhuǎn)android studio的攔路虎, 我們必須攻克它。??
注:這篇文章的大部分內(nèi)容主要是直接復(fù)制了這篇文章:http://www.cnblogs.com/youxilua/archive/2013/05/20/3087935.html?
什么是Gradle?
Gradle 以module 來(lái)管理project,在Gradle 構(gòu)建的Gradle project中通常包含application module(com.android.application),與library module(com.android.library)兩種module。
在Gradle 的project 中需要使用,基本上全都使用.gradle 文件來(lái)配置,是一個(gè)腳本化的工程構(gòu)建,而非原先ADT中那種eclipse 的可視化構(gòu)建。gradle的依賴管理能力極其強(qiáng)大,幾乎所有的開源項(xiàng)目都可以簡(jiǎn)單的通過(guò)一條compile指令完成依賴的配置。
安裝Gradle
第一次新建項(xiàng)目成功會(huì)下載Gradle,貌似這個(gè)過(guò)程不翻墻也是可以下載,但是訪問(wèn)特別慢,建議翻墻下載。那么下載的Gradle到什么地方呢?
-
Mac上會(huì)默認(rèn)下載到 **/Users/<用戶名>/.gradle/wrapper/dists** 目錄
-
Win平臺(tái)會(huì)默認(rèn)下載到?C:\Documents and Settings<用戶名>.gradle\wrapper\dists?目錄
你會(huì)看到這個(gè)目錄下有個(gè) gradle-x.xx-all 的文件夾, 如果下載實(shí)在太慢,但是又不想翻墻的話,可以自己手動(dòng)到Gradle官網(wǎng)下載對(duì)應(yīng)的版本,然后將下載的.zip文件(也可以解壓)復(fù)制到上述的gradle-x.xx-all 文件夾下,不過(guò)還是建議讓它直接下載的好。
Gradle 基本概念
首先我們學(xué)習(xí)幾個(gè)gradle 的腳步語(yǔ)法,掌握了這幾個(gè)語(yǔ)法,你就能非常簡(jiǎn)單的用gradle構(gòu)建打包android項(xiàng)目了。 首先,我們來(lái)看下一個(gè)最簡(jiǎn)單android?build.gradle。
build.gradle
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | buildscript?{ ???????? ?????repositories?{ ????????????mavenCentral() ????????} ????????dependencies?{ ????????????classpath?'com.android.tools.build:gradle:0.4' ????????} ????} ????apply?plugin:?'android' ????android?{ ????????compileSdkVersion?17 ????} |
英語(yǔ)的介紹都來(lái)自與 gradle官方文檔, 主要后邊的中文不是翻譯,是補(bǔ)充介紹。。
buildscript{}
Configures the build script classpath for this project. 說(shuō)白了就是設(shè)置腳本的運(yùn)行環(huán)境
repositories{}
Returns a handler to create repositories which are used for retrieving dependencies and uploading artifacts produced by the project. 大意就是支持java 依賴庫(kù)管理(maven/ivy),用于項(xiàng)目的依賴。這也是gradle 強(qiáng)力的地方。。。
dependencies{}
The dependency handler of this project. The returned dependency handler instance can be used for adding new dependencies. For accessing already declared dependencies, the configurations can be used. 依賴包的定義。支持maven/ivy,遠(yuǎn)程,本地庫(kù),也支持單文件,如果前面定義了repositories{}maven 庫(kù),使用maven的依賴(我沒接觸過(guò)ivy。。)的時(shí)候只需要按照用類似于com.android.tools.build:gradle:0.4,gradle 就會(huì)自動(dòng)的往遠(yuǎn)程庫(kù)下載相應(yīng)的依賴。
apply plugin:
聲明構(gòu)建的項(xiàng)目類型,這里當(dāng)然是android了。。。
android{}
設(shè)置編譯android項(xiàng)目的參數(shù),接下來(lái),我們的構(gòu)建android項(xiàng)目的所有配置都在這里完成。
構(gòu)建一個(gè)Gradle android項(xiàng)目
首先,你要安裝Gradle 1.6?并且,寫進(jìn)系統(tǒng)的環(huán)境變量里面,所有的命令都是默認(rèn)你已經(jīng)配好了gradle 的環(huán)境。而且,已經(jīng)已經(jīng)升級(jí)了android sdk 22
要用gradle構(gòu)建你的有兩種方式:(build.gradle 放到項(xiàng)目目錄下)
利用adt 22導(dǎo)出 build.gradle.
復(fù)制別人寫好的build.gradle 文件.
根據(jù)gradle 規(guī)則,手寫android 的build.gradle 文件。
個(gè)人推薦1,2 方法。。。。
一個(gè)android build.gradle 最基本基本文件
build.gradle
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | buildscript?{ ????repositories?{ ????????mavenCentral() ????} ????dependencies?{ ????????classpath?'com.android.tools.build:gradle:0.4' ????} } apply?plugin:?'android'dependencies?{ } android?{ ????compileSdkVersion?17 ????buildToolsVersion?"17" ????defaultConfig?{ ????????minSdkVersion?8 ????????targetSdkVersion?17 ????} ????sourceSets?{ ????????main?{ ????????????manifest.srcFile?'AndroidManifest.xml' ????????????java.srcDirs?=?['src'] ????????????resources.srcDirs?=?['src'] ????????????aidl.srcDirs?=?['src'] ????????????renderscript.srcDirs?=?['src'] ????????????res.srcDirs?=?['res'] ????????????assets.srcDirs?=?['assets'] ????????} ????????instrumentTest.setRoot('tests') ????} } |
接著在命令行cd 到項(xiàng)目目錄下
例如: cd e:\workplace\andoridGradle
如果你是第一次使用gradle 構(gòu)建android項(xiàng)目建議你先使用gradle clean?把a(bǔ)ndroid gradle 插件,還有相關(guān)依賴包下載下來(lái)并且對(duì)環(huán)境進(jìn)行初始化,如果出錯(cuò)了,一般可能是下載超時(shí),試多幾次即可,最后你會(huì)看到如下提示:BUILD SUCCESSFUL
The TaskContainer.add() method has been deprecated and is scheduled to be remove d in Gradle 2.0. Please use the create() method instead.
:clean UP-TO-DATE
BUILD SUCCESSFUL
Total time: 7.847 secs
完成以上的步驟,就可以正式使用gralde 構(gòu)建你的android項(xiàng)目了。
然后使用gradle build?就完成了android 項(xiàng)目的構(gòu)建了。如果,你是照著以上步驟走的話,你將會(huì)想項(xiàng)目目錄里面看到一個(gè)build 的目錄,里面就是用gradle 構(gòu)建android項(xiàng)目的全部例如了,結(jié)構(gòu)目錄看附錄。
最終打包的apk 就在build/apk 目錄下了。然后,你會(huì)發(fā)現(xiàn),兩個(gè)apk 一個(gè)是?[項(xiàng)目名]-debug-unaligned?[項(xiàng)目名]-release-unsigned
如果以上內(nèi)容你都掌握的話,接下來(lái)就將詳細(xì)說(shuō)說(shuō)如何利用gralde 打包android apk。
Gralde 打包參數(shù)詳解
上面說(shuō)了一大堆東西,其實(shí)并不吸引人去使用gradle,如果只是構(gòu)建項(xiàng)目的話,adt不是更合適嗎?如果,你看完以下內(nèi)容還是這么覺得的話,你就沒必要折騰gradle了。。。。。。
打簽名包
看附錄 默認(rèn)輸出?release?apk 是沒有簽名的,那么我們需要簽名的很簡(jiǎn)單,只需要在android{}里面補(bǔ)充加上加上即可。完整build.gradle 請(qǐng)點(diǎn)擊我的gist
build.gradle
| 1 2 3 4 5 6 7 8 9 10 11 12 13 | signingConfigs?{ ???myConfig{ ?????storeFile?file("gradle.keystore") ????????storePassword?"gradle" ????????keyAlias?"gradle" ????????keyPassword?"gradle" ????}} ????? ???buildTypes{ ?????release?{ ????????signingConfig??signingConfigs.myConfig ?????}? ???} |
然后,運(yùn)行g(shù)radle clean?gradle build?,這次在build/apk 你看到了多了一個(gè)[項(xiàng)目名]-release-unaligned, 從字面上面我就可以知道,這個(gè)只是沒有進(jìn)行zipAlign 優(yōu)化的版本而已。而[項(xiàng)目名]-release 就是我們簽名,并且zipAlign 的apk包了. ###打混淆包### 只需要在原來(lái)的基礎(chǔ)上加上,完整的proguad.gradle 代碼?build.gradle
| 1 2 3 4 5 6 7 | buildTypes{ ???release?{ ???signingConfig??signingConfigs.myConfig ?????runProguard?true ?????proguardFile?'proguard-android.txt' ???} } |
gradle clean
gradle build
打多渠道包(Product Flavor)
現(xiàn)在來(lái)解釋一下上一節(jié)的問(wèn)題,apk目錄下的兩個(gè)apk 的含義
為什么產(chǎn)生了兩個(gè)apk?
默認(rèn)的android gralde 插件定義了兩種apk 的類型debug,?release,這兩種類型的詳細(xì)對(duì)比看附錄。
這個(gè)是android gralde 插件?buildTypes{}?方法產(chǎn)生的,默認(rèn)配置好了兩個(gè)默認(rèn)模板,當(dāng)然你也可以修改,前面我們就是在修改默認(rèn)的release 的配置,讓輸出release類型的的apk,具有簽名和混淆。
對(duì)于多渠道包,android 插件提供了一個(gè)名為Product Flavor{}?的配置,用于進(jìn)行多渠道打包。
例如,我的android應(yīng)用有海外版,和國(guó)內(nèi)版本,而且這兩個(gè)版本的包名是不一樣的!!(我就舉兩個(gè)市場(chǎng)的例子安裝這個(gè)思路,你要打包100個(gè)不同的市場(chǎng)只是幾行代碼的事情。)。
你只需要在android{}?補(bǔ)充上
build.gradle
| 1 2 3 4 5 6 7 8 | productFlavors?{ ????playstore?{ ????????????packageName='com.youxiachai.androidgradle.playstore' ????} ????hiapk?{ ????????????packageName='com.youxiachai.androidgradle.amazonappstore' ????} } |
然后gradle clean,gradle build,在build/apk 下面你會(huì)看到一堆的包,命名格式[項(xiàng)目名]-[渠道名]-release
僅此而已?
Product Flavor{}?不只是能改包名那么簡(jiǎn)單,還能夠?qū)幾g的源碼目錄進(jìn)行切換。
什么意思? 不知道各位有沒有用過(guò)友盟做用戶統(tǒng)計(jì),如果,你用的是分發(fā)渠道分析,你需要修改AndroidManifest.xml 添加上?<meta-data android:value="hiapk" android:name="UMENG_CHANNEL"/>
如果,你很多渠道,,然后你就會(huì)很痛苦,現(xiàn)在用gradle 就非常舒服,你只需要在android.sourceSets指定我們的渠道名就行,android gradle 插件,會(huì)自動(dòng)打包!!!例如
build.gradle
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | sourceSets?{ ????main?{ ????????manifest.srcFile?'AndroidManifest.xml' ????????java.srcDirs?=?['src'] ????????resources.srcDirs?=?['src'] ????????aidl.srcDirs?=?['src'] ????????renderscript.srcDirs?=?['src'] ????????res.srcDirs?=?['res'] ????????assets.srcDirs?=?['assets'] ????} ????????? ????hiapk?{ ??????????manifest.srcFile?'hiapk/AndroidManifest.xml' ????}?????? ?????????playstore?{ ?????????????manifest.srcFile?'hiapk/AndroidManifest.xml' ????} ???????? ????instrumentTest.setRoot('tests') ????????} |
然后運(yùn)行g(shù)radle clean,gradle build,省下的時(shí)間去喝杯咖啡,睡個(gè)覺什么 的都好。。。 ###外部依賴### android gradle 對(duì)于外部jar 包的應(yīng)用支持maven/ivy 管理的包,也支持指定具體文件,前面已經(jīng)在上文說(shuō)過(guò)。上面演示的完整 build.gradle gist 里面也有寫。你需要加上如下代碼即可: build.gradle
| 1 2 3 | dependencies?{ ????compile?files('libs/android-support-v4.jar') } |
?
與50位技術(shù)專家面對(duì)面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的欲了解Android Studio,必先知道Gradle的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: hellocharts-android开
- 下一篇: Android Studio主要目录及文