原文html
http://tools.android.com/tech-docs/new-build-system/user-guidejava
構建文件 build.gradleandroid
apply plugin: 'java'
使用自帶的java插件,用gradle編譯javaapi
buildscript { repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:0.11.1' } } apply plugin: 'android' android { compileSdkVersion 19 buildToolsVersion "19.0.0" }
repositories 使用maven central repository
dependencies 依賴android plugin
apply plugin 使用android plugin
android {} 配置android plugin 參數,這個事dsl的入口
提示:須要 local.properties 設置表明android sdk 路徑的sdk.dir屬性,或者使用 ANDROID_HOME 環境變量
app
sourceSets {
main {
java {
srcDir 'src/java'
}
resources {
srcDir 'src/resources'
}
}
}
sourceSets { main.java.srcDirs = ['src/java'] main.resources.srcDirs = ['src/resources'] }
android { sourceSets { main { manifest.srcFile 'AndroidManifest.xml' java.srcDirs = ['src'] resources.srcDirs = ['src'] aidl.srcDirs = ['src'] renderscript.srcDirs = ['src'] res.srcDirs = ['res'] assets.srcDirs = ['assets'] } androidTest.setRoot('tests') } }
這幾個任務自己不作什麼事,具體的事情要往裏面插,相似策略模式maven
jar 直接或者間接依賴於其餘任務,好比classes 編譯java代碼ide
具體看http://gradle.org/docs/current/userguide/java_plugin.html測試
多了connectedCheck和deviceCheck檢查設備鏈接gradle
tip:gradle支持任務名簡寫:好比用gradle aR 代替gradle assembleReleaseui
android { compileSdkVersion 19 buildToolsVersion "19.0.0" defaultConfig { versionCode 12 versionName "2.0" minSdkVersion 16 targetSdkVersion 16 } }
Property Name | Default value in DSL object | Default value |
versionCode | -1 | value from manifest if present |
versionName | null | value from manifest if present |
minSdkVersion | -1 | value from manifest if present |
targetSdkVersion | -1 | value from manifest if present |
applicationId | null | value from manifest if present |
testApplicationId | null | applicationId + 「.test」 |
testInstrumentationRunner | null | android.test.InstrumentationTestRunner |
signingConfig | null | null |
proguardFile | N/A (set only) | N/A (set only) |
proguardFiles | N/A (set only) | N/A (set only) |
dependencies {
compile files('libs/foo.jar')
}
android {
...
}
compile的文件都會加入classpath當中,並打包到apk
可選的compile配置
repositories { mavenCentral() } dependencies { compile 'com.google.guava:guava:11.0.2' } android { ... }
先把repository加進來,而後在dependencies以maven或者ivy的形式聲明artifacts,就能夠了
repositories { maven { url "http://repo.mycompany.com/maven2" } }
http://gradle.org/docs/current/userguide/artifact_dependencies_tutorial.html
示例:
app,lib1,lib2 都是gradle項目
gradle這麼引用他們 :app :libraries:lib1 :libraries:lib2
每一個項目都有build.gradle文件
根目錄有settings.gradle
結構以下:
爲了表示當前目錄是一個gradle目錄,須要有settings.gradle文件,內容以下:
include ':app', ':libraries:lib1', ':libraries:lib2'
app依賴其餘項目,依賴關係這麼寫
dependencies {
compile project(':libraries:lib1')
}
上面 :libraries:lib1 :libraries:lib2能夠是java項目,:app使用它們的jar包,
可是 若是這些庫要訪問android api 或者其餘android資源,它們不能是普通的java項目,必須是Android Library Projects
buildscript { repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:0.5.6' } } apply plugin: 'android-library' android { compileSdkVersion 15 }
使用android-libraray plugin 其餘跟普通android項目相似
輸出.aar文件,包含編譯代碼(.jar/.so)和資源文件(manifest, res, assets)
dependencies {
compile project(':libraries:lib1')
compile project(':libraries:lib2')
}
android { defaultPublishConfig "debug" }
默認只發布release版本,能夠經過上面代碼修改
若是有變體(後面將提到),要加上變體名
android { defaultPublishConfig "flavor1Debug" }
android {
publishNonDefault true
}
dependencies { flavor1Compile project(path: ':lib1', configuration: 'flavor1Release') flavor2Compile project(path: ':lib1', configuration: 'flavor2Release') }
變體:相似普通版和高級版
android {
....
productFlavors {
flavor1 {
...
}
flavor2 {
...
}
}
}
Build Type + Product Flavor = Build Variant
例如