apply plugin: 'java'
buildscript {
repositories { mavenCentral() }
dependencies { classpath 'com.android.tools.build:gradle:0.5.+' }
}
apply plugin: 'android'
android {
compileSdkVersion 17
buildToolsVersion: '17.0.0'
}
src/main/java
src/main/resources
src/test/java
src/test/resources
src/main/AndroidManifest.xml
src/main/java
src/main/resources
src/main/res
src/main/assets
src/main/aidl
src/main/rs
src/main/jni
src/instrumentTest/java
src/instrumentTest/resources
src/instrumentTest/res
src/instrumentTest/assets
src/instrumentTest/aidl
src/instrumentTest/rs
src/instrumentTest/jni
android {
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs ['src']
res.srcDirs ['res']
}
instrumentTest.setRoot('tests')
}
}
android {
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs ['src']
res.srcDirs ['res', 'res2']
}
instrumentTest.setRoot('tests')
}
}
$ cd myproject/$ cd gradle <taskName1> [taskName2]$ cd gradle tasks [--all]
assemble
check
build
-> assemble + check
clean
jar
test
findBugsMain
findBugsTests
assemble
jar
check
test
findBugsMain
findBugsTests
build
-> assemble + check
clean
assemble
check
connectedCheck
deviceCheck
build
-> assemble + check
clean
assembleDebug + assembleRelease
android {
defaultConfig {
versionCode 12
versionName '2.0'
minSdkVersion 14
targetSdkVersion 17
}
}
def getVersionCode() {
def code = ...
return code
}
android {
defaultConfig {
versionCode getVersionCode()
...
}
}
android {
buildTypes {
debug {
packageNameSuffix '.debug'
versionNameSuffix '-DEBUG'
}
beta {
...
}
}
}
src/main/AndroidManifest.xml
src/main/java
src/main/resources
src/main/res
src/main/assets
src/main/aidl
src/main/rs
src/main/jni
src/debug/...
src/beta/...
src/release/...
src/instrumentTest/java
src/instrumentTest/resources
src/instrumentTest/res
src/instrumentTest/assets
src/instrumentTest/aidl
src/instrumentTest/rs
src/instrumentTest/jni
assemble
jar
check
test
findBugsMain
findBugsTests
build
-> assemble + check
clean
assemble
assembleDebug + assembleBeta + assembleRelease
check
connectedCheck
deviceCheck
build
-> assemble + check
clean
assembleDebug + assembleRelease
android {
signingConfigs {
debug {
storeFile file('debug.keystore')
}
// buildTypes.debug already configured
// to use signingConfigs.debug
}
}
android {
buildTypes {
debugRelease.initWith(buildTypes.release)
debugRelease {
debuggable true
packageNameSuffix '.debugrelease'
signingConfig signingConfig.debug
}
sourceSets.debugRelease.setRoot('src/release')
}
}
android {
...
}
android.buildTypes.each {
type -> type.packageNameSuffix = ".$type.name"
}
compile
runtime
testCompile
testRuntime
compile
apk
instrumentTestCompile
instrumentTestRuntime
debugCompile/Apk
releaseCompile/Apk
betaCompile/Apk
dependencies {
compile fileTree(dir: 'libs', include '*.jar')
}
android {
...
}
repositories { mavenCentral() }
dependencies {
compile 'com.actionbarsherlock:actionbarsherlock:4.3.1'
betaCompile file('libs/protobuf.jar')
}
android {
...
}
MyProject/ | settings.gradle + app/ | build.gradle + libs/ + lib1/ | build.gradle + lib2/ | build.gradle
include ':app'
include ':libs:lib1'
include ':libs:lib2'
dependencies {
compile project(':libs:lib1')
}
android {
...
}
buildscript {
repositories { mavenCentral() }
dependencies { classpath 'com.android.tools.build:gradle:0.4' }
}
apply plugin: 'android-library'
android {
compileSdkVersion 17
buildToolsVersion: '17.0.0'
}
android {
productFlavors {
flavor1 {
packageName 'com.example.flavor1'
minSdkVersion 14
}
flavor2 {
packageName 'com.example.flavor2'
}
}
}
src/main/AndroidManifest.xml
src/main/java
src/main/resources
src/main/res
src/main/assets
src/main/aidl
src/main/rs
src/main/jni
src/debug/...
src/beta/...
src/release/...
src/flavor1/...
src/instrumentTest/java
src/instrumentTest/resources
src/instrumentTest/res
src/instrumentTest/assets
src/instrumentTest/aidl
src/instrumentTest/rs
src/instrumentTest/jni
src/instrumentTestFlavor1/...
compile
runtime
testCompile
testRuntime
compile
apk
instrumentTestCompile
instrumentTestRuntime
debugCompile/Package
releaseCompile/Package
betaCompile/Package
flavor1Compile/Package
instrumentTestFlavor1Compile/Package
No Flavors:
| debug | release | |
|---|---|---|
| debug | release | |
| - | - |
With Flavors:
| debug | release | |
|---|---|---|
| Flavor1 | Flavor1Debug | Flavor1Release |
| Flavor2 | Flavor2Debug | Flavor2Release |
android {
flavorGroups 'abi', 'version'
productFlavors {
arm {
flavorGroup 'abi'
}
paid {
flavorGroup 'version'
packageName '.paid'
}
}
}
| debug | release | ||
|---|---|---|---|
| paid | arm | paid-arm-debug | paid-arm-release |
| paid | x86 | paid-x86-debug | paid-x86-release |
| paid | mips | paid-mips-debug | paid-mips-release |
| free | arm | free-arm-debug | free-arm-release |
| free | x86 | free-x86-debug | free-x86-release |
| free | mips | free-mips-debug | free-mips-release |
Multiple Source Folders, Single Output
src/main/javasrc/free/javasrc/mips/javasrc/debug/java
Overlays
src/debug/res↓src/free/res↓src/mips/res↓src/main/resPriority Order
android.buildTypes.release.signingConfig↓android.productFlavors.free.signingConfig↓android.productFlavors.mips.signingConfig↓android.defaultConfig.signingConfigOverlays + Suffix
android.productFlavors.free.packageName↓android.productFlavors.mips.packageName↓android.defaultConfig.packageName↓src/main/AndroidManifest.xml+ android.buildTypes.debug.packageNameSuffixsrc/instrumentTest, src/instrumentTestFlavor1instrumentTestCompile, instrumentTestFlavor1CompileAndroidManifest.xmlcheckconnectedCheckdeviceCheck'com.android.tools.buid:gradle:0.5'android.buildToolsVersion '17.0'Presentation is available on github