最基本的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

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

更多相关文章

  1. Android 读取本地txt文件和写入txt文件到本地
  2. android > SDcard读写文件
  3. Android APP 版本更新通知代码
  4. android xml文件操作
  5. android 操作文件
  6. Android版本及API等级关系
  7. 【有图】android通过jdbc连接mysql(附文件)

随机推荐

  1. android 多个activity 共用一套广播Broad
  2. Android(安卓)动画之帧动画
  3. android背景模糊化处理
  4. Android图像处理之冰冻效果
  5. Android Material Design 之 Coordinator
  6. android之GridView和Gallery
  7. Android: Multithreading For Performanc
  8. Android设计原则及规范指南!UI设计师值得
  9. Android 广播监听USB插拔
  10. Android Custom UI: Making a Vintage Th