aboutsummaryrefslogtreecommitdiff
path: root/gradle/src
diff options
context:
space:
mode:
authorXavier Ducrohet <xav@android.com>2013-06-21 19:27:56 -0700
committerXavier Ducrohet <xav@android.com>2013-06-29 14:38:13 -0700
commit60a5b2383dc6c67f85edfdf0d0fd33db6ec9e715 (patch)
treeaec6a9184f3ae9e59756883a30f8c0c57306c906 /gradle/src
parent6dd1c8675adeaaa58cd0e9a8bc1fb779bd8fd331 (diff)
downloadbuild-60a5b2383dc6c67f85edfdf0d0fd33db6ec9e715.tar.gz
Improve model.
Since we are already changing the model in non compatible way, now is a good time to fix some issues. Refactoring all the properties of an artifact out of variant and into its own ArtifactInfo class, so that we can have both the main and test artifact in the variant in an elegant way. Also adding SigningConfig info to enable the creation of export wizard from the IDE. Change-Id: Ib6c48873ba0e5c5a61bc1e79b00a90e2be83652f
Diffstat (limited to 'gradle/src')
-rw-r--r--gradle/src/build-test/groovy/com/android/build/gradle/AutomatedBuildTest.java9
-rw-r--r--gradle/src/main/groovy/com/android/build/gradle/AppExtension.groovy4
-rw-r--r--gradle/src/main/groovy/com/android/build/gradle/AppPlugin.groovy4
-rw-r--r--gradle/src/main/groovy/com/android/build/gradle/BasePlugin.groovy4
-rw-r--r--gradle/src/main/groovy/com/android/build/gradle/LibraryExtension.groovy3
-rw-r--r--gradle/src/main/groovy/com/android/build/gradle/api/ApkVariant.java4
-rw-r--r--gradle/src/main/groovy/com/android/build/gradle/internal/api/ApplicationVariantImpl.java2
-rw-r--r--gradle/src/main/groovy/com/android/build/gradle/internal/api/TestVariantImpl.java2
-rw-r--r--gradle/src/main/groovy/com/android/build/gradle/internal/dsl/AaptOptionsImpl.groovy3
-rw-r--r--gradle/src/main/groovy/com/android/build/gradle/internal/dsl/BuildTypeDsl.groovy4
-rw-r--r--gradle/src/main/groovy/com/android/build/gradle/internal/dsl/SigningConfigDsl.java26
-rw-r--r--gradle/src/main/groovy/com/android/build/gradle/internal/dsl/SigningConfigFactory.groovy2
-rw-r--r--gradle/src/main/groovy/com/android/build/gradle/internal/model/ArtifactInfoImpl.java130
-rw-r--r--gradle/src/main/groovy/com/android/build/gradle/internal/model/DefaultAndroidProject.java18
-rw-r--r--gradle/src/main/groovy/com/android/build/gradle/internal/model/ModelBuilder.groovy95
-rw-r--r--gradle/src/main/groovy/com/android/build/gradle/internal/model/SigningConfigImpl.java104
-rw-r--r--gradle/src/main/groovy/com/android/build/gradle/internal/model/VariantImpl.java121
-rw-r--r--gradle/src/main/groovy/com/android/build/gradle/internal/tasks/SigningReportTask.groovy2
-rw-r--r--gradle/src/main/groovy/com/android/build/gradle/internal/tasks/ValidateSigningTask.groovy3
-rw-r--r--gradle/src/main/groovy/com/android/build/gradle/tasks/ProcessAppManifest.groovy4
-rw-r--r--gradle/src/test/groovy/com/android/build/gradle/AppPluginInternalTest.groovy3
-rw-r--r--gradle/src/test/groovy/com/android/build/gradle/LibraryPluginDslTest.groovy3
22 files changed, 378 insertions, 172 deletions
diff --git a/gradle/src/build-test/groovy/com/android/build/gradle/AutomatedBuildTest.java b/gradle/src/build-test/groovy/com/android/build/gradle/AutomatedBuildTest.java
index 17389f6..96fea26 100644
--- a/gradle/src/build-test/groovy/com/android/build/gradle/AutomatedBuildTest.java
+++ b/gradle/src/build-test/groovy/com/android/build/gradle/AutomatedBuildTest.java
@@ -34,10 +34,11 @@ public class AutomatedBuildTest extends BuildTest {
private static enum TestType { BUILD, REPORT }
private static final String[] sBuiltProjects = new String[] {
- "aidl", "api", "applibtest", "assets", "basic", "dependencies", "flavored",
- "flavorlib", "flavors", "libsTest", "localJars", "migrated", "multiproject", "multires",
- "overlay1", "overlay2", "pkgOverride", "renderscript", "renderscriptInLib",
- "renderscriptMultiSrc", "sameNamedLibs", "tictactoe" /*, "autorepo"*/
+ "aidl", "api", "applibtest", "assets", "attrOrder", "basic", "dependencies", "flavored",
+ "flavorlib", "flavors", "libTestDep", "libsTest", "localJars", "migrated",
+ "multiproject", "multires", "overlay1", "overlay2", "pkgOverride", "proguard",
+ "proguardLib", "renderscript", "renderscriptInLib", "renderscriptMultiSrc",
+ "sameNamedLibs", "tictactoe" /*, "autorepo"*/
};
private static final String[] sReportProjects = new String[] {
diff --git a/gradle/src/main/groovy/com/android/build/gradle/AppExtension.groovy b/gradle/src/main/groovy/com/android/build/gradle/AppExtension.groovy
index 5f60990..b7be7db 100644
--- a/gradle/src/main/groovy/com/android/build/gradle/AppExtension.groovy
+++ b/gradle/src/main/groovy/com/android/build/gradle/AppExtension.groovy
@@ -14,15 +14,17 @@
* limitations under the License.
*/
package com.android.build.gradle
+
import com.android.build.gradle.api.ApplicationVariant
import com.android.builder.DefaultBuildType
import com.android.builder.DefaultProductFlavor
-import com.android.builder.signing.SigningConfig
+import com.android.builder.model.SigningConfig
import org.gradle.api.Action
import org.gradle.api.NamedDomainObjectContainer
import org.gradle.api.internal.DefaultDomainObjectSet
import org.gradle.api.internal.project.ProjectInternal
import org.gradle.internal.reflect.Instantiator
+
/**
* Extension for 'application' project.
*/
diff --git a/gradle/src/main/groovy/com/android/build/gradle/AppPlugin.groovy b/gradle/src/main/groovy/com/android/build/gradle/AppPlugin.groovy
index f3f465f..f8ee3d3 100644
--- a/gradle/src/main/groovy/com/android/build/gradle/AppPlugin.groovy
+++ b/gradle/src/main/groovy/com/android/build/gradle/AppPlugin.groovy
@@ -15,6 +15,7 @@
*/
package com.android.build.gradle
+
import com.android.annotations.NonNull
import com.android.annotations.Nullable
import com.android.build.gradle.api.BaseVariant
@@ -37,7 +38,7 @@ import com.android.build.gradle.internal.variant.BaseVariantData
import com.android.build.gradle.internal.variant.TestVariantData
import com.android.builder.DefaultBuildType
import com.android.builder.VariantConfiguration
-import com.android.builder.signing.SigningConfig
+import com.android.builder.model.SigningConfig
import com.google.common.collect.ArrayListMultimap
import com.google.common.collect.ListMultimap
import com.google.common.collect.Maps
@@ -56,6 +57,7 @@ import static com.android.builder.BuilderConstants.INSTRUMENT_TEST
import static com.android.builder.BuilderConstants.LINT
import static com.android.builder.BuilderConstants.RELEASE
import static com.android.builder.BuilderConstants.UI_TEST
+
/**
* Gradle plugin class for 'application' projects.
*/
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 720b955..584e510 100644
--- a/gradle/src/main/groovy/com/android/build/gradle/BasePlugin.groovy
+++ b/gradle/src/main/groovy/com/android/build/gradle/BasePlugin.groovy
@@ -68,8 +68,8 @@ import com.android.builder.VariantConfiguration
import com.android.builder.dependency.JarDependency
import com.android.builder.dependency.LibraryDependency
import com.android.builder.model.ProductFlavor
+import com.android.builder.model.SigningConfig
import com.android.builder.model.SourceProvider
-import com.android.builder.signing.SigningConfig
import com.android.builder.testing.ConnectedDeviceProvider
import com.android.builder.testing.api.DeviceProvider
import com.android.builder.testing.api.TestServer
@@ -329,7 +329,7 @@ public abstract class BasePlugin {
processManifestTask.conventionMapping.manifestOverlays = {
config.manifestOverlays
}
- processManifestTask.conventionMapping.packageName = {
+ processManifestTask.conventionMapping.packageNameOverride = {
config.packageOverride
}
processManifestTask.conventionMapping.versionName = {
diff --git a/gradle/src/main/groovy/com/android/build/gradle/LibraryExtension.groovy b/gradle/src/main/groovy/com/android/build/gradle/LibraryExtension.groovy
index 3b847fe..ce7f73e 100644
--- a/gradle/src/main/groovy/com/android/build/gradle/LibraryExtension.groovy
+++ b/gradle/src/main/groovy/com/android/build/gradle/LibraryExtension.groovy
@@ -20,11 +20,12 @@ import com.android.build.gradle.internal.dsl.BuildTypeDsl
import com.android.build.gradle.internal.dsl.SigningConfigDsl
import com.android.builder.BuilderConstants
import com.android.builder.DefaultBuildType
-import com.android.builder.signing.SigningConfig
+import com.android.builder.model.SigningConfig
import org.gradle.api.Action
import org.gradle.api.internal.DefaultDomainObjectSet
import org.gradle.api.internal.project.ProjectInternal
import org.gradle.internal.reflect.Instantiator
+
/**
* Extension for 'library' project.
*/
diff --git a/gradle/src/main/groovy/com/android/build/gradle/api/ApkVariant.java b/gradle/src/main/groovy/com/android/build/gradle/api/ApkVariant.java
index 0104656..d28b6dd 100644
--- a/gradle/src/main/groovy/com/android/build/gradle/api/ApkVariant.java
+++ b/gradle/src/main/groovy/com/android/build/gradle/api/ApkVariant.java
@@ -23,7 +23,7 @@ import com.android.build.gradle.tasks.PackageApplication;
import com.android.build.gradle.tasks.ZipAlign;
import com.android.builder.DefaultBuildType;
import com.android.builder.DefaultProductFlavor;
-import com.android.builder.signing.SigningConfig;
+import com.android.builder.model.SigningConfig;
import org.gradle.api.DefaultTask;
import java.util.List;
@@ -55,7 +55,7 @@ public interface ApkVariant extends BaseVariant {
DefaultProductFlavor getMergedFlavor();
/**
- * Returns the {@link com.android.builder.signing.SigningConfig} for this build variant,
+ * Returns the {@link SigningConfig} for this build variant,
* if one has been specified.
*/
@Nullable
diff --git a/gradle/src/main/groovy/com/android/build/gradle/internal/api/ApplicationVariantImpl.java b/gradle/src/main/groovy/com/android/build/gradle/internal/api/ApplicationVariantImpl.java
index 1f644ec..efbbad3 100644
--- a/gradle/src/main/groovy/com/android/build/gradle/internal/api/ApplicationVariantImpl.java
+++ b/gradle/src/main/groovy/com/android/build/gradle/internal/api/ApplicationVariantImpl.java
@@ -33,7 +33,7 @@ import com.android.build.gradle.tasks.RenderscriptCompile;
import com.android.build.gradle.tasks.ZipAlign;
import com.android.builder.DefaultBuildType;
import com.android.builder.DefaultProductFlavor;
-import com.android.builder.signing.SigningConfig;
+import com.android.builder.model.SigningConfig;
import org.gradle.api.DefaultTask;
import org.gradle.api.Task;
import org.gradle.api.tasks.Copy;
diff --git a/gradle/src/main/groovy/com/android/build/gradle/internal/api/TestVariantImpl.java b/gradle/src/main/groovy/com/android/build/gradle/internal/api/TestVariantImpl.java
index 8dfc8f1..305c2e5 100644
--- a/gradle/src/main/groovy/com/android/build/gradle/internal/api/TestVariantImpl.java
+++ b/gradle/src/main/groovy/com/android/build/gradle/internal/api/TestVariantImpl.java
@@ -32,7 +32,7 @@ import com.android.build.gradle.tasks.RenderscriptCompile;
import com.android.build.gradle.tasks.ZipAlign;
import com.android.builder.DefaultBuildType;
import com.android.builder.DefaultProductFlavor;
-import com.android.builder.signing.SigningConfig;
+import com.android.builder.model.SigningConfig;
import org.gradle.api.DefaultTask;
import org.gradle.api.Task;
import org.gradle.api.tasks.Copy;
diff --git a/gradle/src/main/groovy/com/android/build/gradle/internal/dsl/AaptOptionsImpl.groovy b/gradle/src/main/groovy/com/android/build/gradle/internal/dsl/AaptOptionsImpl.groovy
index 319cd96..449a43f 100644
--- a/gradle/src/main/groovy/com/android/build/gradle/internal/dsl/AaptOptionsImpl.groovy
+++ b/gradle/src/main/groovy/com/android/build/gradle/internal/dsl/AaptOptionsImpl.groovy
@@ -16,8 +16,7 @@
package com.android.build.gradle.internal.dsl;
-
-import com.android.builder.AaptOptions
+import com.android.builder.model.AaptOptions
import org.gradle.api.tasks.Input
public class AaptOptionsImpl implements AaptOptions {
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 b2c164e..8b9eed0 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
@@ -17,9 +17,9 @@
package com.android.build.gradle.internal.dsl
import com.android.annotations.NonNull
-import com.android.builder.DefaultBuildType
import com.android.builder.BuilderConstants
-import com.android.builder.signing.SigningConfig
+import com.android.builder.DefaultBuildType
+import com.android.builder.model.SigningConfig
import com.google.common.collect.Lists
/**
diff --git a/gradle/src/main/groovy/com/android/build/gradle/internal/dsl/SigningConfigDsl.java b/gradle/src/main/groovy/com/android/build/gradle/internal/dsl/SigningConfigDsl.java
index 1455032..2960e18 100644
--- a/gradle/src/main/groovy/com/android/build/gradle/internal/dsl/SigningConfigDsl.java
+++ b/gradle/src/main/groovy/com/android/build/gradle/internal/dsl/SigningConfigDsl.java
@@ -18,9 +18,11 @@ package com.android.build.gradle.internal.dsl;
import com.android.annotations.NonNull;
import com.android.builder.BuilderConstants;
-import com.android.builder.signing.SigningConfig;
+import com.android.builder.model.SigningConfig;
+import com.android.builder.signing.DefaultSigningConfig;
import com.android.prefs.AndroidLocation;
import com.google.common.base.Objects;
+import org.gradle.api.Named;
import org.gradle.api.tasks.Input;
import org.gradle.api.tasks.InputFile;
import org.gradle.api.tasks.Optional;
@@ -30,14 +32,11 @@ import java.io.File;
import java.io.Serializable;
/**
- * DSL overlay for {@link SigningConfig}.
+ * DSL overlay for {@link DefaultSigningConfig}.
*/
-public class SigningConfigDsl extends SigningConfig implements Serializable {
+public class SigningConfigDsl extends DefaultSigningConfig implements Serializable, Named {
private static final long serialVersionUID = 1L;
- @NonNull
- private final String name;
-
/**
* Creates a SigningConfig with a given name.
*
@@ -45,8 +44,8 @@ public class SigningConfigDsl extends SigningConfig implements Serializable {
*
*/
public SigningConfigDsl(@NonNull String name) {
- super();
- this.name = name;
+ super(name);
+
if (BuilderConstants.DEBUG.equals(name)) {
try {
initDebug();
@@ -56,11 +55,6 @@ public class SigningConfigDsl extends SigningConfig implements Serializable {
}
}
- @NonNull
- public String getName() {
- return name;
- }
-
public SigningConfigDsl initWith(SigningConfig that) {
setStoreFile(that.getStoreFile());
setStorePassword(that.getStorePassword());
@@ -122,7 +116,7 @@ public class SigningConfigDsl extends SigningConfig implements Serializable {
SigningConfigDsl that = (SigningConfigDsl) o;
- if (!name.equals(that.name)) return false;
+ if (!mName.equals(that.mName)) return false;
return true;
}
@@ -130,14 +124,14 @@ public class SigningConfigDsl extends SigningConfig implements Serializable {
@Override
public int hashCode() {
int result = super.hashCode();
- result = 31 * result + name.hashCode();
+ result = 31 * result + mName.hashCode();
return result;
}
@Override
public String toString() {
return Objects.toStringHelper(this)
- .add("name", name)
+ .add("name", mName)
.add("storeFile", getStoreFile() != null ? getStoreFile().getAbsolutePath() : "null")
.add("storePassword", getStorePassword())
.add("keyAlias", getKeyAlias())
diff --git a/gradle/src/main/groovy/com/android/build/gradle/internal/dsl/SigningConfigFactory.groovy b/gradle/src/main/groovy/com/android/build/gradle/internal/dsl/SigningConfigFactory.groovy
index 57af98e..cdb3ebf 100644
--- a/gradle/src/main/groovy/com/android/build/gradle/internal/dsl/SigningConfigFactory.groovy
+++ b/gradle/src/main/groovy/com/android/build/gradle/internal/dsl/SigningConfigFactory.groovy
@@ -16,7 +16,7 @@
package com.android.build.gradle.internal.dsl
-import com.android.builder.signing.SigningConfig
+import com.android.builder.model.SigningConfig
import org.gradle.api.NamedDomainObjectFactory
import org.gradle.internal.reflect.Instantiator
diff --git a/gradle/src/main/groovy/com/android/build/gradle/internal/model/ArtifactInfoImpl.java b/gradle/src/main/groovy/com/android/build/gradle/internal/model/ArtifactInfoImpl.java
new file mode 100644
index 0000000..9978fd0
--- /dev/null
+++ b/gradle/src/main/groovy/com/android/build/gradle/internal/model/ArtifactInfoImpl.java
@@ -0,0 +1,130 @@
+/*
+ * Copyright (C) 2013 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.build.gradle.internal.model;
+
+import com.android.annotations.NonNull;
+import com.android.annotations.Nullable;
+import com.android.build.gradle.model.ArtifactInfo;
+import com.android.build.gradle.model.Dependencies;
+
+import java.io.File;
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * Implementation of ArtifactInfo that is serializable
+ */
+public class ArtifactInfoImpl implements ArtifactInfo, Serializable {
+
+ @NonNull
+ private final File outputFile;
+ private final boolean isSigned;
+ @Nullable
+ private final String signingConfigName;
+ @NonNull
+ private final String assembleTaskName;
+ @NonNull
+ private final String packageName;
+ @NonNull
+ private final List<File> generatedSourceFolders;
+ @NonNull
+ private final List<File> generatedResourceFolders;
+ @NonNull
+ private final File classesFolder;
+ @NonNull
+ private final Dependencies dependencies;
+
+
+ ArtifactInfoImpl(@NonNull String assembleTaskName,
+ @NonNull File outputFile,
+ boolean isSigned,
+ @Nullable String signingConfigName,
+ @NonNull String packageName,
+ @NonNull List<File> generatedSourceFolders,
+ @NonNull List<File> generatedResourceFolders,
+ @NonNull File classesFolder,
+ @NonNull Dependencies dependencies) {
+ this.assembleTaskName = assembleTaskName;
+ this.outputFile = outputFile;
+ this.isSigned = isSigned;
+ this.signingConfigName = signingConfigName;
+ this.packageName = packageName;
+ this.generatedSourceFolders = generatedSourceFolders;
+ this.generatedResourceFolders = generatedResourceFolders;
+ this.classesFolder = classesFolder;
+ this.dependencies = dependencies;
+ }
+
+ @NonNull
+ @Override
+ public File getOutputFile() {
+ return outputFile;
+ }
+
+ @Override
+ public boolean isSigned() {
+ return isSigned;
+ }
+
+ @Nullable
+ @Override
+ public String getSigningConfigName() {
+ return signingConfigName;
+ }
+
+ @NonNull
+ @Override
+ public String getPackageName() {
+ return packageName;
+ }
+
+ @NonNull
+ @Override
+ public String getSourceGenTaskName() {
+ return "TODO";
+ }
+
+ @NonNull
+ @Override
+ public String getAssembleTaskName() {
+ return assembleTaskName;
+ }
+
+ @NonNull
+ @Override
+ public List<File> getGeneratedSourceFolders() {
+ return generatedSourceFolders;
+ }
+
+ @NonNull
+ @Override
+ public List<File> getGeneratedResourceFolders() {
+ return generatedResourceFolders;
+ }
+
+ @NonNull
+ @Override
+ public File getClassesFolder() {
+ return classesFolder;
+ }
+
+ @NonNull
+ @Override
+ public Dependencies getDependencies() {
+ return dependencies;
+ }
+}
diff --git a/gradle/src/main/groovy/com/android/build/gradle/internal/model/DefaultAndroidProject.java b/gradle/src/main/groovy/com/android/build/gradle/internal/model/DefaultAndroidProject.java
index fe5caec..84d0fd6 100644
--- a/gradle/src/main/groovy/com/android/build/gradle/internal/model/DefaultAndroidProject.java
+++ b/gradle/src/main/groovy/com/android/build/gradle/internal/model/DefaultAndroidProject.java
@@ -21,6 +21,8 @@ import com.android.build.gradle.model.AndroidProject;
import com.android.build.gradle.model.BuildTypeContainer;
import com.android.build.gradle.model.ProductFlavorContainer;
import com.android.build.gradle.model.Variant;
+import com.android.builder.model.AaptOptions;
+import com.android.builder.model.SigningConfig;
import com.google.common.collect.Maps;
import java.io.Serializable;
@@ -41,6 +43,8 @@ class DefaultAndroidProject implements AndroidProject, Serializable {
private final String compileTarget;
@NonNull
private final List<String> bootClasspath;
+ @NonNull
+ private final List<SigningConfig> signingConfigs;
private final boolean isLibrary;
private final Map<String, BuildTypeContainer> buildTypes = Maps.newHashMap();
@@ -52,11 +56,13 @@ class DefaultAndroidProject implements AndroidProject, Serializable {
DefaultAndroidProject(@NonNull String modelVersion,
@NonNull String name, @NonNull String compileTarget,
@NonNull List<String> bootClasspath,
+ @NonNull List<SigningConfig> signingConfigs,
boolean isLibrary) {
this.modelVersion = modelVersion;
this.name = name;
this.compileTarget = compileTarget;
this.bootClasspath = bootClasspath;
+ this.signingConfigs = signingConfigs;
this.isLibrary = isLibrary;
}
@@ -138,4 +144,16 @@ class DefaultAndroidProject implements AndroidProject, Serializable {
public List<String> getBootClasspath() {
return bootClasspath;
}
+
+ @NonNull
+ @Override
+ public List<SigningConfig> getSigningConfigs() {
+ return signingConfigs;
+ }
+
+ @NonNull
+ @Override
+ public AaptOptions getAaptOptions() {
+ return null;
+ }
}
diff --git a/gradle/src/main/groovy/com/android/build/gradle/internal/model/ModelBuilder.groovy b/gradle/src/main/groovy/com/android/build/gradle/internal/model/ModelBuilder.groovy
index 95b6425..d63665f 100644
--- a/gradle/src/main/groovy/com/android/build/gradle/internal/model/ModelBuilder.groovy
+++ b/gradle/src/main/groovy/com/android/build/gradle/internal/model/ModelBuilder.groovy
@@ -27,10 +27,13 @@ import com.android.build.gradle.internal.variant.BaseVariantData
import com.android.build.gradle.internal.variant.LibraryVariantData
import com.android.build.gradle.internal.variant.TestVariantData
import com.android.build.gradle.model.AndroidProject
+import com.android.build.gradle.model.ArtifactInfo
import com.android.build.gradle.model.BuildTypeContainer
import com.android.build.gradle.model.ProductFlavorContainer
import com.android.builder.DefaultProductFlavor
import com.android.builder.SdkParser
+import com.android.builder.VariantConfiguration
+import com.android.builder.model.SigningConfig
import com.android.builder.model.SourceProvider
import com.google.common.collect.Lists
import org.gradle.api.Project
@@ -39,7 +42,6 @@ import org.gradle.tooling.provider.model.ToolingModelBuilder
import java.util.jar.Attributes
import java.util.jar.Manifest
-
/**
* Builder for the custom Android model.
*/
@@ -56,8 +58,12 @@ public class ModelBuilder implements ToolingModelBuilder {
LibraryPlugin libPlugin = null
BasePlugin basePlugin = appPlugin
+ Collection<SigningConfig> signingConfigs
+
if (appPlugin == null) {
basePlugin = libPlugin = getPlugin(project, LibraryPlugin.class)
+ } else {
+ signingConfigs = appPlugin.extension.signingConfigs
}
if (basePlugin == null) {
@@ -65,13 +71,22 @@ public class ModelBuilder implements ToolingModelBuilder {
return null
}
+ if (libPlugin != null) {
+ signingConfigs = Collections.singletonList(libPlugin.extension.debugSigningConfig)
+ }
SdkParser sdkParser = basePlugin.getLoadedSdkParser()
- List<String> bootClasspath = basePlugin.runtimeJarList;
+ List<String> bootClasspath = basePlugin.runtimeJarList
String compileTarget = sdkParser.target.hashString()
- DefaultAndroidProject androidProject = new DefaultAndroidProject(getModelVersion(),
- project.name, compileTarget, bootClasspath, libPlugin != null)
+ //noinspection GroovyVariableNotAssigned
+ DefaultAndroidProject androidProject = new DefaultAndroidProject(
+ getModelVersion(),
+ project.name,
+ compileTarget,
+ bootClasspath,
+ cloneSigningConfigs(signingConfigs),
+ libPlugin != null)
.setDefaultConfig(createPFC(basePlugin.defaultConfigData))
if (appPlugin != null) {
@@ -79,7 +94,7 @@ public class ModelBuilder implements ToolingModelBuilder {
androidProject.addBuildType(createBTC(btData))
}
for (ProductFlavorData pfData : appPlugin.productFlavors.values()) {
- androidProject.addProductFlavors(createPFC(pfData));
+ androidProject.addProductFlavors(createPFC(pfData))
}
} else if (libPlugin != null) {
@@ -96,7 +111,6 @@ public class ModelBuilder implements ToolingModelBuilder {
return androidProject
}
-
@NonNull
private static String getModelVersion() {
Class clazz = AndroidProject.class
@@ -107,12 +121,12 @@ public class ModelBuilder implements ToolingModelBuilder {
return "unknown"
}
String manifestPath = classPath.substring(0, classPath.lastIndexOf("!") + 1) +
- "/META-INF/MANIFEST.MF";
- Manifest manifest = new Manifest(new URL(manifestPath).openStream());
- Attributes attr = manifest.getMainAttributes();
- String version = attr.getValue("Model-Version");
+ "/META-INF/MANIFEST.MF"
+ Manifest manifest = new Manifest(new URL(manifestPath).openStream())
+ Attributes attr = manifest.getMainAttributes()
+ String version = attr.getValue("Model-Version")
if (version != null) {
- return version;
+ return version
}
return "unknown"
@@ -126,27 +140,41 @@ public class ModelBuilder implements ToolingModelBuilder {
testVariantData = variantData.testVariantData
}
+ ArtifactInfo mainArtifact = createArtifactInfo(variantData)
+ ArtifactInfo testArtifact = testVariantData != null ? createArtifactInfo(testVariantData) : null
+
VariantImpl variant = new VariantImpl(
variantData.name,
variantData.baseName,
- variantData.assembleTask.name,
- testVariantData?.assembleTask?.name,
variantData.variantConfiguration.buildType.name,
getProductFlavorNames(variantData),
ProductFlavorImpl.cloneFlavor(variantData.variantConfiguration.mergedFlavor),
+ mainArtifact,
+ testArtifact)
+
+ return variant
+ }
+
+ private static ArtifactInfo createArtifactInfo(@NonNull BaseVariantData variantData) {
+ VariantConfiguration vC = variantData.variantConfiguration
+
+ SigningConfig signingConfig = vC.signingConfig
+ String signingConfigName = null
+ if (signingConfig != null) {
+ signingConfigName = signingConfig.name
+ }
+
+ return new ArtifactInfoImpl(
+ variantData.assembleTask.name,
variantData.outputFile,
- testVariantData?.outputFile,
- variantData.variantConfiguration.isSigningReady(),
+ vC.isSigningReady(),
+ signingConfigName,
+ vC.packageName,
getGeneratedSourceFolders(variantData),
- getGeneratedSourceFolders(testVariantData),
getGeneratedResourceFolders(variantData),
- getGeneratedResourceFolders(testVariantData),
variantData.javaCompileTask.destinationDir,
- DependenciesImpl.cloneDependencies(variantData.variantDependency),
- DependenciesImpl.cloneDependencies(testVariantData?.variantDependency),
+ DependenciesImpl.cloneDependencies(variantData.variantDependency)
)
-
- return variant;
}
@NonNull
@@ -157,7 +185,7 @@ public class ModelBuilder implements ToolingModelBuilder {
flavorNames.add(flavor.name)
}
- return flavorNames;
+ return flavorNames
}
@NonNull
@@ -210,6 +238,29 @@ public class ModelBuilder implements ToolingModelBuilder {
SourceProviderImpl.cloneProvider((SourceProvider) buildTypeData.sourceSet))
}
+ @NonNull
+ private static List<SigningConfig> cloneSigningConfigs(Collection<SigningConfig> signingConfigs) {
+ List<SigningConfig> results = Lists.newArrayListWithCapacity(signingConfigs.size())
+
+ for (SigningConfig signingConfig : signingConfigs) {
+ results.add(createSigningConfig(signingConfig))
+ }
+
+ return results
+ }
+
+ @NonNull
+ private static SigningConfig createSigningConfig(SigningConfig signingConfig) {
+ return new SigningConfigImpl(
+ signingConfig.getName(),
+ signingConfig.getStoreFile(),
+ signingConfig.getStorePassword(),
+ signingConfig.getKeyAlias(),
+ signingConfig.getKeyPassword(),
+ signingConfig.getStoreType(),
+ signingConfig.isSigningReady())
+ }
+
/**
* Safely queries a project for a given plugin class.
* @param project the project to query
diff --git a/gradle/src/main/groovy/com/android/build/gradle/internal/model/SigningConfigImpl.java b/gradle/src/main/groovy/com/android/build/gradle/internal/model/SigningConfigImpl.java
new file mode 100644
index 0000000..06e219c
--- /dev/null
+++ b/gradle/src/main/groovy/com/android/build/gradle/internal/model/SigningConfigImpl.java
@@ -0,0 +1,104 @@
+/*
+ * Copyright (C) 2013 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.build.gradle.internal.model;
+
+import com.android.annotations.NonNull;
+import com.android.annotations.Nullable;
+import com.android.builder.model.SigningConfig;
+
+import java.io.File;
+import java.io.Serializable;
+
+/**
+ * Implementation of SigningConfig that is serializable. Objects used in the DSL cannot be
+ * serialized.
+ */
+class SigningConfigImpl implements SigningConfig, Serializable {
+ private static final long serialVersionUID = 1L;
+
+ @NonNull
+ private final String name;
+ @Nullable
+ private final File storeFile;
+ @Nullable
+ private final String storePassword;
+ @Nullable
+ private final String keyAlias;
+ @Nullable
+ private final String keyPassword;
+ @Nullable
+ private final String storeType;
+ private final boolean signingReady;
+
+ SigningConfigImpl(@NonNull String name,
+ @Nullable File storeFile,
+ @Nullable String storePassword,
+ @Nullable String keyAlias,
+ @Nullable String keyPassword,
+ @Nullable String storeType,
+ boolean signingReady) {
+
+ this.name = name;
+ this.storeFile = storeFile;
+ this.storePassword = storePassword;
+ this.keyAlias = keyAlias;
+ this.keyPassword = keyPassword;
+ this.storeType = storeType;
+ this.signingReady = signingReady;
+ }
+
+ @NonNull
+ @Override
+ public String getName() {
+ return name;
+ }
+
+ @Nullable
+ @Override
+ public File getStoreFile() {
+ return storeFile;
+ }
+
+ @Nullable
+ @Override
+ public String getStorePassword() {
+ return storePassword;
+ }
+
+ @Nullable
+ @Override
+ public String getKeyAlias() {
+ return keyAlias;
+ }
+
+ @Nullable
+ @Override
+ public String getKeyPassword() {
+ return keyPassword;
+ }
+
+ @Nullable
+ @Override
+ public String getStoreType() {
+ return storeType;
+ }
+
+ @Override
+ public boolean isSigningReady() {
+ return signingReady;
+ }
+}
diff --git a/gradle/src/main/groovy/com/android/build/gradle/internal/model/VariantImpl.java b/gradle/src/main/groovy/com/android/build/gradle/internal/model/VariantImpl.java
index c2e41c7..cffc10f 100644
--- a/gradle/src/main/groovy/com/android/build/gradle/internal/model/VariantImpl.java
+++ b/gradle/src/main/groovy/com/android/build/gradle/internal/model/VariantImpl.java
@@ -18,11 +18,10 @@ package com.android.build.gradle.internal.model;
import com.android.annotations.NonNull;
import com.android.annotations.Nullable;
-import com.android.build.gradle.model.Dependencies;
+import com.android.build.gradle.model.ArtifactInfo;
import com.android.build.gradle.model.Variant;
import com.android.builder.model.ProductFlavor;
-import java.io.File;
import java.io.Serializable;
import java.util.List;
@@ -37,69 +36,30 @@ class VariantImpl implements Variant, Serializable {
@NonNull
private final String displayName;
@NonNull
- private final String assembleTaskName;
- @Nullable
- private final String assembleTestTaskName;
- @NonNull
private final String buildTypeName;
@NonNull
private final List<String> productFlavorNames;
@NonNull
private final ProductFlavor mergedFlavor;
@NonNull
- private final File outputFile;
- @Nullable
- private final File testOutputFile;
- private final boolean isSigned;
- @NonNull
- private final List<File> generatedSourceFolders;
- @Nullable
- private final List<File> generatedTestSourceFolders;
- @NonNull
- private final List<File> generatedResourceFolders;
+ private final ArtifactInfo mainArtifactInfo;
@Nullable
- private final List<File> generatedTestResourceFolders;
- @NonNull
- private final File classesFolder;
- @NonNull
- private final Dependencies dependencies;
- @NonNull
- private final Dependencies testDependencies;
+ private final ArtifactInfo testArtifactInfo;
VariantImpl(@NonNull String name,
@NonNull String displayName,
- @NonNull String assembleTaskName,
- @Nullable String assembleTestTaskName,
@NonNull String buildTypeName,
@NonNull List<String> productFlavorNames,
@NonNull ProductFlavorImpl mergedFlavor,
- @NonNull File outputFile,
- @Nullable File testOutputFile,
- boolean isSigned,
- @NonNull List<File> generatedSourceFolders,
- @Nullable List<File> generatedTestSourceFolders,
- @NonNull List<File> generatedResourceFolders,
- @Nullable List<File> generatedTestResourceFolders,
- @NonNull File classesFolder,
- @NonNull Dependencies dependencies,
- @NonNull Dependencies testDependencies) {
+ @NonNull ArtifactInfo mainArtifactInfo,
+ @Nullable ArtifactInfo testArtifactInfo) {
this.name = name;
this.displayName = displayName;
- this.assembleTaskName = assembleTaskName;
- this.assembleTestTaskName = assembleTestTaskName;
this.buildTypeName = buildTypeName;
this.productFlavorNames = productFlavorNames;
this.mergedFlavor = mergedFlavor;
- this.outputFile = outputFile;
- this.testOutputFile = testOutputFile;
- this.isSigned = isSigned;
- this.generatedSourceFolders = generatedSourceFolders;
- this.generatedTestSourceFolders = generatedTestSourceFolders;
- this.generatedResourceFolders = generatedResourceFolders;
- this.generatedTestResourceFolders = generatedTestResourceFolders;
- this.classesFolder = classesFolder;
- this.dependencies = dependencies;
- this.testDependencies = testDependencies;
+ this.mainArtifactInfo = mainArtifactInfo;
+ this.testArtifactInfo = testArtifactInfo;
}
@Override
@@ -114,35 +74,6 @@ class VariantImpl implements Variant, Serializable {
return displayName;
}
- @NonNull
- @Override
- public String getAssembleTaskName() {
- return assembleTaskName;
- }
-
- @Nullable
- @Override
- public String getAssembleTestTaskName() {
- return assembleTestTaskName;
- }
-
- @Override
- @NonNull
- public File getOutputFile() {
- return outputFile;
- }
-
- @Nullable
- @Override
- public File getOutputTestFile() {
- return testOutputFile;
- }
-
- @Override
- public boolean isSigned() {
- return isSigned;
- }
-
@Override
@NonNull
public String getBuildType() {
@@ -163,43 +94,13 @@ class VariantImpl implements Variant, Serializable {
@NonNull
@Override
- public List<File> getGeneratedSourceFolders() {
- return generatedSourceFolders;
- }
-
- @Nullable
- @Override
- public List<File> getGeneratedTestSourceFolders() {
- return generatedTestSourceFolders;
- }
-
- @NonNull
- @Override
- public List<File> getGeneratedResourceFolders() {
- return generatedResourceFolders;
+ public ArtifactInfo getMainArtifactInfo() {
+ return mainArtifactInfo;
}
@Nullable
@Override
- public List<File> getGeneratedTestResourceFolders() {
- return generatedTestResourceFolders;
- }
-
- @NonNull
- @Override
- public File getClassesFolder() {
- return classesFolder;
- }
-
- @NonNull
- @Override
- public Dependencies getDependencies() {
- return dependencies;
- }
-
- @NonNull
- @Override
- public Dependencies getTestDependencies() {
- return testDependencies;
+ public ArtifactInfo getTestArtifactInfo() {
+ return testArtifactInfo;
}
}
diff --git a/gradle/src/main/groovy/com/android/build/gradle/internal/tasks/SigningReportTask.groovy b/gradle/src/main/groovy/com/android/build/gradle/internal/tasks/SigningReportTask.groovy
index d07117c..9d7c170 100644
--- a/gradle/src/main/groovy/com/android/build/gradle/internal/tasks/SigningReportTask.groovy
+++ b/gradle/src/main/groovy/com/android/build/gradle/internal/tasks/SigningReportTask.groovy
@@ -18,10 +18,10 @@ package com.android.build.gradle.internal.tasks
import com.android.build.gradle.internal.dsl.SigningConfigDsl
import com.android.build.gradle.internal.variant.BaseVariantData
+import com.android.builder.model.SigningConfig
import com.android.builder.signing.CertificateInfo
import com.android.builder.signing.KeystoreHelper
import com.android.builder.signing.KeytoolException
-import com.android.builder.signing.SigningConfig
import com.google.common.collect.Maps
import org.gradle.api.tasks.TaskAction
import org.gradle.logging.StyledTextOutput
diff --git a/gradle/src/main/groovy/com/android/build/gradle/internal/tasks/ValidateSigningTask.groovy b/gradle/src/main/groovy/com/android/build/gradle/internal/tasks/ValidateSigningTask.groovy
index cfc7e27..d506f04 100644
--- a/gradle/src/main/groovy/com/android/build/gradle/internal/tasks/ValidateSigningTask.groovy
+++ b/gradle/src/main/groovy/com/android/build/gradle/internal/tasks/ValidateSigningTask.groovy
@@ -16,12 +16,13 @@
package com.android.build.gradle.internal.tasks
+import com.android.builder.model.SigningConfig
import com.android.builder.signing.KeystoreHelper
-import com.android.builder.signing.SigningConfig
import org.gradle.api.tasks.Input
import org.gradle.api.tasks.Optional
import org.gradle.api.tasks.TaskAction
import org.gradle.tooling.BuildException
+
/**
* A validate task that creates the debug keystore if it's missing.
* It only creates it if it's in the default debug keystore location.
diff --git a/gradle/src/main/groovy/com/android/build/gradle/tasks/ProcessAppManifest.groovy b/gradle/src/main/groovy/com/android/build/gradle/tasks/ProcessAppManifest.groovy
index d0cf411..72ddcd8 100644
--- a/gradle/src/main/groovy/com/android/build/gradle/tasks/ProcessAppManifest.groovy
+++ b/gradle/src/main/groovy/com/android/build/gradle/tasks/ProcessAppManifest.groovy
@@ -37,7 +37,7 @@ public class ProcessAppManifest extends ProcessManifest {
List<ManifestDependencyImpl> libraries
@Input @Optional
- String packageName
+ String packageNameOverride
@Input
int versionCode
@@ -57,7 +57,7 @@ public class ProcessAppManifest extends ProcessManifest {
getMainManifest(),
getManifestOverlays(),
getLibraries(),
- getPackageName(),
+ getPackageNameOverride(),
getVersionCode(),
getVersionName(),
getMinSdkVersion(),
diff --git a/gradle/src/test/groovy/com/android/build/gradle/AppPluginInternalTest.groovy b/gradle/src/test/groovy/com/android/build/gradle/AppPluginInternalTest.groovy
index edbfa45..d840272 100644
--- a/gradle/src/test/groovy/com/android/build/gradle/AppPluginInternalTest.groovy
+++ b/gradle/src/test/groovy/com/android/build/gradle/AppPluginInternalTest.groovy
@@ -22,10 +22,11 @@ import com.android.build.gradle.internal.test.PluginHolder
import com.android.build.gradle.internal.variant.BaseVariantData
import com.android.builder.BuilderConstants
import com.android.builder.DefaultBuildType
+import com.android.builder.model.SigningConfig
import com.android.builder.signing.KeystoreHelper
-import com.android.builder.signing.SigningConfig
import org.gradle.api.Project
import org.gradle.testfixtures.ProjectBuilder
+
/**
* Tests for the internal workings of the app plugin ("android")
*/
diff --git a/gradle/src/test/groovy/com/android/build/gradle/LibraryPluginDslTest.groovy b/gradle/src/test/groovy/com/android/build/gradle/LibraryPluginDslTest.groovy
index 7dfb9c3..5dd9668 100644
--- a/gradle/src/test/groovy/com/android/build/gradle/LibraryPluginDslTest.groovy
+++ b/gradle/src/test/groovy/com/android/build/gradle/LibraryPluginDslTest.groovy
@@ -19,9 +19,10 @@ import com.android.annotations.NonNull
import com.android.build.gradle.api.LibraryVariant
import com.android.build.gradle.api.TestVariant
import com.android.build.gradle.internal.test.BaseTest
-import com.android.builder.signing.SigningConfig
+import com.android.builder.model.SigningConfig
import org.gradle.api.Project
import org.gradle.testfixtures.ProjectBuilder
+
/**
* Tests for the public DSL of the App plugin ("android-library")
*/