百度百科說:Gradle 是以 Groovy 語言爲基礎,面向Java應用爲主,基於DSL語法的自動化構建工具。html
二、gradle的安裝java
gradle的官網下載:https://gradle.org/downloadsandroid
若是上面的下載慢或訪問不了能夠在這下載:http://www.androiddevtools.cn/app
androidStudio的話,直接解壓,而後把目錄導進去就ok了。框架
eclipse的要,解壓後要配置環境變量,具體的百度就行了,網上大把資料。dom
三、分析eclipse
下面舉個例子:這個是gradle2.0以前的語法(2.0之後語法改了)maven
1 apply plugin: 'android' 2 3 buildscript { 4 repositories { 5 mavenCentral() 6 } 7 dependencies { 8 classpath 'com.android.tools.build:gradle:0.7.3' 9 classpath 'net.sf.proguard:proguard-gradle:4.10' 10 } 11 } 12 13 dependencies { 14 compile fileTree(dir: 'libs', include: ['*.jar']) 15 } 16 17 android { 18 compileSdkVersion 21 19 buildToolsVersion "21.1.2" 20 21 defaultConfig { 22 minSdkVersion 9 23 } 24 } 25 26 //type:能夠當作要使用什麼工具, dependsOn:執行該動做的在compileReleaseJava執行後執行 27 task copyAssets(type: Copy, dependsOn: 'compileReleaseJava') { 28 from 'assets' 29 into 'build/classes/release/assets' 30 } 31 32 task genJar(type: Jar, dependsOn: 'copyAssets') { 33 from fileTree(dir: 'build/classes/release') 34 archiveName = 'gp_android_sdk_unproguard.jar' 35 } 36 37 task progJar(type: proguard.gradle.ProGuardTask, dependsOn: genJar) { 38 outjars 'build/gp_android_sdk.jar' 39 libraryjars System.getenv("ANDROID_HOME")+"/platforms/android-19/android.jar" 40 41 // 具體須要keep住的類 42 configuration 'sdk_proguard.pro' 43 }
在26行講到的type:gradle的語法中有不少:什麼Copy、Delete、Jar都是。具體的可看Gradle的開源文檔:https://gradle.org/docs/current/javadoc/index.html工具
如Copy:從 src/main/doc 目錄拷貝到 build/target/doc測試
task copyDocs(type: Copy) { from 'src/main/doc' into 'build/target/doc' }
是否是很簡單。。其餘的基礎的百度看看別人的文檔,這裏推薦一篇:http://www.stormzhang.com/android/2014/02/28/android-gradle/
下面說說混淆:
buildTypes { release { runProguard false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' } }
官方把混淆寫在上面代碼的位置,但若是同時混淆並導出jar包,可用:(還有沒有別的方法還沒試過)
task genJar(type: Jar, dependsOn: 'copyAssets') { from fileTree(dir: 'build/classes/release') archiveName = 'gp_android_sdk_unproguard.jar' } task progJar(type: proguard.gradle.ProGuardTask, dependsOn: genJar) { outjars 'build/gp_android_sdk.jar' libraryjars System.getenv("ANDROID_HOME")+"/platforms/android-19/android.jar" // 具體須要keep住的類 configuration 'sdk_proguard.pro' }
其實gradle編譯的時候會生成jar包的:在build目錄的exploded-aar下(不一樣版本的gradle會不同的)回生成:classes.jar就是項目的jar包,這樣你把module用gradle編譯生成的classes.jar就是你要的jar包。
這裏給個gradle2.0以後的例子:
1 //該腳本請使用gradle2.0以上編譯 2 3 apply plugin: 'com.android.application' 4 5 buildscript { 6 repositories { 7 jcenter() 8 } 9 dependencies { 10 classpath 'com.android.tools.build:gradle:1.0.0' 11 classpath 'net.sf.proguard:proguard-gradle:4.10' 12 } 13 } 14 15 dependencies { 16 compile fileTree(dir: 'libs', include: ['*.jar']) 17 } 18 19 android { 20 compileSdkVersion 21 21 buildToolsVersion "21.1.2" 22 23 defaultConfig { 24 minSdkVersion 9 25 } 26 } 27 28 task copyAssets(type: Copy, dependsOn: 'compileReleaseJava') { 29 from 'src/main/assets' 30 into 'build/intermediates/classes/release/assets' 31 } 32 33 task genJar(type: Jar, dependsOn: 'copyAssets') { 34 from fileTree(dir: 'build/intermediates/classes/release') 35 archiveName = 'gp_android_sdk_unproguard.jar' 36 } 37 38 task progJar(type: proguard.gradle.ProGuardTask, dependsOn: genJar) { 39 outjars 'build/gp_android_sdk.jar' 40 libraryjars System.getenv("ANDROID_HOME")+"/platforms/android-19/android.jar" 41 42 // 具體須要keep住的類 43 configuration 'sdk_proguard.pro' 44 } 45 46 task deleteOldJar(dependsOn: 'progJar') { 47 delete '../app/libs/gp_android_sdk.jar' 48 } 49 50 task copyJar(type: Copy, dependsOn: 'deleteOldJar') { 51 from 'build/gp_android_sdk.jar' 52 into '../app/libs' 53 } 54 55 task sdk(dependsOn: 'copyJar') { 56 }