android-csv-variants

https://github.com/zawn/android-csv-variants/

目的

用于在Android Gradle构建时通过CSV文件配置Variants.简单的说就是通过CSV文件配置渠道包,或者Android Studio 分渠道打包.

用法

  1. 添加CSV文件.

    在项目的根目录下添加variant.csv文件.格式要求:

    第一行:标题.(用于人阅读,不参与打包过程.)

    第二行:最终buildVariants(参见步骤3)中的key.

    第三行以后:最终buildVariants中的value.

    参见源码目录下的variant.csv文件.

  2. 引入依赖.

    在buildscript中添加依赖:

    classpath 'com.house365.build:android-csv-variants:1.0.3'

    最终效果可能如下格式:

     buildscript {
    repositories {
    jcenter()
    }
    dependencies {
    classpath 'com.android.tools.build:gradle:1.3.1'
    classpath 'com.house365.build:android-csv-variants:1.0.3' // NOTE: Do not place your application dependencies here; they belong
    // in the individual module build.gradle files
    }
    }
  3. 在build.gradle中添加配置.

    android {
    LinkedHashMap<String, LinkedHashMap<String, String>> buildVariants = VariantsUtil.readVariantsFromFile(project) /**
    * 添加Flavor
    */
    productFlavors {
    buildVariants.each { flavorName, keyValueMap ->
    "$flavorName" {
    applicationId = keyValueMap.get("applicationId")
    // resValue "string", "app_name2", "Some new value"
    // buildConfigField "boolean", 'analyse_flag', channel.get("analyse_flag").toLowerCase()
    // manifestPlaceholders = [UMENG_CHANNEL_VALUE: channel.get("name")]
    }
    }
    } /**
    * 过滤掉配置文件中未指定的衍生版本.
    * 即去掉配置文件中未指定的Flavor + BuildType组合.
    */
    variantFilter { filter ->
    filter.flavors.each { flavor ->
    if (buildVariants.containsKey(flavor.name)) {
    final LinkedHashMap<String, String> keyValueMap = buildVariants.get(flavor.name)
    def buildTypeArray = keyValueMap.get("buildType").replace(";", ";").split(";")
    if (filter.buildType.name in buildTypeArray) {
    filter.ignore = false
    println "Activate variant :" + String.format("%15s %s", flavor.name, filter.buildType.name)
    } else {
    filter.ignore = true
    }
    }
    }
    }
    }

其他说明

配置文件指定

默认的VariantsUtil类将首先读取projectvariantFileURL属性,该属性可以通过文件gradle.properties指定,也可以通过命令行传入,具体格式如下:

  • gradle.properties指定:

    variantFileURL=%variantFileURLValue%

  • 命令行传入:

    -PvariantFileURL=%variantFileURLValue%

其中variantFileURLValue支持相对路径(相对于project目录)/绝对路径/URL.

如果项目没有指定variantFileURL属性,则默认读取project/variant.csv文件.

flavorName

  1. 程序将从CSV文件中寻找flavorName列,如果没有flavorName列则寻找name列,并复制name列的值作为flavorName列.如果name列任然没有找到,则复制CSV的第一列的值作为flavorName列.

  2. 检查flavorName列的值是否重复,以及flavorName配置是否有效.并将配置的flavorName转换为英文全拼.

  3. 该列(除去第一行,第二行)每一行代表着一个待添加的flavor.

该步骤在内存中完成,不会对CSV文件做任何更改.

buildVariants

buildVariants的key为每一行(除第一第二行)flavorName列对应的单元格的值.

buildVariants的value为flavorName所在行的其余单元格组成的Map( 该Map的key为所在单元格的标题,value为单元格的值 ).

