Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance. Project price only 1 $
You can buy this project and download/modify it how often you want.
/*
* Copyright (C) 2015 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.model;
import static com.android.build.gradle.model.AndroidComponentModelPlugin.COMPONENT_NAME;
import static com.android.build.gradle.model.ModelConstants.ANDROID_BUILDER;
import static com.android.build.gradle.model.ModelConstants.ANDROID_CONFIG_ADAPTOR;
import static com.android.build.gradle.model.ModelConstants.EXTRA_MODEL_INFO;
import static com.android.build.gradle.model.ModelConstants.JNILIBS_DEPENDENCIES;
import static com.android.builder.core.BuilderConstants.DEBUG;
import static com.android.builder.model.AndroidProject.FD_INTERMEDIATES;
import com.android.annotations.NonNull;
import com.android.build.gradle.AndroidGradleOptions;
import com.android.build.gradle.OptionalCompilationStep;
import com.android.build.gradle.internal.AndroidConfigHelper;
import com.android.build.gradle.internal.ExecutionConfigurationUtil;
import com.android.build.gradle.internal.ExtraModelInfo;
import com.android.build.gradle.internal.JniLibsLanguageTransform;
import com.android.build.gradle.internal.LibraryCache;
import com.android.build.gradle.internal.LoggerWrapper;
import com.android.build.gradle.internal.NativeDependencyLinkage;
import com.android.build.gradle.internal.NdkHandler;
import com.android.build.gradle.internal.NdkOptionsHelper;
import com.android.build.gradle.internal.ProductFlavorCombo;
import com.android.build.gradle.internal.SdkHandler;
import com.android.build.gradle.internal.TaskManager;
import com.android.build.gradle.internal.VariantManager;
import com.android.build.gradle.internal.coverage.JacocoPlugin;
import com.android.build.gradle.internal.dependency.AndroidNativeDependencySpec;
import com.android.build.gradle.internal.dependency.NativeDependencyResolveResult;
import com.android.build.gradle.internal.dependency.NativeDependencyResolver;
import com.android.build.gradle.internal.pipeline.TransformTask;
import com.android.build.gradle.internal.process.GradleJavaProcessExecutor;
import com.android.build.gradle.internal.process.GradleProcessExecutor;
import com.android.build.gradle.internal.profile.RecordingBuildListener;
import com.android.build.gradle.internal.tasks.DependencyReportTask;
import com.android.build.gradle.internal.tasks.SigningReportTask;
import com.android.build.gradle.internal.transforms.DexTransform;
import com.android.build.gradle.internal.variant.VariantFactory;
import com.android.build.gradle.managed.AndroidConfig;
import com.android.build.gradle.managed.BuildType;
import com.android.build.gradle.managed.DataBindingOptions;
import com.android.build.gradle.managed.NdkConfig;
import com.android.build.gradle.managed.NdkOptions;
import com.android.build.gradle.managed.ProductFlavor;
import com.android.build.gradle.managed.SigningConfig;
import com.android.build.gradle.managed.VectorDrawablesOptions;
import com.android.build.gradle.managed.adaptor.AndroidConfigAdaptor;
import com.android.build.gradle.managed.adaptor.BuildTypeAdaptor;
import com.android.build.gradle.managed.adaptor.DataBindingOptionsAdapter;
import com.android.build.gradle.managed.adaptor.ProductFlavorAdaptor;
import com.android.build.gradle.model.internal.AndroidBinaryInternal;
import com.android.build.gradle.model.internal.AndroidComponentSpecInternal;
import com.android.build.gradle.tasks.JillTask;
import com.android.builder.Version;
import com.android.builder.core.AndroidBuilder;
import com.android.builder.internal.compiler.JackConversionCache;
import com.android.builder.internal.compiler.PreDexCache;
import com.android.builder.profile.ProcessRecorderFactory;
import com.android.builder.profile.Recorder;
import com.android.builder.profile.ThreadRecorder;
import com.android.builder.sdk.TargetInfo;
import com.android.builder.signing.DefaultSigningConfig;
import com.android.ide.common.internal.ExecutorSingleton;
import com.android.ide.common.signing.KeystoreHelper;
import com.android.prefs.AndroidLocation;
import com.android.resources.Density;
import com.android.utils.ILogger;
import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Lists;
import com.google.common.collect.Multimap;
import com.google.common.collect.Sets;
import org.gradle.api.Action;
import org.gradle.api.Plugin;
import org.gradle.api.Project;
import org.gradle.api.Task;
import org.gradle.api.artifacts.Configuration;
import org.gradle.api.artifacts.ConfigurationContainer;
import org.gradle.api.artifacts.repositories.MavenArtifactRepository;
import org.gradle.api.execution.TaskExecutionGraph;
import org.gradle.api.logging.LogLevel;
import org.gradle.api.plugins.JavaBasePlugin;
import org.gradle.internal.reflect.Instantiator;
import org.gradle.internal.service.ServiceRegistry;
import org.gradle.language.base.FunctionalSourceSet;
import org.gradle.language.base.LanguageSourceSet;
import org.gradle.language.base.internal.registry.LanguageTransformContainer;
import org.gradle.model.Defaults;
import org.gradle.model.Model;
import org.gradle.model.ModelMap;
import org.gradle.model.Mutate;
import org.gradle.model.Path;
import org.gradle.model.RuleSource;
import org.gradle.model.internal.core.ModelReference;
import org.gradle.model.internal.core.ModelRegistrations;
import org.gradle.model.internal.registry.ModelRegistry;
import org.gradle.platform.base.ComponentSpecContainer;
import org.gradle.tooling.provider.model.ToolingModelBuilderRegistry;
import android.databinding.tool.DataBindingBuilder;
import java.io.File;
import java.io.IOException;
import java.security.KeyStore;
import java.util.Collection;
import java.util.List;
import java.util.Set;
import javax.inject.Inject;
import groovy.lang.Closure;
public class BaseComponentModelPlugin implements Plugin {
private ToolingModelBuilderRegistry toolingRegistry;
private ModelRegistry modelRegistry;
@Inject
protected BaseComponentModelPlugin(ToolingModelBuilderRegistry toolingRegistry,
ModelRegistry modelRegistry) {
this.toolingRegistry = toolingRegistry;
this.modelRegistry = modelRegistry;
}
/**
* Replace BasePlugin's apply method for component model.
*/
@Override
public void apply(Project project) {
ExecutionConfigurationUtil.setThreadPoolSize(project);
try {
List propertyList = Lists.newArrayList(
new Recorder.Property("plugin_version", Version.ANDROID_GRADLE_PLUGIN_VERSION),
new Recorder.Property("next_gen_plugin", "true"),
new Recorder.Property("gradle_version", project.getGradle().getGradleVersion())
);
String benchmarkName = AndroidGradleOptions.getBenchmarkName(project);
if (benchmarkName != null) {
propertyList.add(new Recorder.Property("benchmark_name", benchmarkName));
}
String benchmarkMode = AndroidGradleOptions.getBenchmarkMode(project);
if (benchmarkMode != null) {
propertyList.add(new Recorder.Property("benchmark_mode", benchmarkMode));
}
ProcessRecorderFactory.initialize(
new LoggerWrapper(project.getLogger()),
project.getRootProject()
.file("profiler" + System.currentTimeMillis() + ".json"),
propertyList);
} catch (IOException e) {
throw new RuntimeException("Unable to initialize ProcessRecorderFactory");
}
project.getGradle().addListener(new RecordingBuildListener(ThreadRecorder.get()));
project.getPlugins().apply(AndroidComponentModelPlugin.class);
project.getPlugins().apply(JavaBasePlugin.class);
project.getPlugins().apply(JacocoPlugin.class);
// Create default configurations. ConfigurationContainer is not part of the component
// model, making it difficult to define proper rules to create configurations based on
// build types and product flavors. We just create the default configurations for now
// which should handle the majority of the use cases.
// Users can still use variant specific configurations, they just have to be manually
// created.
// TODO: Migrate to new dependency management if it's ready.
ConfigurationContainer configurations = project.getConfigurations();
createConfiguration(configurations, "compile", "Classpath for compiling the default sources.");
createConfiguration(configurations, "testCompile", "Classpath for compiling the test sources.");
createConfiguration(configurations, "androidTestCompile", "Classpath for compiling the androidTest sources.");
createConfiguration(configurations, "default-metadata", "Metadata for published APKs");
createConfiguration(configurations, "default-mapping", "Metadata for published APKs");
project.getPlugins().apply(NdkComponentModelPlugin.class);
// Remove this when our models no longer depends on Project.
modelRegistry.register(ModelRegistrations
.bridgedInstance(ModelReference.of("projectModel", Project.class), project)
.descriptor("Model of project.").build());
toolingRegistry.register(new ComponentModelBuilder(modelRegistry));
// Inserting the ToolingModelBuilderRegistry into the model so that it can be use to create
// TaskManager in child classes.
modelRegistry.register(ModelRegistrations.bridgedInstance(
ModelReference.of("toolingRegistry", ToolingModelBuilderRegistry.class),
toolingRegistry).descriptor("Tooling model builder model registry.").build());
// Create SDK handler. This has to be done in the 'apply' method to ensure it is executed.
SdkHandler sdkHandler = createSdkHandler(project);
modelRegistry.register(ModelRegistrations.bridgedInstance(
ModelReference.of("createSdkHandler", SdkHandler.class),
sdkHandler).descriptor("SDK handler.").build());
}
private SdkHandler createSdkHandler(final Project project) {
final ILogger logger = new LoggerWrapper(project.getLogger());
final SdkHandler sdkHandler = new SdkHandler(project, logger);
// call back on execution. This is called after the whole build is done (not
// after the current project is done).
// This is will be called for each (android) projects though, so this should support
// being called 2+ times.
project.getGradle().buildFinished(new Closure