文档章节

productFlavors简单实用

火云
 火云
发布于 08/21 11:03
字数 466
阅读 20
收藏 0

最近项目中,不同环境需要配置的参数越来越多,为了减少修改代码次数。研究了一下productFlavors的使用方式,总结如下

1. as3.0以上版本使用productFlavors时需要指定一个flavorDimensions,用于不同组合productFlavors。

2. 每个productFlavors中可以自定义各种变量

替换manifest中的变量需要注意,如果替换2个以上用逗号分隔。

<meta-data
            android:name="app_id"
            android:value="${id_value}" />//占位符
        <meta-data
            android:name="app_key"
            android:value="${key_value}" />
flavorDimensions "api", "mode"

  productFlavors {
    demo {
      dimension "mode"
      buildConfigField("String", "HTTP_BASE", '"https://10.10.10.222/"')//在BuildConfig中添加 String类型的HTTP_BASE 字段 并赋值
      buildConfigField("int", "POSITION_1", "10020")//增加 int型
      resValue("string","flovor_log","this is free log")//替换 res中String里的flovor_log字段
      ...
    }

    full {
      dimension "mode"
      buildConfigField("String", "HTTP_BASE", '"https://api-hd-huoyun.com/"')
      manifestPlaceholders = [id_value: "1234567890",key_value: "0987654321"]//替换manife中的变量
      ...
    }

    minApi24 {
      dimension "api"
      minSdkVersion '24'
      versionCode 30000 + android.defaultConfig.versionCode//修改版本号
      versionNameSuffix "-minApi24"//版本名称加后缀
      ...
    }

    minApi23 {
      dimension "api"
      minSdkVersion '23'
      versionCode 20000  + android.defaultConfig.versionCode
      versionNameSuffix "-minApi23"
      ...
    }

    minApi21 {
      dimension "api"
      minSdkVersion '21'
      versionCode 10000  + android.defaultConfig.versionCode
      versionNameSuffix "-minApi21"
      ...
    }
  }
}

如果需要根据不同的productFlavors 依赖不用的包则使用

configurations {
    demo
    full
    minApi24
    ....
}

dependencies中修改为

dependencies {

    implementation 'com.android.support:appcompat-v7:26.1.0'
    .....
    demoImplementation(name: 'test-demo', ext: 'aar')
    fullImplementation(name: 'test-full', ext: 'aar')
    minApi24Implementation(name: 'test-minApi24', ext: 'aar')
    .....
}

修改assets路径,此操作会把指定目录的文件拷入道工程 assets文件夹中。

sourceSets {//不同  配置 使用不用的 文件  打包时不会 全部打入 assets
        dev.assets.srcDirs = ['./allAssets/dev']
        tes.assets.srcDirs = ['./allAssets/tes']
        pro.assets.srcDirs = ['./allAssets/pro']
        personal.assets.srcDirs = ['./allAssets/personal']
    }

参考:

android 多渠道打包的应用

配置构建变体

解决方案:Error:Execution failed for task ':app:processDebugManifest'. > Manifest merger failed with multiple errors, see logs

productFlavors在Lib(Module)中的使用

 

© 著作权归作者所有

共有 人打赏支持
火云
粉丝 4
博文 83
码字总数 9936
作品 0
西城
Android工程师
Android使用Gradle实现多渠道打包

这里我们主要用到gradle文件中的buildTypes和productFlavors,今天我们主要研究下它俩。 先上图: buildTypes 构建类型 默认情况下,Android插件自动为项目构建一个debug和一个release版本的...

安卓干货营
2017/12/14
0
0
使用Gradle构建多版本app

资源文件个性化处理 res目录下的都算资源文件(layout、values、drawable、mipmap) 在build.gradle中定义productFlavors buildToolsVersion "24.0.2"defaultConfig {applicationId "com.atea......

atearsan
2016/09/19
24
2
Gradle打包APK的一些小技巧和productFlavor配置

前言 在使用Gradle来打包Android应用之前,Android自动化打包通常会选择使用ant,ant是一种一步一步来执行任务的工具,通常打包一个apk要经过一个复杂的过程,ant工具通过一步一步完成这些过...

SuShine
2016/08/01
1K
0
Android 多渠道打包原理和使用

每次中午吃饭总会和技术同学聊天。当做 iOS 开发的做安卓开发的人员在一起的时候,他们中间又多了一个话题:iOS 开发难还是安卓开发难。 这个时候做安卓开发的同学最激动说安卓开发要自己画界...

OneAPM蓝海讯通
2015/12/11
36
0
手把手教你AndroidStudio多渠道打包

最近不断有朋友向我咨询AndroidStudio多渠道的打包方法,今天整理一下之前积累的打包套路,写一篇文章,手把手的教给大家。 (一)在AndroidManifest.xml里设置动态渠道变量 (二)在build.g...

丁佳辉
2016/07/01
39
0

没有更多内容

加载失败,请刷新页面

加载更多

【解惑】领略Java内部类的“内部”

内部类有两种情况: (1) 在类中定义一个类(私有内部类,静态内部类) (2) 在方法中定义一个类(局部内部类,匿名内部类) 1、私有内部类 —— 在方法之间定义的内部类,非静态 我们首先看看类中...

偶尔诗文
29分钟前
1
0
sqlserver 2008 r2 直接下载地址(百度云)

之前下载的sqlserver2008发现不能附加,就卸载了,重新找到了sqlserver2008R2的百度云资源 卸载sqlserver2008还是有点麻烦,不过就是需要删除注册表中的信息 自己来回卸载了3次终于重装sqlse...

dillonxiao
58分钟前
1
0
[Java]JVM调优总结 -Xms -Xmx -Xmn -Xss

JVM调优总结 -Xms -Xmx -Xmn -Xss 博客分类: Java General JVM应用服务器电信CMS算法 堆大小设置 JVM 中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制;系统的可...

morpheusWB
今天
2
0
C++ std::function 和 std::bind

C++11提供了std::function和std::bind两个工具,用于引用可调用对象。这些可调用对象包括 普通函数,Lambda表达式,类的静态成员函数,非静态成员函数以及仿函数等。引用可调用对象,可以用于...

yepanl
今天
4
0
python:可迭代对象的索引

关于 python的range的用法: 注意是[ 开始,结束)的半开区间,不包括结束 http://www.runoob.com/python/python-func-range.html import collectionsfrom collections import Iterable字符串......

Oh_really
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部