如何通过 gradle 在 Android 中列出 buildConfig 中的所有口味
How to list all flavors in buildConfig via gradle in Android
这是一个简单的 gradle,具有三种口味:
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";
}
奇怪的是我可以在日志中看到所有类型:
金
德
es
但是我在 buildConfig 中没有 'de' 和 'es' 的字段,正如我所料.. 有什么提示吗,伙计们?
您看到此文件是因为在您的 IDE(我猜 android 工作室)中您选择的构建变体是 AuDebug
。如果你想看到另一个变体。您可以 select Build -> Select Build Variant...
然后选择要构建的变体。然后rebuild,可以看到BuildConfig文件的变化。
每个 BuildConfig 都是基于每个变体(风格和构建类型)生成的。您可以在 [您的应用程序目录]/[您的应用程序]/build/generated/source/[您的风格]/[您的构建类型]/[您的包]/BuildConfig.java
上看到您的 BuildConfig
我想出了解决办法..谢谢 Pi Vincii
为每个变体循环所有风格并使用变体引用来设置 buildConfig 的解决方案
代码在 android in gradle:
applicationVariants.all { variant ->
android.productFlavors.all {
flavor ->
println(flavor.name)
variant.buildConfigField 'String', 'var_' + flavor.name, '\"' + flavor.name + '\"'
}
}
productFlavors.all {
flavor ->
defaultConfig.buildConfigField 'String', 'var_'+flavor.name, '\"'+flavor.name+'\"'
}
基于公认的解决方案,我有一个稍微修改过的版本,它创建了大写的常量名称,例如
public static final String FLAVOR_BETA = "beta";
public static final String FLAVOR_DEV = "dev";
public static final String FLAVOR_PRODUCTION = "production";
applicationVariants.all { variant ->
android.productFlavors.all {
flavor ->
println(flavor.name)
variant.buildConfigField 'String', 'FLAVOR_' + flavor.name.toUpperCase(), '\"' + flavor.name + '\"'
}
}
这是一个简单的 gradle,具有三种口味:
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";
}
奇怪的是我可以在日志中看到所有类型: 金 德 es
但是我在 buildConfig 中没有 'de' 和 'es' 的字段,正如我所料.. 有什么提示吗,伙计们?
您看到此文件是因为在您的 IDE(我猜 android 工作室)中您选择的构建变体是 AuDebug
。如果你想看到另一个变体。您可以 select Build -> Select Build Variant...
然后选择要构建的变体。然后rebuild,可以看到BuildConfig文件的变化。
每个 BuildConfig 都是基于每个变体(风格和构建类型)生成的。您可以在 [您的应用程序目录]/[您的应用程序]/build/generated/source/[您的风格]/[您的构建类型]/[您的包]/BuildConfig.java
上看到您的 BuildConfig我想出了解决办法..谢谢 Pi Vincii
为每个变体循环所有风格并使用变体引用来设置 buildConfig 的解决方案
代码在 android in gradle:
applicationVariants.all { variant ->
android.productFlavors.all {
flavor ->
println(flavor.name)
variant.buildConfigField 'String', 'var_' + flavor.name, '\"' + flavor.name + '\"'
}
}
productFlavors.all {
flavor ->
defaultConfig.buildConfigField 'String', 'var_'+flavor.name, '\"'+flavor.name+'\"'
}
基于公认的解决方案,我有一个稍微修改过的版本,它创建了大写的常量名称,例如
public static final String FLAVOR_BETA = "beta";
public static final String FLAVOR_DEV = "dev";
public static final String FLAVOR_PRODUCTION = "production";
applicationVariants.all { variant ->
android.productFlavors.all {
flavor ->
println(flavor.name)
variant.buildConfigField 'String', 'FLAVOR_' + flavor.name.toUpperCase(), '\"' + flavor.name + '\"'
}
}