gradle配置 flavor和buildType小结

业务需求

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

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

开发版本

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

线上版本

图标:
包名: 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会生效)
  2. 如果项目是多个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
时间: 2024-08-04 10:18:29

gradle配置 flavor和buildType小结的相关文章

你该知道的Gradle配置知识总结

前言 本文主要介绍了关于Gradle配置的相关知识,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 参考链接:https://developer.android.com/studio/build/index.html 本片文章的内容全部参考自上面的链接,其中有些内容是直接翻译的,有些内容是结合自己的经验总结的,可能有理解错误的地方,非常希望大家能指正出来,在交流中进步. Gradle 编译过程 编译流程图 上图展示了一个典型的 App 编译过程,主要分为以几步: 编译器将源代码

Android Gradle配置

解决问题 错误: Could not find the AndroidManifest.xml file, going up from path  //打开app build.gradle文件加入以下代码   /** * AA注解Apt配置 */ apt { arguments { androidManifestFile variant.processResources.manifestFile resourcePackageName AppPackageName } } 错误:  Could

IIS7.X配置PHP运行环境小结

一.使用IIS运行PHP程序 1.首先下载PHP,这里我下载的是php5.2.14(如果是其他高版本的话可能找不到php5isapi.dll,其相关配置方法暂且不论),建议下载zip压缩包,不需安装就可以了,并且下载时请注意用选择VC9的包而不是VC6(这个是apache用的).例如我解压到d:\ php-5.2.14-Win32. 2.找到php.ini-dist 修改为php.ini ,然后打开文件: 找到register_globals = Off 修改为register_globals

MySQL配置和设置问题小结

问题1: [root@Tony_ts_tian bin]# mysqladmin -uroot password 'kaka123' mysqladmin: connect to server at 'localhost' failed ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)' [root@Tony_ts_tian bin]# mysql ERROR 1045 (2800

lnmp环境安装配置后优化方法小结

Lnmp配置优化 一. 基于xen架构的可以增加swap分区大小我的vps是openVZ的,swap分区是不能随意更改的.PS.主机商已经提供了128M的swap了.满足了!  代码如下 复制代码  cd /var/ dd if=/dev/zero of=swapfile bs=1024 count=262144 /sbin/mkswap swapfile /sbin/swapon swapfile 然后让自己做的swap分区在系统启动时自动加载:  代码如下 复制代码 vi /etc/fsta

IIS7.X配置PHP运行环境小结_php技巧

一.使用IIS运行PHP程序 1.首先下载PHP,这里我下载的是php5.2.14(如果是其他高版本的话可能找不到php5isapi.dll,其相关配置方法暂且不论),建议下载zip压缩包,不需安装就可以了,并且下载时请注意用选择VC9的包而不是VC6(这个是apache用的).例如我解压到d:\ php-5.2.14-Win32. 2.找到php.ini-dist 修改为php.ini ,然后打开文件: 找到register_globals = Off 修改为register_globals

Apache Wind2003 配置网站目录权限小结_win服务器

非常简单的权限设置,就是访问网站时会弹出用户名和密码,通过身份验证后可以正常浏览,如下图. 在Apache和Windows2003中配置起来也非常方便,主要参考了Apche的手册 1.建立密码文件 Apache在其安装目录的bin子目录中提供了htpasswd工具,用于建立密码文件: 复制代码 代码如下: htpasswd -b -c -m -d -s c:\password.txt username password 其中-m -d -s都是加密的方式,具体见参考手册 2.启用认证 其中方式有

nginx负载均衡配置集群方法小结

nginx负载均衡一, 1. 安装时不要安装在源代码同一个目录下,make时会报错的.  代码如下 复制代码 ./configure --prefix=/opt/nginx make && make install 2. 修改配置文件/opt/nginx/conf/nginx.conf 在server元素前增加:(假设两个tomcat的端口都是8080)  代码如下 复制代码 upstream www.111cn.net   { server   192.168.1.13:8080; se

详解Androidstudio3.0 关于Gradle报错的问题(小结)

前言 升级Android Studio to 3.0 canary 1版本后,之前一个正常的Project,一直报错,报错内容如下 Error:Failed to complete Gradle execution. Cause: The version of Gradle you are using (3.3) does not support the forTasks() method on BuildActionExecuter. Support for this is available