android-csv-variants

android-csv-variants

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

Download

目的

用於在Android Gradle構建時經過CSV文件配置Variants.簡單的說就是經過CSV文件配置渠道包,或者Android Studio 分渠道打包.git

用法

  1. 添加CSV文件.github

    在項目的根目錄下添加variant.csv文件.格式要求:app

    第一行:標題.(用於人閱讀,不參與打包過程.)maven

    第二行:最終buildVariants(參見步驟3)中的key.gradle

    第三行之後:最終buildVariants中的value.ui

    參見源碼目錄下的variant.csv文件.spa

  2. 引入依賴.命令行

    在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
        }
    }
  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爲單元格的值 ).

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息