blob: 25b014eb14a599dda30ab0d90ac76b79c9177c0d [file] [log] [blame]
/*
* Copyright (C) 2017 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.
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;
import android.databinding.tool.DataBindingBuilder;
import com.android.annotations.NonNull;
import com.android.build.gradle.api.BaseVariantOutput;
import com.android.build.gradle.internal.ExtraModelInfo;
import com.android.build.gradle.internal.InstantAppTaskManager;
import com.android.build.gradle.internal.TaskManager;
import com.android.build.gradle.internal.VariantManager;
import com.android.build.gradle.internal.dependency.SourceSetManager;
import com.android.build.gradle.internal.dsl.BuildType;
import com.android.build.gradle.internal.dsl.ProductFlavor;
import com.android.build.gradle.internal.dsl.SigningConfig;
import com.android.build.gradle.internal.ide.InstantAppModelBuilder;
import com.android.build.gradle.internal.plugins.BasePlugin;
import com.android.build.gradle.internal.scope.GlobalScope;
import com.android.build.gradle.internal.variant.InstantAppVariantFactory;
import com.android.build.gradle.internal.variant.VariantFactory;
import com.android.build.gradle.options.ProjectOptions;
import com.android.builder.model.AndroidProject;
import com.android.builder.profile.Recorder;
import com.google.wireless.android.sdk.stats.GradleBuildProject;
import javax.inject.Inject;
import org.gradle.api.NamedDomainObjectContainer;
import org.gradle.api.Project;
import org.gradle.api.component.SoftwareComponentFactory;
import org.gradle.tooling.provider.model.ToolingModelBuilderRegistry;
/** Gradle plugin class for 'instantapp' projects. */
public class InstantAppPlugin extends BasePlugin {
@Inject
public InstantAppPlugin(
ToolingModelBuilderRegistry registry, SoftwareComponentFactory componentFactory) {
super(registry, componentFactory);
}
@Override
protected int getProjectType() {
return AndroidProject.PROJECT_TYPE_INSTANTAPP;
}
@NonNull
@Override
protected BaseExtension createExtension(
@NonNull Project project,
@NonNull ProjectOptions projectOptions,
@NonNull GlobalScope globalScope,
@NonNull NamedDomainObjectContainer<BuildType> buildTypeContainer,
@NonNull NamedDomainObjectContainer<ProductFlavor> productFlavorContainer,
@NonNull NamedDomainObjectContainer<SigningConfig> signingConfigContainer,
@NonNull NamedDomainObjectContainer<BaseVariantOutput> buildOutputs,
@NonNull SourceSetManager sourceSetManager,
@NonNull ExtraModelInfo extraModelInfo) {
return project.getExtensions()
.create(
"android",
InstantAppExtension.class,
project,
projectOptions,
globalScope,
buildTypeContainer,
productFlavorContainer,
signingConfigContainer,
buildOutputs,
sourceSetManager,
extraModelInfo);
}
@NonNull
@Override
protected GradleBuildProject.PluginType getAnalyticsPluginType() {
return GradleBuildProject.PluginType.INSTANTAPP;
}
@NonNull
@Override
protected TaskManager createTaskManager(
@NonNull GlobalScope globalScope,
@NonNull Project project,
@NonNull ProjectOptions projectOptions,
@NonNull DataBindingBuilder dataBindingBuilder,
@NonNull BaseExtension extension,
@NonNull VariantFactory variantFactory,
@NonNull ToolingModelBuilderRegistry toolingRegistry,
@NonNull Recorder recorder) {
return new InstantAppTaskManager(
globalScope,
project,
projectOptions,
dataBindingBuilder,
extension,
variantFactory,
toolingRegistry,
recorder);
}
@Override
protected void registerModels(
@NonNull ToolingModelBuilderRegistry registry,
@NonNull GlobalScope globalScope,
@NonNull VariantManager variantManager,
@NonNull BaseExtension extension,
@NonNull ExtraModelInfo extraModelInfo) {
InstantAppModelBuilder instantAppModelBuilder =
new InstantAppModelBuilder(variantManager, extension, extraModelInfo);
registry.register(instantAppModelBuilder);
}
@Override
protected void pluginSpecificApply(@NonNull Project project) {
// do nothing
}
@NonNull
@Override
protected InstantAppVariantFactory createVariantFactory(@NonNull GlobalScope globalScope) {
return new InstantAppVariantFactory(globalScope);
}
}