android-csv-variants的更多相关文章

  1. 【原创】Android AOP面向切面编程AspectJ

    一.背景: 在项目开发中,对 App 客户端重构后,发现用于统计用户行为的友盟统计代码和用户行为日志记录代码分散在各业务模块中,比如在视频模块,要想实现对用户对监控点的实时预览和远程回放行为进行统计, ...

  2. AOP面向切面编程在Android中的使用

    GitHub地址(欢迎下载完整Demo) https://github.com/ganchuanpu/AOPDemo 项目需求描述 我想类似于这样的个人中心的界面,大家都不会陌生吧.那几个有箭头的地方 ...

  3. Android面向切面编程(AOP)(转)

    转自:https://www.jianshu.com/p/aa1112dbebc7 一.简述 1.AOP的概念 如果你用java做过后台开发,那么你一定知道AOP这个概念.如果不知道也无妨,套用百度百 ...

  4. 移动架构-AOP面向切面编程

    AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AOP是OOP的延续,是软件开发中的一个热点, ...

  5. Android Sqlite 导入CSV文件 .

    http://blog.csdn.net/johnnycode/article/details/7413111 今天遇到 Oracle 导出的12万条CSV格式数据导入 Android Sqlite ...

  6. The module is an Android project without build variants, and cannot be built

    导入 安卓项目报错 Error:The module 'app' is an Android project without build variants, and cannot be built. ...

  7. Android Strings.xml To CSV / Excel互转

    Android Strings.xml To CSV/Excel互转https://blog.csdn.net/hzxpyjq/article/details/50686983https://blog ...

  8. android之csv导出

    import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.Fi ...

  9. Android Gradle Plugin指南(五)——Build Variants(构建变种版本号)

    原文地址:http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants 6. Build Vari ...

  10. python实现将android手机通讯录vcf文件转化为csv

    经常会遇到将手机通讯录导出到电脑并转化为在电脑中可编辑的情况,在网上搜索了很久当前不外乎两种处理方式.1.使用电脑的outlook的通讯簿功能,将手机导出的vcf文件导入到outlook的通讯录中,然 ...

随机推荐

  1. PlSqlDev中执行INSERT SQL语句包含&符号导致数据异常

    在PLSQL Developer中执行Insert语句时提示如下信息: 当时未注意,直接点击OK按钮继续. 导入数据后查看发现部分数据中的参数丢失了一部分,呈以下规律: . 而正常应为: . 经询问大 ...

  2. unix&linux常用命令分类表

    本附录([美]哈恩:<Unix&Linux大学教程>附录B,张杰良译,清华大学出版社,2010年)摘要描述了书中所涉及的143个Unix使命,并且按照命令的类别进行排列.在每个名称 ...

  3. maven创建springMVC项目(一)

    1.Eclipse配置 添加maven集成安装包:路径是maven下载安装的解压位置,如果不知道如何下载安装请点击这里看我的另一篇安装文章,这里不多说 这里需要注意的是: a.settings.xml ...

  4. 在switch中的case语句中声明变量会被提前

    原文链接:http://my.oschina.net/u/2000201/blog/514384 本人今天在编写工具类时,无意之间发现,在Java的Swith语句的case语句中声明局部变量时出现了一 ...

  5. VS中以插件开发的思想开发Winform应用

    简单定义: 插件(也称构件)式开发:主要内容就是一个宿主程序加上后期开发的若干插件程序构成整个系统! 宿主程序提供接口注册,插件注册实现接口,从而使不同的插件提供新的功能: 举例: 以下是用VS中的W ...

  6. 【cpp】new delete

    double *M = new double[2*num]; double *T = new double[2 * num]; double *activeM = new double[2 * num ...

  7. codevs 1267 老鼠的旅行 2012年CCC加拿大高中生信息学奥赛

    时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题目描述 Description You are a mouse that lives in a cage in ...

  8. eclipse中Lombok注解无效

    问题现象:eclipse中使用lombok的@Date,引用get方法时,报错. 解决方案: 在lombok官网(https://www.projectlombok.org/download)下载,或 ...

  9. 原生JS forEach()和map()遍历,jQuery$.each()和$.map()遍历

    一.原生JS forEach()和map()遍历 共同点: 1.都是循环遍历数组中的每一项. 2.forEach() 和 map() 里面每一次执行匿名函数都支持3个参数:数组中的当前项item,当前 ...

  10. 想转行做web前端工程师,必学这5大技能!知道是那些吗?

    web前端工程师是近几年才发展出来的新兴职业,也是目前火爆且高薪的职业. 大需求的市场环境下,出现了越来越多的人群转行做web前端工程师,如设计师.后台程序员.网虫.大学其他专业.策划.编辑等等. 要 ...