| /* |
| * 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.variant; |
| |
| import com.android.annotations.NonNull; |
| import com.android.annotations.Nullable; |
| import com.android.build.FilterData; |
| import com.android.build.OutputFile; |
| import com.android.build.VariantOutput; |
| import com.android.build.gradle.api.ApkOutputFile; |
| import com.android.build.gradle.internal.scope.VariantOutputScope; |
| import com.android.build.gradle.tasks.ManifestProcessorTask; |
| import com.android.build.gradle.tasks.PackageSplitAbi; |
| import com.android.build.gradle.tasks.PackageSplitRes; |
| import com.android.build.gradle.tasks.ProcessAndroidResources; |
| import com.android.utils.StringHelper; |
| import com.google.common.collect.ImmutableList; |
| |
| import org.gradle.api.Task; |
| |
| import java.io.File; |
| import java.util.Collection; |
| import java.util.concurrent.Callable; |
| |
| /** |
| * Base output data about a variant. |
| */ |
| public abstract class BaseVariantOutputData implements VariantOutput { |
| |
| private static final String UNIVERSAL = "universal"; |
| |
| @NonNull |
| public final BaseVariantData<?> variantData; |
| |
| @NonNull |
| private final ApkOutputFile mainApkOutputFile; |
| |
| private boolean multiOutput = false; |
| |
| public ManifestProcessorTask manifestProcessorTask; |
| |
| public ProcessAndroidResources processResourcesTask; |
| |
| public PackageSplitRes packageSplitResourcesTask; |
| |
| public PackageSplitAbi packageSplitAbiTask; |
| |
| public Task assembleTask; |
| |
| @NonNull |
| private final VariantOutputScope scope; |
| |
| public BaseVariantOutputData( |
| @NonNull OutputFile.OutputType outputType, |
| @NonNull Collection<FilterData> filters, |
| @NonNull BaseVariantData<?> variantData) { |
| this.variantData = variantData; |
| this.mainApkOutputFile = new ApkOutputFile( |
| outputType, filters, getOutputFilePromise()); |
| scope = new VariantOutputScope(variantData.getScope(), this); |
| } |
| |
| @Nullable |
| @Override |
| public ApkOutputFile getMainOutputFile() { |
| return mainApkOutputFile; |
| } |
| |
| private Callable<File> getOutputFilePromise() { |
| return new Callable<File>() { |
| @Override |
| public File call() throws Exception { |
| return getOutputFile(); |
| } |
| }; |
| } |
| |
| |
| public abstract void setOutputFile(@NonNull File file); |
| |
| @Nullable |
| public abstract File getOutputFile(); |
| |
| @NonNull |
| @Override |
| public abstract ImmutableList<ApkOutputFile> getOutputs(); |
| |
| @NonNull |
| public String getFullName() { |
| if (!multiOutput) { |
| return variantData.getVariantConfiguration().getFullName(); |
| } |
| return variantData.getVariantConfiguration().computeFullNameWithSplits(getFilterName()); |
| } |
| |
| @NonNull |
| public String getBaseName() { |
| if (!multiOutput) { |
| return variantData.getVariantConfiguration().getBaseName(); |
| } |
| return variantData.getVariantConfiguration().computeBaseNameWithSplits(getFilterName()); |
| } |
| |
| @NonNull |
| public String getDirName() { |
| if (!multiOutput) { |
| return variantData.getVariantConfiguration().getDirName(); |
| } |
| return variantData.getVariantConfiguration().computeDirNameWithSplits( |
| mainApkOutputFile.getFilter(OutputFile.DENSITY), |
| mainApkOutputFile.getFilter(OutputFile.ABI)); |
| } |
| |
| @NonNull |
| private String getFilterName() { |
| if (mainApkOutputFile.getFilters().isEmpty()) { |
| return UNIVERSAL; |
| } |
| |
| StringBuilder sb = new StringBuilder(); |
| String densityFilter = mainApkOutputFile.getFilter(OutputFile.DENSITY); |
| if (densityFilter != null) { |
| sb.append(densityFilter); |
| } |
| String abiFilter = mainApkOutputFile.getFilter(OutputFile.ABI); |
| if (abiFilter != null) { |
| if (sb.length() > 0) { |
| sb.append(StringHelper.capitalize(abiFilter)); |
| } else { |
| sb.append(abiFilter); |
| } |
| } |
| |
| return sb.toString(); |
| } |
| |
| @NonNull |
| @Override |
| public File getSplitFolder() { |
| return getOutputFile().getParentFile(); |
| } |
| |
| void setMultiOutput(boolean multiOutput) { |
| this.multiOutput = multiOutput; |
| } |
| |
| @NonNull |
| public VariantOutputScope getScope() { |
| return scope; |
| } |
| } |