&
Gradle是一个优秀的构建系统和构建工具,它允许通过插件创建自定义的构建逻辑。 Google基于Gradle以下的一些特点而选择了它:
repositories、dependencies
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.5.+'
}
}
apply plugin: 'android'
repositories {
mavenCentral()
}
android {
compileSdkVersion 18
buildToolsVersion "18.0.1"
defaultConfig {
minSdkVersion 15
targetSdkVersion 18
}
productFlavors {
production {
packageName "be.tamere.gradlebuildtypesexample"
}
staging {
packageName "be.tamere.gradlebuildtypesexample.staging"
}
}
}
dependencies {
compile 'com.android.support:appcompat-v7:18.0.0'
}
├── main
│ ├── AndroidManifest.xml
│ ├── ic_launcher-web.png
│ ├── java
│ │ └── be
│ │ └── tamere
│ │ └── gradlebuildtypesexample
│ │ └── MainActivity.java
│ └── res
│ ├── drawable-hdpi
│ │ └── ic_launcher.png
│ ├── drawable-mdpi
│ │ └── ic_launcher.png
│ ├── drawable-xhdpi
│ │ └── ic_launcher.png
│ ├── drawable-xxhdpi
│ │ └── ic_launcher.png
│ ├── layout
│ │ └── activity_main.xml
│ ├── menu
│ │ └── main.xml
│ ├── values
│ │ ├── dimens.xml
│ │ ├── strings.xml
│ │ └── styles.xml
│ ├── values-v11
│ │ └── styles.xml
│ └── values-v14
│ └── styles.xml
├── production
│ └── java
│ └── be
│ └── tamere
│ └── gradlebuildtypesexample
│ └── Constants.java
└── staging
├── java
│ └── be
│ └── tamere
│ └── gradlebuildtypesexample
│ └── Constants.java
└── res
├── drawable-hdpi
│ └── ic_launcher.png
├── drawable-mdpi
│ └── ic_launcher.png
├── drawable-xhdpi
│ └── ic_launcher.png
├── drawable-xxhdpi
│ └── ic_launcher.png
└── values
└── string.xml
//替换AndroidManifest.xml的UMENG_CHANNEL_VALUE字符串为渠道名称 By Remex Huang
android.applicationVariants.all{ variant ->
variant.processManifest.doLast{
//${buildDir}是指./build文件夹
//${variant.dirName}是flavor/buildtype,例如GooglePlay/release,运行时会自动生成
//下面的路径是类似这样:./build/manifests/GooglePlay/release/AndroidManifest.xml
def manifestFile = "${buildDir}/manifests/${variant.dirName}/AndroidManifest.xml"
//将字符串UMENG_CHANNEL_VALUE替换为当前 ProductFlavor 的名字
def updatedContent = new File(manifestFile).getText('UTF-8')
.replaceAll("UMENG_CHANNEL_VALUE", "${variant.productFlavors[0].name}")
new File(manifestFile).write(updatedContent, 'UTF-8')
//将此次flavor的AndroidManifest.xml文件指定为我们修改过的这个文件
variant.processResources.manifestFile =
file("${buildDir}/manifests/${variant.dirName}/AndroidManifest.xml")
}
}
参考:友盟多渠道打包配置
flavorGroups
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.6.+'
}
}
apply plugin: 'android'
repositories {
mavenCentral()
}
android {
compileSdkVersion 19
buildToolsVersion "19.0.0"
flavorGroups "suit", "number"
defaultConfig {
minSdkVersion 7
targetSdkVersion 19
}
productFlavors {
//number flavours
ace {
flavorGroup "number"
}
two {
flavorGroup "number"
}
three {
flavorGroup "number"
}
four {
flavorGroup "number"
}
five {
flavorGroup "number"
}
six {
flavorGroup "number"
}
seven {
flavorGroup "number"
}
eight {
flavorGroup "number"
}
nine {
flavorGroup "number"
}
ten {
flavorGroup "number"
}
jack {
flavorGroup "number"
}
queen {
flavorGroup "number"
}
king {
flavorGroup "number"
}
clubs {
flavorGroup "suit"
}
spades {
flavorGroup "suit"
}
diamonds {
flavorGroup "suit"
}
hearts {
flavorGroup "suit"
}
}
}
dependencies {
compile 'com.android.support:appcompat-v7:+'
}
4 suits x 13 numbers = 52 apks
开始
显示内存占用情况
自动完成
调试时追加日志
调试时追加条件