android布局DSL,android plugin dsl 部分整理

最基本的build.gradle

apply plugin: 'com.android.application'

android {

compileSdkVersion 23

buildToolsVersion "23.0.2"

defaultConfig {

minSdkVersion 8

targetSdkVersion 23

versionCode 1

versionName "1.0"

}

buildTypes {

debug {signingConfig signingConfigs.myConfig}

release {signingConfig signingConfigs.myConfig

//修改apk生成文件名称

def today = new Date()

if (variant.buildType.getName().equals("release")) {

println "Change output apk name"

variant.outputs.each { output ->

output.outputFile = new File(

output.outputFile.parent,

output.outputFile.name.replace(".apk", "-" + defaultConfig.versionName +

"-" + today.format('yyyyMMdd') + ".apk"))

}

}}

}

flavorDimensions("free", "channel") //productFlavors 必须指定对应dimension

productFlavors {

free {dimension "free"}

vip {dimension "free"}

huawei {dimension "channel"

applicationId "huawei"}

xiaomi {dimension "channel"

applicationId "xiaomi"}

}

//buildTypes 加flavorDimensions加productFlavors 最多可生成对应版本为彼此数量相乘2*2*2

}

dependencies {

compile fileTree(dir: 'libs', include: ['*.jar'])

compile 'com.android.support:appcompat-v7:19.0.1'

}

BuildVariants

Gradle的Android插件中有个BuildVariants的概念,其实简单来说其实就是buildTypes+productFlavors,buildType主要就是debug和release的分别。而productFlavors就是我们用来打包不同版本app的主要方式。从字面意思来翻译指的就是不同的“产品特点”。

productFlavors可以是多维的,flavorDimensions定义了2个纬度productFlavors中对应每个纬度有2个对应的productFlavor所以可以组合成2*2=4种组合。例如:vipxiaomi,viphuawei,freexiaomi,freehuawei这4个版本。

有的时候我们每个flavor可能不只是一个渠道名这么简单,我的ICON可能给每个渠道的有所不同,我的包名也可能有所不同。所有这些,都可以直接在这个flavor中重新定义,如果需要不同的源代码或资源文件,可以在app/src下新建一个名为“flavor名”的目录(比如xiaomi)。也就是app/src/xiaomi,然后这个目录下的结构和app/src/main中是一样的,打包的时候会优先使用当前flavor下的文件。

Manifest 占位符

有些SDK会把配置在Manifest文件中的meta信息里,而不同的flavor这个信息不一样,这是我们可以通过Manifest 占位符来实现

mainfest.xml片段

build.gradle片段

android {

productFlavors {

xiaomi{

applicationId "xiaomi"

manifestPlaceholders = [UMENG_APPKEY: "我的友盟KEY"]

}

}

}

Android Studio会为我们生成一个名叫BuildConfig的类,这个类有一些关于打包的静态变量,例如freexiaomidebug

public final class BuildConfig {

public static final boolean DEBUG = Boolean.parseBoolean("true");

public static final String APPLICATION_ID = "xiaomi";

public static final String BUILD_TYPE = "debug";

public static final String FLAVOR = "freexiaomi";

public static final int VERSION_CODE = 1;

public static final String VERSION_NAME = "1.0";

public static final String FLAVOR_free = "free";

public static final String FLAVOR_channel = "xiaomi";

}

refer:http://google.github.io/android-gradle-dsl/current/com.android.build.gradle.internal.dsl.ProductFlavor.html

http://google.github.io/android-gradle-dsl/current/com.android.build.gradle.BaseExtension.html#com.android.build.gradle.BaseExtension:productFlavors

你可能感兴趣的:(android布局DSL)