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片段
<meta-data android:value="${UMENG_APPKEY}" android:name="UMENG_APPKEY"/>


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

转载于:https://my.oschina.net/u/3959225/blog/1942026

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值