Gradle 多环境配置
来源:互联网 发布:toblerone淘宝 编辑:程序博客网 时间:2024/06/05 22:42
设置不同的BuildType
可以通过设置不同的 BuildType 来生成多个版本的配置。修改 app 模块下的 build.gradle:
android { compileSdkVersion 23 buildToolsVersion "23.0.2" defaultConfig { applicationId "com.kasogg.demo" minSdkVersion 15 targetSdkVersion 23 versionCode 1 versionName "1.0" } buildTypes { debug { buildConfigField 'String', 'BASE_URL', '"http://debugUrl"' } sim { buildConfigField 'String', 'BASE_URL', '"http://simUrl"' minifyEnabled true // 开启Proguard shrinkResources true // 移除无用资源 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } release { buildConfigField 'String', 'BASE_URL', '"http://releaseUrl"' minifyEnabled true shrinkResources true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } }}
设置完 BuildType 后,在 Build Variants 窗口中对应的 Module 会生成相应的 Build Variant:
buildConfigField
上面设置了一个类型为 String 的 BASE_URL 字段。构建后会在 build/generated/source/buildConfig 下面生成对应 BuildType 类型的 BuildConfig 文件,里面包含了所设置 buildConfigField 的值。
假如我们选择 debug 类型进行构建将会生成:
debug/com.kasogg.demo/BuildConfig.Java:
/** * Automatically generated file. DO NOT MODIFY */package com.kasogg.demo;
public final class BuildConfig {
public static final boolean DEBUG = false;
public static final String APPLICATION_ID = "com.kasogg.demo";
public static final String BUILD_TYPE = "sim";
public static final String FLAVOR = "";
public static final int VERSION_CODE = 1;
public static final String VERSION_NAME = "1.0";
// Fields from build type: debug public static final String BASE_URL = "http://debugUrl";}
由此我们可以根据不同环境设置不同的服务器地址,直接选择不同的 Build Variants 打包就会自动生成相应的 BASE_URL 常量,我们可以直接在项目中引用,而不用每次手动修改了。
结合配置文件管理地址
我们可以创建一个 server.properties 来存放服务器地址:
server_url.properties:
debugUrl="http://debugUrl"
simUrl="http://simUrl"
releaseUrl="http://releaseUrl"
修改 app 模块下的 build.gradle:
def Properties props = new Properties()def propFile = file('server_url.properties')def debugUrl, simUrl, releaseUrl
if (propFile.canRead()) { props.load(new FileInputStream(propFile)) if (props != null) { debugUrl = props['debugUrl'] simUrl = props['simUrl'] releaseUrl = props['releaseUrl'] }}android { ... buildTypes { debug { buildConfigField 'String', 'BASE_URL', debugUrl } sim { buildConfigField 'String', 'BASE_URL', simUrl ... } release { buildConfigField 'String', 'BASE_URL', releaseUrl ... } }}
上面定义了三个变量,并将 server_url.properties 中的键值对读入到这些变量中,并赋给 buildConfigField 使用。以后不同环境打包的时候只需要选择不同的 Build Variants 就可以了,而不用每次都手动修改地址了。
设置不同 sourceSets
假如每个 BuildType 应用到不同的源文件该怎么办呢?我们可以使用 sourceSets 来指定他们的源文件目录。
在 src 下创建 build-types 文件夹,并根据 build.gradle 中设置的 buildTypes 创建相应的文件夹。
假如我们不同环境中需要不同的源文件的话,只需要仿照 src/main 目录的结构创建对应的那个不同文件即可。
构建的时候会首先从给定的 buildType 对应的文件夹中寻找文件,如果不存在会再从 main 中寻找文件。因此不需要将所有文件从 main 中复制过来,只需要放入有差异的的文件即可。
修改 app 模块下的 build.gradle 文件,添加 sourceSets 部分:
android { ...
sourceSets { debug.setRoot('src/build-types/debug') sim.setRoot('src/build-types/sim') release.setRoot('src/build-types/release') } ... buildTypes { debug { ... } sim { ... } release { ... } }
这样以后构建时就会自动根据不同类型下的文件来构建了。
多 Module 构建的情况
新建一个 library module,名为 library。同样可以为 library 设置不同的 buildType。
有这样一个需求,如果我想根据不同的 BuildType 来依赖不同的 library module,并且 library 也具有不同的 BuildType,该怎么做呢?
打开 app 的 build.gradle 文件并修改 dependencies:
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
debugCompile project(path: ':library', configuration: 'debug') simCompile project(path: ':library', configuration: 'debug') releaseCompile project(path: ':library', configuration: 'release') compile 'com.android.support:appcompat-v7:23.1.1'
}
其中 debugCompile 对应的就是上面 debug 的 buildType,path 就是 library module 的名字,configuration 为 library 的 buildType。这样就可以根据不同的 buildType 来依赖不同的 library 了。
当点击构建之后,会发现报一个错误:
Error:Configuration with name 'debug' not found.
这时候只要在 library 的build.gradle 加入publishNonDefault true
即可,这样就可以启动其它 Variants 的发布了。
android { compileSdkVersion 23 buildToolsVersion "23.0.2" publishNonDefault true ...
内容来自微信公众号 猿人部落(yuanrenclub) KasoGG
侵删.
- Gradle 多环境配置
- Gradle 多环境配置
- Gradle多环境配置
- Android 使用gradle配置多环境打包
- 如何配置gradle环境
- Eclipse + Gradle环境配置
- Mac 配置gradle环境
- Window配置gradle环境
- gradle环境配置
- 配置Gradle环境
- Mac下配置Gradle环境
- Gradle下载及环境配置
- Mac上配置gradle环境
- mac环境下配置gradle
- MacOS中Gradle环境配置
- gradle 使用技巧一(jetty jndi,多环境配置)
- Android 一站式打包(一)gradle 动态配置多环境
- Android 开发 Gradle 配置多环境和多渠道
- DUBBO-Lite 简化的DUBBO框架与高性能升级,以及完美的Spring集成能力
- Mysql 安全
- qt 常用类型转换
- MFC实现全局热键
- npm使用手记
- Gradle 多环境配置
- 你是否还在质疑EF的性能
- ROS_Kinetic_01 在 Ubuntu 16.04 安装ROS Kinetic 全教程附资料和镜像 2017.02.15更新
- C 结构体嵌套一级指针 二级指针 动态分配内存
- 第十一周阅读程序(补充)----(2)改变继承类型
- leetcode.227. Basic Calculator II
- 基于openfire的webIM的实现机制想法
- Android------startActivityForResult的详细用法
- 第十一周实践项目(3)