aboutsummaryrefslogtreecommitdiff
path: root/gradle/src
diff options
context:
space:
mode:
Diffstat (limited to 'gradle/src')
-rw-r--r--gradle/src/main/groovy/com/android/build/gradle/BasePlugin.groovy32
-rw-r--r--gradle/src/main/groovy/com/android/build/gradle/internal/dsl/BuildTypeDsl.groovy13
-rw-r--r--gradle/src/main/groovy/com/android/build/gradle/internal/dsl/ProductFlavorDsl.groovy12
-rw-r--r--gradle/src/main/groovy/com/android/build/gradle/internal/model/BuildTypeImpl.java3
-rw-r--r--gradle/src/main/groovy/com/android/build/gradle/internal/model/ProductFlavorImpl.java3
-rw-r--r--gradle/src/main/groovy/com/android/build/gradle/tasks/GenerateBuildConfig.groovy57
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();
}
}