https://github.com/zawn/android-csv-variants/android
用於在Android Gradle構建時經過CSV文件配置Variants.簡單的說就是經過CSV文件配置渠道包,或者Android Studio 分渠道打包.git
添加CSV文件.github
在項目的根目錄下添加variant.csv文件.格式要求:app
第一行:標題.(用於人閱讀,不參與打包過程.)maven
第二行:最終buildVariants(參見步驟3)中的key.gradle
第三行之後:最終buildVariants中的value.ui
參見源碼目錄下的variant.csv文件.spa
引入依賴.命令行
在buildscript中添加依賴:code
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文件.
程序將從CSV文件中尋找flavorName列,若是沒有flavorName列則尋找name列,並複製name列的值做爲flavorName列.若是name列任然沒有找到,則複製CSV的第一列的值做爲flavorName列.
該列(除去第一行,第二行)每一行表明着一個待添加的flavor.
該步驟在內存中完成,不會對CSV文件作任何更改.
buildVariants的key爲每一行(除第一第二行)flavorName列對應的單元格的值.
buildVariants的value爲flavorName所在行的其他單元格組成的Map( 該Map的key爲所在單元格的標題,value爲單元格的值 ).