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的通讯录中,然 ...
随机推荐
- 【aspnetcore】让aspnetcore支持less文件
第一步:新建文件 CustomerFileExtensionContentTypeProvider namespace xxx { public class CustomerFileExtension ...
- 105 Construct Binary Tree from Preorder and Inorder Traversal 从前序与中序遍历序列构造二叉树
给定一棵树的前序遍历与中序遍历,依据此构造二叉树.注意:你可以假设树中没有重复的元素.例如,给出前序遍历 = [3,9,20,15,7]中序遍历 = [9,3,15,20,7]返回如下的二叉树: ...
- 别让CDN的回源把你的服务器拖垮,采用正确的回源策略
我们有一台服务器提供的服务主要是以动态页面为主,静态页面都是固定的内容平时更新的很少,最近这台服务器的应用升级到了新版本访问量增大了不少,随之的问题就来了,最近每天一到9点负载就超过警戒值,然后负载持 ...
- Flask 学习系列(二)---Jinjia2模板
下面是一个jinjia2的简单模板的例子: <!DOCTYPE html> <html lang="en"> <head> <meta c ...
- 1102 采药 2005年NOIP全国联赛普及组
1102 采药 2005年NOIP全国联赛普及组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 辰辰是个天资聪颖的孩子 ...
- IE下的圆角
元素{ position: relative;/*必须*/ z-index: 10;/*必须*/ border-radius: 8px; -moz-border-radius: 8px; -webki ...
- GraphicsMagick安装&make命令使用
0.0本过程为GraphicsMagick Linux版安装,通过典型的make编译安装. 未了支持png和jpg格式,首先请安装依赖.执行 yum install -y libpng-devel y ...
- Android中的ListView属性使用总结
Android中使用ListView控件比较常见,如果能知道常用的一些属性使用,肯定会少很多坑. 1.ListView是常用的显示控件,默认背景是和系统窗口一样的透明色,如果给ListView加上背景 ...
- apache安装报错
libtool: install: error: cannot install `libaprutil-1.la' to a directory not ending /some_directory ...
- Azure 项目构建 – 部署 Jenkins 服务器以实现持续集成(CI)
通过完整流程详细介绍了如何通过 Azure 虚拟机.虚拟网络等服务在 Azure 平台上快速搭建 Jenkins 服务器. 此系列的全部课程 https://school.azure.cn/curri ...