blob: fa03d5703735cf0e9bb8c09f1be5aff75c69d604 [file] [log] [blame]
/*
* 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.internal;
import com.android.annotations.NonNull;
import com.android.build.gradle.api.AndroidSourceSet;
import com.android.build.gradle.internal.coverage.JacocoExtension;
import com.android.build.gradle.internal.dsl.AaptOptions;
import com.android.build.gradle.internal.dsl.AdbOptions;
import com.android.build.gradle.internal.dsl.AndroidSourceSetFactory;
import com.android.build.gradle.internal.dsl.DexOptions;
import com.android.build.gradle.internal.dsl.LintOptions;
import com.android.build.gradle.internal.dsl.PackagingOptions;
import com.android.build.gradle.internal.dsl.PreprocessingOptions;
import com.android.build.gradle.internal.dsl.Splits;
import com.android.build.gradle.internal.dsl.TestOptions;
import com.android.build.gradle.managed.AndroidConfig;
import com.android.builder.core.BuilderConstants;
import com.android.builder.core.LibraryRequest;
import com.android.builder.testing.api.DeviceProvider;
import com.android.builder.testing.api.TestServer;
import com.google.common.collect.Lists;
import org.gradle.api.Action;
import org.gradle.api.NamedDomainObjectContainer;
import org.gradle.api.Project;
import org.gradle.api.artifacts.Configuration;
import org.gradle.api.artifacts.ConfigurationContainer;
import org.gradle.internal.reflect.Instantiator;
/**
* Utility functions for initializing an AndroidConfig.
*/
public class AndroidConfigHelper {
public static void configure(
@NonNull AndroidConfig model,
@NonNull Instantiator instantiator) {
model.setDefaultPublishConfig(BuilderConstants.RELEASE);
model.setPublishNonDefault(false);
model.setGeneratePureSplits(false);
model.setPreProcessingOptions(instantiator.newInstance(PreprocessingOptions.class));
model.setDeviceProviders(Lists.<DeviceProvider>newArrayList());
model.setTestServers(Lists.<TestServer>newArrayList());
model.setAaptOptions(instantiator.newInstance(AaptOptions.class));
model.setDexOptions(instantiator.newInstance(DexOptions.class));
model.setLintOptions(instantiator.newInstance(LintOptions.class));
model.setTestOptions(instantiator.newInstance(TestOptions.class));
model.setCompileOptions(instantiator.newInstance(CompileOptions.class));
model.setPackagingOptions(instantiator.newInstance(PackagingOptions.class));
model.setJacoco(instantiator.newInstance(JacocoExtension.class));
model.setAdbOptions(instantiator.newInstance(AdbOptions.class));
model.setSplits(instantiator.newInstance(Splits.class, instantiator));
model.setLibraryRequests(Lists.<LibraryRequest>newArrayList());
}
public static NamedDomainObjectContainer<AndroidSourceSet> createSourceSetsContainer(
@NonNull final Project project,
@NonNull Instantiator instantiator,
final boolean isLibrary) {
NamedDomainObjectContainer<AndroidSourceSet> sourceSetsContainer = project.container(
AndroidSourceSet.class,
new AndroidSourceSetFactory(instantiator, project, isLibrary));
sourceSetsContainer.whenObjectAdded(new Action<AndroidSourceSet>() {
@Override
public void execute(AndroidSourceSet sourceSet) {
ConfigurationContainer configurations = project.getConfigurations();
createConfiguration(
configurations,
sourceSet.getCompileConfigurationName(),
"Classpath for compiling the ${sourceSet.name} sources.");
String packageConfigDescription;
if (isLibrary) {
packageConfigDescription
= "Classpath only used when publishing '${sourceSet.name}'.";
} else {
packageConfigDescription
= "Classpath packaged with the compiled '${sourceSet.name}' classes.";
}
createConfiguration(
configurations,
sourceSet.getPackageConfigurationName(),
packageConfigDescription);
createConfiguration(
configurations,
sourceSet.getProvidedConfigurationName(),
"Classpath for only compiling the ${sourceSet.name} sources.");
createConfiguration(
configurations,
sourceSet.getWearAppConfigurationName(),
"Link to a wear app to embed for object '${sourceSet.name}'.");
sourceSet.setRoot(String.format("src/%s", sourceSet.getName()));
}
});
return sourceSetsContainer;
}
private static void createConfiguration(
@NonNull ConfigurationContainer configurations,
@NonNull String configurationName,
@NonNull String configurationDescription) {
Configuration configuration = configurations.findByName(configurationName);
if (configuration == null) {
configuration = configurations.create(configurationName);
}
// Disable modification to configurations as this causes issues when accessed through the
// tooling-api. Check that it works with Studio's ImportProjectAction before re-enabling
// them.
//configuration.setVisible(false);
//configuration.setDescription(configurationDescription);
}
}