最近項目中,不一樣環境須要配置的參數愈來愈多,爲了減小修改代碼次數。研究了一下productFlavors的使用方式,總結以下html
1. as3.0以上版本使用productFlavors時須要指定一個flavorDimensions,用於不一樣組合productFlavors。java
2. 每一個productFlavors中能夠自定義各類變量android
替換manifest中的變量須要注意,若是替換2個以上用逗號分隔。api
<meta-data android:name="app_id" android:value="${id_value}" />//佔位符 <meta-data android:name="app_key" android:value="${key_value}" />
flavorDimensions "api", "mode" productFlavors { demo { dimension "mode" buildConfigField("String", "HTTP_BASE", '"https://10.10.10.222/"')//在BuildConfig中添加 String類型的HTTP_BASE 字段 並賦值 buildConfigField("int", "POSITION_1", "10020")//增長 int型 resValue("string","flovor_log","this is free log")//替換 res中String裏的flovor_log字段 ... } full { dimension "mode" buildConfigField("String", "HTTP_BASE", '"https://api-hd-huoyun.com/"') manifestPlaceholders = [id_value: "1234567890",key_value: "0987654321"]//替換manife中的變量 ... } minApi24 { dimension "api" minSdkVersion '24' versionCode 30000 + android.defaultConfig.versionCode//修改版本號 versionNameSuffix "-minApi24"//版本名稱加後綴 ... } minApi23 { dimension "api" minSdkVersion '23' versionCode 20000 + android.defaultConfig.versionCode versionNameSuffix "-minApi23" ... } minApi21 { dimension "api" minSdkVersion '21' versionCode 10000 + android.defaultConfig.versionCode versionNameSuffix "-minApi21" ... } } }
若是須要根據不一樣的productFlavors 依賴不用的包則使用app
configurations { demo full minApi24 .... }
dependencies中修改成ui
dependencies { implementation 'com.android.support:appcompat-v7:26.1.0' ..... demoImplementation(name: 'test-demo', ext: 'aar') fullImplementation(name: 'test-full', ext: 'aar') minApi24Implementation(name: 'test-minApi24', ext: 'aar') ..... }
修改assets路徑,此操做會把指定目錄的文件拷入道工程 assets文件夾中。this
sourceSets {//不一樣 配置 使用不用的 文件 打包時不會 所有打入 assets dev.assets.srcDirs = ['./allAssets/dev'] tes.assets.srcDirs = ['./allAssets/tes'] pro.assets.srcDirs = ['./allAssets/pro'] personal.assets.srcDirs = ['./allAssets/personal'] }
參考:.net
android 多渠道打包的應用code
配置構建變體htm