gradle入门,安卓gradle入门
http://www.bkjia.com/Androidjc/981624.html
 
 
隨著Android Studio越來越完善,更多的開發者舍棄掉Eclipse。但是新的IDE與以往的Eclipse有很大區別,這導致部分開發者望而卻步,其中一個大家覺得比較麻煩的是Android Studio采用的新的構建系統,gradle。那么這篇文章我將對gradle進行一個簡單介紹(主要講gradle配合Android Studio的使用),希望幫助大家熟悉gradle。
一. gradle是什么? gradle跟ant/maven一樣,是一種依賴管理/自動化構建工具。但是跟ant/maven不一樣,它并沒有使用xml語言,而是采用了Groovy語言,這使得它更加簡潔、靈活,更加強大的是,gradle完全兼容maven和ivy。更多詳細介紹可以看它的官網:http://www.gradle.org/?
二.為什么使用gradle?
 更容易重用資源和代碼;
 可以更容易創建不同的版本的程序,多個類型的apk包;
 更容易配置,擴展;
 更好的IDE集成;
 
 
 
 三.gradle入門需知
 ??1.基本配置:首先明確gradle跟maven一樣,也有一個配置文件,maven里面是叫pom.xml,而在gradle中是叫build.gradle。Android Studio中的android項目通常至少包含兩個build.gradle文件,一個是project范圍的,另一個是module范圍的,由于一個project可以有多個module,所以每個module下都會對應一個build.gradle。這么說有點抽象,看下面這個圖:
 
 這是一個android工程的project視圖,上面那個是module下的build.gradle文件。下面那個是project下的build.gradle文件。這兩個文件是有區別的,project下的build.gradle是基于整個project的配置,而module下的build.gradle是每個模塊自己的配置。下面看下這兩個build.gradle里面的內容:
 project#build.gradle:
module#build.gradle: //聲明插件,這是一個android程序,如果是android庫,應該是com.android.library apply plugin: 'com.android.application' android {//安卓構建過程需要配置的參數compileSdkVersion 21//編譯版本buildToolsVersion "21.1.2"//buildtool版本defaultConfig {//默認配置,會同時應用到debug和release版本上applicationId "com.taobao.startupanim"//包名minSdkVersion 15targetSdkVersion 21versionCode 1versionName "1.0"}buildTypes {//這里面可以配置debug和release版本的一些參數,比如混淆、簽名配置等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中是一些基本配置,它會同時應用到debug/release版本上,下面列舉了所有可配項及對應的值:
 buildTypes結點很重要,這里可以配置構建的版本的一些參數,默認有兩個構建版本release/debug,當然你可以自定義一個構建版本,比如叫foo,然后通過gradlew assembleFoo就可以生成對應的apk了。buildTypes里還有很多可配置項,下面列舉了所有可配項以及debug/release版本的默認值:
 現在大家對build.gradle已經初步了解了,我們再看下其他一些與gradle相關的文件:1.gradle.properties:從名字上就知道它是一個配置文件,沒錯,這里面可以定義一些常量供build.gradle使用,比如可以配置簽名相關信息如keystore位置,密碼,keyalias等。2.settings.gradle:這個文件是用來配置多模塊的,比如你的項目有兩個模塊module-a,module-b,那么你就需要在這個文件中進行配置,格式如下:
