2016-02-18 3 views
2

Это простой Gradle с тремя вкусами:Как перечислить все ароматы в buildConfig через Gradle в Android

apply plugin: 'com.android.application' 

android { 
    compileSdkVersion 23 
    buildToolsVersion "23.0.2" 

    defaultConfig { 
     applicationId "com.apipas.app.listallflavor" 
     minSdkVersion 14 
     targetSdkVersion 23 
     versionCode 1 
     versionName "1.0" 
    } 
    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 

    productFlavors { 

     au { 
      applicationId 'com.apipas.app.listallflavor.au' 
      resConfigs 'en-rAU' 
     } 
     es { 
      applicationId 'com.apipas.app.listallflavor.es' 
      resConfigs 'es' 
     } 

     de { 
      applicationId 'com.apipas.app.listallflavor.de' 
      resConfigs 'de' 
     } 

    } 
    productFlavors.all { 
     flavor -> 
      println(flavor.name) 
      buildConfigField 'String', 'var_'+flavor.name, '\"'+flavor.name+'\"' 
    } 
} 

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    testCompile 'junit:junit:4.12' 
    compile 'com.android.support:appcompat-v7:23.1.1' 
} 

BuildConfig.java является:

/** 
* Automatically generated file. DO NOT MODIFY 
*/ 
package com.apipas.app.listallflavor; 

public final class BuildConfig { 
    public static final boolean DEBUG = Boolean.parseBoolean("true"); 
    public static final String APPLICATION_ID = "com.apipas.app.listallflavor.au"; 
    public static final String BUILD_TYPE = "debug"; 
    public static final String FLAVOR = "au"; 
    public static final int VERSION_CODE = 1; 
    public static final String VERSION_NAME = "1.0"; 
    // Fields from product flavor: au 
    public static final String var_au = "au"; 
} 

Что я ожидал:

/** 
* Automatically generated file. DO NOT MODIFY 
*/ 
package com.apipas.app.listallflavor; 

public final class BuildConfig { 
    public static final boolean DEBUG = Boolean.parseBoolean("true"); 
    public static final String APPLICATION_ID = "com.apipas.app.listallflavor.au"; 
    public static final String BUILD_TYPE = "debug"; 
    public static final String FLAVOR = "au"; 
    public static final int VERSION_CODE = 1; 
    public static final String VERSION_NAME = "1.0"; 
    // Fields from product flavor: au 
    public static final String var_au = "au"; 
    public static final String var_de = "de"; 
    public static final String var_es = "es"; 
} 

Странно, что я вижу все ароматы в бревнах: au de es

но у меня нет полей в buildConfig для 'de' и 'es', как я и ожидал .. какой-нибудь намек, ребята?

ответ

4
productFlavors.all { 
     flavor -> 
      defaultConfig.buildConfigField 'String', 'var_'+flavor.name, '\"'+flavor.name+'\"' 
    } 
+0

Ваша версия лучше ... спасибо коллеге, –

2

Вы видите этот файл, потому что в вашей IDE (я думаю, студии андроида) вы выбираете вариант сборки AuDebug. Если вы хотите увидеть другой вариант. Вы можете выбрать Build -> Select Build Variant... и выбрать вариант, который вы хотите построить. Затем перестройте, и вы увидите изменение файла BuildConfig.

Каждый BuildConfig генерируется на основе каждого варианта (тип вкуса и типа сборки). Вы можете увидеть свой BuildConfig в [каталоге вашего приложения]/[ваше приложение]/build/generated/source/[ваш вкус]/[ваш тип сборки]/[ваш пакет] /BuildConfig.java

+0

Означает ли это, я нужно t o зацикливать весь аромат для всех вариантов, чтобы получить все вкусы в каждом варианте? –

0

Я понял, как чтобы решить, что .. спасибо Pi Vincii

решение цикла все ароматы для каждого варианта и использование вариантов ссылок для установки buildConfig

код внутри андроида в Gradle:

applicationVariants.all { variant -> 
    android.productFlavors.all { 
     flavor -> 
      println(flavor.name) 
      variant.buildConfigField 'String', 'var_' + flavor.name, '\"' + flavor.name + '\"' 
    } 
} 
Смежные вопросы