欲了解Android Studio,必先知道Gradle
http://www.jcodecraeer.com/a/anzhuokaifa/Android_Studio/2015/0126/2361.html
泡在網上的日子 發表于 2015-01-26 13:28?第?11306?次閱讀?Gradle,Android Studio
編輯推薦:稀土掘金,這是一個高質量的技術干貨分享社區,web前端、Android、iOS、設計資源和產品,滿足你的學習欲望。
在前面的文章Android Studio初體驗?一文中,我們新建了一個項目,其中提到了向導所產生的build.gradle文件,我們也大致看了build.gradle中的腳本內容,這篇文章將對gradle作更詳細的講解 。這篇文章我們將介紹Gradle的安裝、Gradle的基本語法、Gradle的打包,內容會比較枯燥,但是對build.gradle腳本中參數的解釋這部分還是非常有用的。Gradle是Eclipse開發轉android studio的攔路虎, 我們必須攻克它。??
注:這篇文章的大部分內容主要是直接復制了這篇文章:http://www.cnblogs.com/youxilua/archive/2013/05/20/3087935.html?
什么是Gradle?
Gradle 以module 來管理project,在Gradle 構建的Gradle project中通常包含application module(com.android.application),與library module(com.android.library)兩種module。
在Gradle 的project 中需要使用,基本上全都使用.gradle 文件來配置,是一個腳本化的工程構建,而非原先ADT中那種eclipse 的可視化構建。gradle的依賴管理能力極其強大,幾乎所有的開源項目都可以簡單的通過一條compile指令完成依賴的配置。
安裝Gradle
第一次新建項目成功會下載Gradle,貌似這個過程不翻墻也是可以下載,但是訪問特別慢,建議翻墻下載。那么下載的Gradle到什么地方呢?
-
Mac上會默認下載到 **/Users/<用戶名>/.gradle/wrapper/dists** 目錄
-
Win平臺會默認下載到?C:\Documents and Settings<用戶名>.gradle\wrapper\dists?目錄
你會看到這個目錄下有個 gradle-x.xx-all 的文件夾, 如果下載實在太慢,但是又不想翻墻的話,可以自己手動到Gradle官網下載對應的版本,然后將下載的.zip文件(也可以解壓)復制到上述的gradle-x.xx-all 文件夾下,不過還是建議讓它直接下載的好。
Gradle 基本概念
首先我們學習幾個gradle 的腳步語法,掌握了這幾個語法,你就能非常簡單的用gradle構建打包android項目了。 首先,我們來看下一個最簡單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 ????} |
英語的介紹都來自與 gradle官方文檔, 主要后邊的中文不是翻譯,是補充介紹。。
buildscript{}
Configures the build script classpath for this project. 說白了就是設置腳本的運行環境
repositories{}
Returns a handler to create repositories which are used for retrieving dependencies and uploading artifacts produced by the project. 大意就是支持java 依賴庫管理(maven/ivy),用于項目的依賴。這也是gradle 強力的地方。。。
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,遠程,本地庫,也支持單文件,如果前面定義了repositories{}maven 庫,使用maven的依賴(我沒接觸過ivy。。)的時候只需要按照用類似于com.android.tools.build:gradle:0.4,gradle 就會自動的往遠程庫下載相應的依賴。
apply plugin:
聲明構建的項目類型,這里當然是android了。。。
android{}
設置編譯android項目的參數,接下來,我們的構建android項目的所有配置都在這里完成。
構建一個Gradle android項目
首先,你要安裝Gradle 1.6?并且,寫進系統的環境變量里面,所有的命令都是默認你已經配好了gradle 的環境。而且,已經已經升級了android sdk 22
要用gradle構建你的有兩種方式:(build.gradle 放到項目目錄下)
利用adt 22導出 build.gradle.
復制別人寫好的build.gradle 文件.
根據gradle 規則,手寫android 的build.gradle 文件。
個人推薦1,2 方法。。。。
一個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 到項目目錄下
例如: cd e:\workplace\andoridGradle
如果你是第一次使用gradle 構建android項目建議你先使用gradle clean?把android gradle 插件,還有相關依賴包下載下來并且對環境進行初始化,如果出錯了,一般可能是下載超時,試多幾次即可,最后你會看到如下提示: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 構建你的android項目了。
然后使用gradle build?就完成了android 項目的構建了。如果,你是照著以上步驟走的話,你將會想項目目錄里面看到一個build 的目錄,里面就是用gradle 構建android項目的全部例如了,結構目錄看附錄。
最終打包的apk 就在build/apk 目錄下了。然后,你會發現,兩個apk 一個是?[項目名]-debug-unaligned?[項目名]-release-unsigned
如果以上內容你都掌握的話,接下來就將詳細說說如何利用gralde 打包android apk。
Gralde 打包參數詳解
上面說了一大堆東西,其實并不吸引人去使用gradle,如果只是構建項目的話,adt不是更合適嗎?如果,你看完以下內容還是這么覺得的話,你就沒必要折騰gradle了。。。。。。
打簽名包
看附錄 默認輸出?release?apk 是沒有簽名的,那么我們需要簽名的很簡單,只需要在android{}里面補充加上加上即可。完整build.gradle 請點擊我的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 ?????}? ???} |
然后,運行gradle clean?gradle build?,這次在build/apk 你看到了多了一個[項目名]-release-unaligned, 從字面上面我就可以知道,這個只是沒有進行zipAlign 優化的版本而已。而[項目名]-release 就是我們簽名,并且zipAlign 的apk包了. ###打混淆包### 只需要在原來的基礎上加上,完整的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)
現在來解釋一下上一節的問題,apk目錄下的兩個apk 的含義
為什么產生了兩個apk?
默認的android gralde 插件定義了兩種apk 的類型debug,?release,這兩種類型的詳細對比看附錄。
這個是android gralde 插件?buildTypes{}?方法產生的,默認配置好了兩個默認模板,當然你也可以修改,前面我們就是在修改默認的release 的配置,讓輸出release類型的的apk,具有簽名和混淆。
對于多渠道包,android 插件提供了一個名為Product Flavor{}?的配置,用于進行多渠道打包。
例如,我的android應用有海外版,和國內版本,而且這兩個版本的包名是不一樣的!!(我就舉兩個市場的例子安裝這個思路,你要打包100個不同的市場只是幾行代碼的事情。)。
你只需要在android{}?補充上
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 下面你會看到一堆的包,命名格式[項目名]-[渠道名]-release
僅此而已?
Product Flavor{}?不只是能改包名那么簡單,還能夠對編譯的源碼目錄進行切換。
什么意思? 不知道各位有沒有用過友盟做用戶統計,如果,你用的是分發渠道分析,你需要修改AndroidManifest.xml 添加上?<meta-data android:value="hiapk" android:name="UMENG_CHANNEL"/>
如果,你很多渠道,,然后你就會很痛苦,現在用gradle 就非常舒服,你只需要在android.sourceSets指定我們的渠道名就行,android gradle 插件,會自動打包!!!例如
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') ????????} |
然后運行gradle clean,gradle build,省下的時間去喝杯咖啡,睡個覺什么 的都好。。。 ###外部依賴### android gradle 對于外部jar 包的應用支持maven/ivy 管理的包,也支持指定具體文件,前面已經在上文說過。上面演示的完整 build.gradle gist 里面也有寫。你需要加上如下代碼即可: build.gradle
| 1 2 3 | dependencies?{ ????compile?files('libs/android-support-v4.jar') } |
?
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的欲了解Android Studio,必先知道Gradle的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: hellocharts-android开
- 下一篇: android studio无线真机调试