4.gradlew和gradlew.bat: 這分別是linux下的shell腳本和windows下的批處理文件,它們的作用是根據gradle-wrapper.properties文件中的distributionUrl下載對應的gradle版本。這樣就可以保證在不同的環境下構建時都是使用的統一版本的gradle,即使該環境沒有安裝gradle也可以,因為gradle wrapper會自動下載對應的gradle版本。 gradlew的用法跟gradle一模一樣,比如執行構建gradle build命令,你可以用gradlew build。gradlew即gradle wrapper的縮寫。
2.gradle倉庫: gradle有三種倉庫,maven倉庫,ivy倉庫以及flat本地倉庫。聲明方式如下: maven{url "..." } ivy{url "..." } flatDir{dirs 'xxx' } 有一些倉庫提供了別名,可直接使用: repositories{mavenCentral()jcenter()mavenLocal() } 3.gradle任務: gradle中有一個核心概念叫任務,跟maven中的插件目標類似。gradle的android插件提供了四個頂級任務 assemble 構建項目輸出 check 運行檢測和測試任務 build 運行assemble和check clean 清理輸出任務 執行任務可以通過gradle/gradlew+任務名稱的方式執,執行一個頂級任務會同時執行與其依賴的任務,比如你執行 gradlew assemble 它通常會執行:
gradlew assembleDebug gradlew assembleRelease 這時會在你項目的build/outputs/apk或者build/outputs/aar目錄生成輸出文件
注:linux下執行構建任務需要首先更改gradlew腳本的權限,然后才能執行該腳本: chmod +x gradlew ./gradlew assemble 可以通過: gradlew tasks 列出所有可用的任務。在Android Studio中可以打開右側gradle視圖查看所有任務。
四.常見問題
1.導入本地jar包: 跟eclipse不太一樣,android studio導入本地jar除了將jar包放到模塊的libs目錄中以外,還得在該模塊的build.gradle中進行配置,配置方式是在dependencies結點下進行如下聲明: compile files('libs/xxx.jar') 如果libs下有多個jar文件,可以這樣聲明: compile fileTree(dir: 'libs', include: ['*.jar'])
2.導入maven庫: compile 'com.android.support:appcompat-v7:21.0.3' 可見,格式為 compile 'groupId:artifactId:version'
3.導入某個project: 你的app是多模塊的,假設有兩個模塊app和module-A,并且app模塊是依賴module-A的,這時候我們就需要在app模塊的build.gradle中的dependencies結點下配置依賴: compile project(':module-A') 并且你需要在settings.gradle中把module-A模塊包含進來: include ':module-A',':app' 此外,這種情況下module-A模塊是作為庫存在的,因而它的build.gradle中的插件聲明通常應該是這樣的: apply plugin: 'com.android.library' 而且,作為library的模塊module-A的build.gradle文件的defaultConfig中是不允許聲明applicationId的,這點需要注意。
4.聲明三方maven倉庫: 可能你項目需要的一些庫文件是在你們公司的私服上,這時候repositories中僅有jcenter就不行了,你還需要把私服地址配到里面來,注意,應該配到project的build.gradle中的allprojects結點下或者直接配到某個模塊中如果僅有這個模塊用到。配置方式: repositories{maven{url="http://mvnrepo.xxx.com" } }
5.依賴三方aar文件: compile 'com.aaa.xxx:core:1.0.1@aar'
6.將庫項目導出為aar:
首先你的項目必須是一個庫項目,build.gradle中進行配置: apply plugin : 'com.android.library' 然后你可以在命令行中進到項目目錄,執行如下gradle任務: gradlew assembleRelease//確保該目錄下有gradlew文件 生成的aar在/build/output/aar文件夾中
7.引用本地aar:
?首先將aar文件放到模塊的libs目錄下,然后在該模塊的build.gradle中聲明flat倉庫: repositories{flatDir{dirs 'libs'} } 最后在dependencies結點下依賴該aar模塊: dependencies{compile (name:'xxx',ext:'aar') } 8.排除依賴: 當出現依賴沖突的時候可以通過排除依賴解決,具體方式如下: compile (group:'xxx',name:'xxx',version:'xxx'){exclude group:'xxx',module:'xxx'//module對應的就是artifactId }
9.多dex支持(打包65k方法數限制) ?首先在build.gradle的buildConfig中增加如下配置: multiDexEnabled true 接著,在dependencies結點下增加如下依賴: dependencies{compile 'com.android.support:multidex:1.0.0' } 最后,讓你的Application繼承MultiDexApplication,如果你的應用沒有聲明Application,可以在manifest文件的application結點下增加name屬性,值為android.support.multidex.MultiDexApplication。詳細內容參見官方文檔。
10.自動移除不用資源 ?可以在buildTypes結點中增加如下配置: buildTypes{release{minifyEnabled trueshrinkResources true} } 11.忽略lint錯誤: 可以在build.gradle文件中的android結點下增加如下配置: android{lintOptions{abortOnError false } } 12.聲明編譯的java版本 可以在build.gradle文件中的android結點下增加如下配置: compileOptions {sourceCompatibility JavaVersion.VERSION_1_7targetCompatibility JavaVersion.VERSION_1_7}
13.應用簽名配置 首先在module的build.gradle中增加這些字段: storeFiles:keystore文件存儲位置,通常是.jks文件 storePassword 密碼 keyAlias keystore別名 keyPassword 密碼
具體配置方式為:首先在build.gradle的android結點下增加如下配置: signingConfigs {//debug版本的簽名配置,通常不用配,因為有默認的debug簽名debug {}release {storeFile file("key.jks")storePassword "123456"keyAlias "mykey"keyPassword "123456"}}
注:debug的默認簽名為:
signingConfig android.signingCongfigs.debug 位置為 ${home}\.android\debug.keystore 然后在buildTypes結點下的對應版本中添加上面的配置: 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 truejniDebuggable truesigningConfig signingConfigs.myConfig}} }
真實開發中,把密碼配置到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_PASSWORDkeyAlias RELEASE_KEY_ALIASkeyPassword RELEASE_KEY_PASSWORD
14.定制buildConfig: 在build.gradle中配置: buildTypes{release{buildConfigField "string","type","\"release\""}debug{buildConfigField "string","type","\"debug\""} } 這樣就會在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" 與50位技術專家面對面20年技術見證,附贈技術全景圖
總結
以上是生活随笔為你收集整理的gradle入门,安卓gradle入门的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: javascript标签在页面中的位置探
- 下一篇: iOS快速开发框架--Bee Frame
