/* * Copyright (C) 2014 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.core; import static com.google.common.base.Preconditions.checkNotNull; import com.android.annotations.NonNull; import com.android.annotations.Nullable; import com.android.build.gradle.internal.dsl.CoreBuildType; import com.android.build.gradle.internal.dsl.CoreNdkOptions; import com.android.build.gradle.internal.dsl.CoreProductFlavor; import com.android.builder.core.VariantConfiguration; import com.android.builder.core.VariantType; import com.android.builder.model.SigningConfig; import com.android.builder.model.SourceProvider; import java.util.List; import java.util.Set; /** * Version of {@link com.android.builder.core.VariantConfiguration} that uses the specific * types used in the Gradle plugins. * * It also adds support for Ndk support that is not ready to go in the builder library. */ public class GradleVariantConfiguration extends VariantConfiguration<CoreBuildType, CoreProductFlavor, CoreProductFlavor> { private final MergedNdkConfig mMergedNdkConfig = new MergedNdkConfig(); /** * Creates a {@link GradleVariantConfiguration} for a normal (non-test) variant. */ public GradleVariantConfiguration( @NonNull CoreProductFlavor defaultConfig, @NonNull SourceProvider defaultSourceProvider, @NonNull CoreBuildType buildType, @Nullable SourceProvider buildTypeSourceProvider, @NonNull VariantType type, @Nullable SigningConfig signingConfigOverride) { super(defaultConfig, defaultSourceProvider, buildType, buildTypeSourceProvider, type, signingConfigOverride); computeNdkConfig(); } /** * Creates a {@link GradleVariantConfiguration} for a testing variant. */ public GradleVariantConfiguration( @Nullable VariantConfiguration testedConfig, @NonNull CoreProductFlavor defaultConfig, @NonNull SourceProvider defaultSourceProvider, @NonNull CoreBuildType buildType, @Nullable SourceProvider buildTypeSourceProvider, @NonNull VariantType type, @Nullable SigningConfig signingConfigOverride) { super(defaultConfig, defaultSourceProvider, buildType, buildTypeSourceProvider, type, testedConfig, signingConfigOverride); computeNdkConfig(); } @NonNull @Override public VariantConfiguration addProductFlavor( @NonNull CoreProductFlavor productFlavor, @NonNull SourceProvider sourceProvider, @NonNull String dimensionName) { checkNotNull(productFlavor); checkNotNull(sourceProvider); checkNotNull(dimensionName); super.addProductFlavor(productFlavor, sourceProvider, dimensionName); computeNdkConfig(); return this; } @NonNull public CoreNdkOptions getNdkConfig() { return mMergedNdkConfig; } /** * Returns the ABI filters associated with the artifact, or null if there are no filters. * * If the list contains values, then the artifact only contains these ABIs and excludes * others. */ @Nullable public Set<String> getSupportedAbis() { return mMergedNdkConfig.getAbiFilters(); } /** * Returns whether the configuration has minification enabled. */ public boolean isMinifyEnabled() { VariantType type = getType(); // if type == test then getTestedConfig always returns non-null //noinspection ConstantConditions return getBuildType().isMinifyEnabled() && (!type.isForTesting() || (getTestedConfig().getType() != VariantType.LIBRARY)); } public boolean getUseJack() { Boolean value = getBuildType().getUseJack(); if (value != null) { return value; } // cant use merge flavor as useJack is not a prop on the base class. for (CoreProductFlavor productFlavor : getProductFlavors()) { value = productFlavor.getUseJack(); if (value != null) { return value; } } value = getDefaultConfig().getUseJack(); if (value != null) { return value; } return false; } private void computeNdkConfig() { mMergedNdkConfig.reset(); if (getDefaultConfig().getNdkConfig() != null) { mMergedNdkConfig.append(getDefaultConfig().getNdkConfig()); } final List<CoreProductFlavor> flavors = getProductFlavors(); for (int i = flavors.size() - 1 ; i >= 0 ; i--) { CoreNdkOptions ndkConfig = flavors.get(i).getNdkConfig(); if (ndkConfig != null) { mMergedNdkConfig.append(ndkConfig); } } if (getBuildType().getNdkConfig() != null && !getType().isForTesting()) { mMergedNdkConfig.append(getBuildType().getNdkConfig()); } } }