gradle配置 flavor和buildType小结

简介: gradle配置 flavor和buildType小结

业务需求

为了方便测试, 期望同一手机上能同时安装两个App.
所以需要:

  1. 开发/Release版本包名不一样
  2. 开发/Release icon不一样

开发版本

图标:da0bba0aae2ffa2b55e4261690f944d8.png
包名: com.alipictures.moviepro.dev

线上版本

图标: 301d3edfa21bfd9d7d317d7c054dedde.png
包名: com.alipictures.moviepro


利用flavor修改applicationId和AndroidManifest的icon,可以很方便的实现这个需求.
中间有一点小坑, 总结一下.

几个flavor和buildType的结论

1. buildTypes不能设置 applicationId

2. productFlavors不能设置 minifyEnabled

如果需要同时设置混淆和applicationId,需要flavor和buildType组合

3. buildConfigField的覆盖关系是

按优先级从高到低: buildType->Flavor->defaultConfig

例如同时存在同一变量定义.

productFlavors {
    dev {
      buildConfigField "String", "ADD_BY_FLAVOR_DEV", "\"set_in_flavor\""
      }
}
    
defaultConfig {
 
        buildConfigField "String", "ADD_BY_FLAVOR_DEV", "\"set_in_default_config\"" 
}
    
buildTypes { 

    debug { 
         buildConfigField "String", "ADD_BY_FLAVOR_DEV", "\"set_in_build_type\"" 
    }
}

最终 buildTypes的会生效.

4. 添加buildConfigField的时候, 如果是String加上\"

举例:

buildConfigField "String", "ADD_BY_FLAVOR_DEV", 
"ADD_BY_FLAVOR_DEV" 

生成的BuildConfig.java会变成

public static final String ADD_BY_FLAVOR_DEV = ADD_BY_FLAVOR_DEV; 

这并不是一个字符串.

所以需要改为

buildConfigField "String", "ADD_BY_FLAVOR_DEV", 
"\"ADD_BY_FLAVOR_DEV\""   

生成的BuildConfig.java会变成

public static final String ADD_BY_FLAVOR_DEV = "ADD_BY_FLAVOR_DEV";

5.增加BuildType带来的影响

如果增加一个buildType. 叫做 devBuild

buildTypes {
    devBuild{
    }
}

那么:

1.会增加一系列gradle task辅助编译. 比如assembleDevBuild.
2.如果有些依赖只在该buildType中起作用,可以设置为devBuildCompile中依赖

dependencies {
    devBuildCompile  project(':test')
}

3.带来的坑:

因为是新增了devBuild这个build type, 所以

  1. 以前的debugCompile的依赖会全被失效(devBuildCompile会生效)
  1. 如果项目是多个Module组成. 比如 "App" module 依赖于 "Widget" Module.
    "App"中加入的devBuild, 在"widget"并不能使用, 就是说"widget"不能使用devBuildCompile 处理依赖

6.增加Flavor带来的影响

flavor会和buildType做一个组合,生成编译task
如果增加了flavor名为 dev, 会新增assembleDevRelease 和assembleDevDebug 命令

淘票票专业版本修改结果

1.设置两个flavor,控制package name和icon

//build.gradle
android {

productFlavors {
    dev {
            applicationId "com.alipictures.moviepro.dev"
            manifestPlaceholders = [label: "开发版", icon: "@drawable/icon_debug"]
        }
    official {
            applicationId "com.alipictures.moviepro"
            manifestPlaceholders = [label: "@string/app_name", icon: "@drawable/ic_launcher"]
        }
    }
}

2.排除 devRelease; officialDebug这两种编译

//build.gradle
android.variantFilter { variant ->
    if (variant.buildType.name.equals('release')) {
        variant.getFlavors().each() { flavor ->
            if (flavor.name.equals('dev')) {
                variant.setIgnore(true);
            }
        }
    }
    if (variant.buildType.name.equals('debug')) {
        variant.getFlavors().each() { flavor ->
            if (flavor.name.equals('official')) {
                variant.setIgnore(true);
            }
        }
    }
}

3.摩天轮编译命令

测试包:

assembleDevDebug

发布包:

assembleOfficialRelease
目录
相关文章
|
6月前
|
Java Linux iOS开发
Linux下安装并配置Gradle
Linux下安装并配置Gradle
282 0
|
Java Linux Shell
Gradle下载和配置教程:Windows、Mac和Linux系统安装指南
Gradle下载和配置教程:Windows、Mac和Linux系统安装指南
1151 0
|
6月前
|
缓存 Java 开发工具
【开发工具】Gradle的安装 与 配置环境变量
【开发工具】Gradle的安装 与 配置环境变量
221 0
|
XML Java Apache
Gradle安装与配置
Gradle安装与配置
Gradle安装与配置
|
XML IDE Java
Android gradle.properties 基础使用和常规配置
Gradle 是一个开源构建自动化工具,其设计足够灵活,可以构建几乎任何类型的软件。
|
1月前
|
Java Android开发 Windows
玩转安卓之配置gradle-8.2.1
为安卓开发配置Gradle 8.2.1,包括下载和解压Gradle、配置环境变量、修改配置文件以增加国内镜像,以及在Android Studio中配置Gradle和JDK的过程。
73 0
玩转安卓之配置gradle-8.2.1
|
5月前
Gradle安装与配置(8.2)
Gradle安装与配置(8.2)
443 1
|
5月前
|
Java 数据库连接 数据库
在Maven或者Gradle构建配置中添加了必要的依赖
在Maven或者Gradle构建配置中添加了必要的依赖
60 1
|
6月前
|
Java Spring Maven
gradle 配置指南
在`build.gradle`中配置Gradle仓库,首先添加阿里云公共仓库
|
6月前
|
XML Java Android开发
gradle配置
gradle配置
73 0