diff options
Diffstat (limited to 'gradle/src')
6 files changed, 94 insertions, 26 deletions
diff --git a/gradle/src/main/groovy/com/android/build/gradle/BasePlugin.groovy b/gradle/src/main/groovy/com/android/build/gradle/BasePlugin.groovy index d442514..ab56022 100644 --- a/gradle/src/main/groovy/com/android/build/gradle/BasePlugin.groovy +++ b/gradle/src/main/groovy/com/android/build/gradle/BasePlugin.groovy @@ -374,7 +374,7 @@ public abstract class BasePlugin { getManifestDependencies(config.directLibraries) } processManifestTask.conventionMapping.versionCode = { - mergedFlavor.versionCode + config.versionCode } processManifestTask.conventionMapping.minSdkVersion = { mergedFlavor.minSdkVersion @@ -549,16 +549,40 @@ public abstract class BasePlugin { generateBuildConfigTask.plugin = this generateBuildConfigTask.variant = variantData - generateBuildConfigTask.conventionMapping.packageName = { + generateBuildConfigTask.conventionMapping.buildConfigPackageName = { variantConfiguration.originalPackageName } + generateBuildConfigTask.conventionMapping.appPackageName = { + variantConfiguration.packageName + } + + generateBuildConfigTask.conventionMapping.versionName = { + variantConfiguration.versionName + } + + generateBuildConfigTask.conventionMapping.versionCode = { + variantConfiguration.versionCode + } + generateBuildConfigTask.conventionMapping.debuggable = { variantConfiguration.buildType.isDebuggable() } - generateBuildConfigTask.conventionMapping.javaLines = { - variantConfiguration.buildConfigLines + generateBuildConfigTask.conventionMapping.buildTypeName = { + variantConfiguration.buildType.name + } + + generateBuildConfigTask.conventionMapping.flavorName = { + variantConfiguration.flavorName + } + + generateBuildConfigTask.conventionMapping.flavorNames = { + variantConfiguration.flavorNames + } + + generateBuildConfigTask.conventionMapping.items = { + variantConfiguration.buildConfigItems } generateBuildConfigTask.conventionMapping.sourceOutputDir = { diff --git a/gradle/src/main/groovy/com/android/build/gradle/internal/dsl/BuildTypeDsl.groovy b/gradle/src/main/groovy/com/android/build/gradle/internal/dsl/BuildTypeDsl.groovy index 6ca387c..a4770b6 100644 --- a/gradle/src/main/groovy/com/android/build/gradle/internal/dsl/BuildTypeDsl.groovy +++ b/gradle/src/main/groovy/com/android/build/gradle/internal/dsl/BuildTypeDsl.groovy @@ -18,6 +18,7 @@ package com.android.build.gradle.internal.dsl import com.android.annotations.NonNull import com.android.annotations.Nullable import com.android.annotations.VisibleForTesting +import com.android.builder.AndroidBuilder import com.android.builder.BuilderConstants import com.android.builder.DefaultBuildType import com.android.builder.NdkConfig @@ -25,7 +26,6 @@ import com.android.builder.model.SigningConfig import org.gradle.api.Action import org.gradle.api.internal.file.FileResolver import org.gradle.internal.reflect.Instantiator - /** * DSL overlay to make methods that accept String... work. */ @@ -82,12 +82,11 @@ public class BuildTypeDsl extends DefaultBuildType implements Serializable { // -- DSL Methods. TODO remove once the instantiator does what I expect it to do. - public void buildConfig(String... lines) { - setBuildConfig(lines) - } - - public void buildConfig(String line) { - setBuildConfig(line) + public void buildConfigField( + @NonNull String type, + @NonNull String name, + @NonNull String value) { + addBuildConfigField(AndroidBuilder.createClassField(type, name, value)); } @NonNull diff --git a/gradle/src/main/groovy/com/android/build/gradle/internal/dsl/ProductFlavorDsl.groovy b/gradle/src/main/groovy/com/android/build/gradle/internal/dsl/ProductFlavorDsl.groovy index 6b78c86..1645a03 100644 --- a/gradle/src/main/groovy/com/android/build/gradle/internal/dsl/ProductFlavorDsl.groovy +++ b/gradle/src/main/groovy/com/android/build/gradle/internal/dsl/ProductFlavorDsl.groovy @@ -17,6 +17,7 @@ package com.android.build.gradle.internal.dsl import com.android.annotations.NonNull import com.android.annotations.Nullable +import com.android.builder.AndroidBuilder import com.android.builder.DefaultProductFlavor import com.android.builder.NdkConfig import org.gradle.api.Action @@ -50,12 +51,11 @@ class ProductFlavorDsl extends DefaultProductFlavor { // -- DSL Methods. TODO remove once the instantiator does what I expect it to do. - public void buildConfig(String... lines) { - setBuildConfig(lines) - } - - public void buildConfig(String line) { - setBuildConfig(line) + public void buildConfigField( + @NonNull String type, + @NonNull String name, + @NonNull String value) { + addBuildConfigField(AndroidBuilder.createClassField(type, name, value)); } @NonNull diff --git a/gradle/src/main/groovy/com/android/build/gradle/internal/model/BuildTypeImpl.java b/gradle/src/main/groovy/com/android/build/gradle/internal/model/BuildTypeImpl.java index 03daa6f..ccb1e8b 100644 --- a/gradle/src/main/groovy/com/android/build/gradle/internal/model/BuildTypeImpl.java +++ b/gradle/src/main/groovy/com/android/build/gradle/internal/model/BuildTypeImpl.java @@ -20,6 +20,7 @@ import com.android.annotations.NonNull; import com.android.annotations.Nullable; import com.android.builder.NdkConfig; import com.android.builder.model.BuildType; +import com.android.builder.model.ClassField; import java.io.File; import java.io.Serializable; @@ -112,7 +113,7 @@ class BuildTypeImpl implements BuildType, Serializable { @NonNull @Override - public List<String> getBuildConfig() { + public List<ClassField> getBuildConfigFields() { return Collections.emptyList(); } diff --git a/gradle/src/main/groovy/com/android/build/gradle/internal/model/ProductFlavorImpl.java b/gradle/src/main/groovy/com/android/build/gradle/internal/model/ProductFlavorImpl.java index d03ae14..8380ae3 100644 --- a/gradle/src/main/groovy/com/android/build/gradle/internal/model/ProductFlavorImpl.java +++ b/gradle/src/main/groovy/com/android/build/gradle/internal/model/ProductFlavorImpl.java @@ -19,6 +19,7 @@ package com.android.build.gradle.internal.model; import com.android.annotations.NonNull; import com.android.annotations.Nullable; import com.android.builder.NdkConfig; +import com.android.builder.model.ClassField; import com.android.builder.model.ProductFlavor; import java.io.File; @@ -142,7 +143,7 @@ class ProductFlavorImpl implements ProductFlavor, Serializable { @NonNull @Override - public List<String> getBuildConfig() { + public List<ClassField> getBuildConfigFields() { return Collections.emptyList(); } diff --git a/gradle/src/main/groovy/com/android/build/gradle/tasks/GenerateBuildConfig.groovy b/gradle/src/main/groovy/com/android/build/gradle/tasks/GenerateBuildConfig.groovy index 35bc489..cba93f0 100644 --- a/gradle/src/main/groovy/com/android/build/gradle/tasks/GenerateBuildConfig.groovy +++ b/gradle/src/main/groovy/com/android/build/gradle/tasks/GenerateBuildConfig.groovy @@ -16,7 +16,9 @@ package com.android.build.gradle.tasks import com.android.build.gradle.internal.tasks.IncrementalTask +import com.android.builder.compiling.BuildConfigGenerator import org.gradle.api.tasks.Input +import org.gradle.api.tasks.Optional import org.gradle.api.tasks.OutputDirectory public class GenerateBuildConfig extends IncrementalTask { @@ -29,13 +31,31 @@ public class GenerateBuildConfig extends IncrementalTask { // ----- PRIVATE TASK API ----- @Input - String packageName + String buildConfigPackageName + + @Input + String appPackageName @Input boolean debuggable @Input - List<String> javaLines; + String flavorName + + @Input + List<String> flavorNames + + @Input + String buildTypeName + + @Input @Optional + String versionName + + @Input + int versionCode + + @Input + List<Object> items; @Override protected void doFullTaskAction() { @@ -44,10 +64,33 @@ public class GenerateBuildConfig extends IncrementalTask { File destinationDir = getSourceOutputDir() emptyFolder(destinationDir) - getBuilder().generateBuildConfig( - getPackageName(), - isDebuggable(), - getJavaLines(), - getSourceOutputDir().absolutePath); + BuildConfigGenerator generator = new BuildConfigGenerator( + getSourceOutputDir().absolutePath, + getBuildConfigPackageName()); + + // Hack (see IDEA-100046): We want to avoid reporting "condition is always true" + // from the data flow inspection, so use a non-constant value. However, that defeats + // the purpose of this flag (when not in debug mode, if (BuildConfig.DEBUG && ...) will + // be completely removed by the compiler), so as a hack we do it only for the case + // where debug is true, which is the most likely scenario while the user is looking + // at source code. + //map.put(PH_DEBUG, Boolean.toString(mDebug)); + generator.addField("boolean", "DEBUG", getDebuggable() ? "Boolean.parseBoolean(\"true\")" : "false") + .addField("String", "PACKAGE_NAME", "\"${getAppPackageName()}\"") + .addField("String", "BUILD_TYPE", "\"${getBuildTypeName()}\"") + .addField("String", "FLAVOR", "\"${getFlavorName()}\"") + .addField("int", "VERSION_CODE", Integer.toString(getVersionCode())) + .addItems(getItems()); + + if (getVersionName() != null) { + generator.addField("String", "VERSION_NAME", "\"${getVersionName()}\"") + } + + int i = 1; + for (String name : getFlavorNames()) { + generator.addField("String", "FLAVOR${i++}", "\"$name\"") + } + + generator.generate(); } } |