android-csv-variants
android-csv-variants
https://github.com/zawn/android-csv-variants/
目的
用于在Android Gradle构建时通过CSV文件配置Variants.简单的说就是通过CSV文件配置渠道包,或者Android Studio 分渠道打包.
用法
添加CSV文件.
在项目的根目录下添加variant.csv文件.格式要求:
第一行:标题.(用于人阅读,不参与打包过程.)
第二行:最终buildVariants(参见步骤3)中的key.
第三行以后:最终buildVariants中的value.
参见源码目录下的variant.csv文件.
引入依赖.
在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
}
}
在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类将首先读取project的variantFileURL属性,该属性可以通过文件gradle.properties指定,也可以通过命令行传入,具体格式如下:
gradle.properties指定:
variantFileURL=%variantFileURLValue%命令行传入:
-PvariantFileURL=%variantFileURLValue%
其中variantFileURLValue支持相对路径(相对于project目录)/绝对路径/URL.
如果项目没有指定variantFileURL属性,则默认读取project/variant.csv文件.
flavorName
程序将从CSV文件中寻找flavorName列,如果没有flavorName列则寻找name列,并复制name列的值作为flavorName列.如果name列任然没有找到,则复制CSV的第一列的值作为flavorName列.
检查flavorName列的值是否重复,以及flavorName配置是否有效.并将配置的flavorName转换为英文全拼.
该列(除去第一行,第二行)每一行代表着一个待添加的flavor.
该步骤在内存中完成,不会对CSV文件做任何更改.
buildVariants
buildVariants的key为每一行(除第一第二行)flavorName列对应的单元格的值.
buildVariants的value为flavorName所在行的其余单元格组成的Map( 该Map的key为所在单元格的标题,value为单元格的值 ).
android-csv-variants的更多相关文章
- 【原创】Android AOP面向切面编程AspectJ
一.背景: 在项目开发中,对 App 客户端重构后,发现用于统计用户行为的友盟统计代码和用户行为日志记录代码分散在各业务模块中,比如在视频模块,要想实现对用户对监控点的实时预览和远程回放行为进行统计, ...
- AOP面向切面编程在Android中的使用
GitHub地址(欢迎下载完整Demo) https://github.com/ganchuanpu/AOPDemo 项目需求描述 我想类似于这样的个人中心的界面,大家都不会陌生吧.那几个有箭头的地方 ...
- Android面向切面编程(AOP)(转)
转自:https://www.jianshu.com/p/aa1112dbebc7 一.简述 1.AOP的概念 如果你用java做过后台开发,那么你一定知道AOP这个概念.如果不知道也无妨,套用百度百 ...
- 移动架构-AOP面向切面编程
AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AOP是OOP的延续,是软件开发中的一个热点, ...
- Android Sqlite 导入CSV文件 .
http://blog.csdn.net/johnnycode/article/details/7413111 今天遇到 Oracle 导出的12万条CSV格式数据导入 Android Sqlite ...
- 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. ...
- Android Strings.xml To CSV / Excel互转
Android Strings.xml To CSV/Excel互转https://blog.csdn.net/hzxpyjq/article/details/50686983https://blog ...
- android之csv导出
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.Fi ...
- Android Gradle Plugin指南(五)——Build Variants(构建变种版本号)
原文地址:http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants 6. Build Vari ...
- python实现将android手机通讯录vcf文件转化为csv
经常会遇到将手机通讯录导出到电脑并转化为在电脑中可编辑的情况,在网上搜索了很久当前不外乎两种处理方式.1.使用电脑的outlook的通讯簿功能,将手机导出的vcf文件导入到outlook的通讯录中,然 ...
随机推荐
- getpass不起作用
#! /usr/bin/env python# -*- coding:utf-8 -*- # login 模块中登录时输入密码,想用getPass模块实现密码的不回显操作.#如下: import ge ...
- volatile关键字简单摘要
volatile就可以说是java虚拟机提供的最轻量级的同步机制 特性: 1.保证共享变量的可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的——要了解主存.高速缓存还有Java内 ...
- [已读]高性能JavaScript
值得多读几遍的书.
- ecshop属性 {$goods.goods_attr|nl2br} 标签的赋值相关
1.nl2br() 函数在字符串中的每个新行 (\n) 之前插入 HTML 换行符 (<br />). 2. 如果要向{$goods.goods_attr|nl2br}赋新值,这个值是保存 ...
- kafka-->storm-->mongodb
目的: 通过Spout发射kafka的数据,到bolt统计每一个单词的个数,将这些记录更新到mongodb中. Spout的nextTuple方法会一直处于一个while循环这中,每一条数据发送给bo ...
- IE和火狐下的iframe刷新
前面使用了前端上传插件plupload,在谷歌浏览器中运行完全没问题,但是在IE和火狐下就出现当文档加载完成之后,该文件上传的iframe插件的上传按钮点击无效,当对上传的文件进行一次删除之后,按钮就 ...
- Azure Powershell 获取可用镜像 PublisherName,Offer,Skus,Version
#登录 $username="{登录名}" #定义一个用户账号的变量,可以输入需要登录的订阅账号名称 $password=ConvertTo-SecureString -Strin ...
- MFC技术积累——基于MFC对话框类的那些事儿
1. 创建对话框类 (1)打开VC++6.0环境,点击:文件→新建: (2)在弹出的新建对话框中选择:工程→MFC AppWizard (exe)→输入工程名称(例如:功能调试)→工程保存路径名→确定 ...
- rhythmbox插件开发笔记2:背景知识学习 D-Bus&VFS&Gio& Python GTK+ 3
这次主要简单介绍下相关的背景知识 D-Bus&VFS&Gio& Python GTK+ 3 D-Bus D-Bus是开源的进程通信(IPC)系统,它允许多个进程进行实时通信. ...
- Servlet Context
Servlet Context Container Provider 负责提供ServletContext的实现. A ServletContext is rooted at a known path ...