/* * 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.scope; import com.android.annotations.NonNull; import com.android.annotations.Nullable; import com.android.build.gradle.internal.TaskManager; import com.android.build.gradle.internal.variant.ApkVariantData; import com.android.build.gradle.internal.variant.BaseVariantOutputData; import com.android.build.gradle.tasks.CompatibleScreensManifest; import com.android.build.gradle.tasks.ManifestProcessorTask; import com.android.build.gradle.tasks.ProcessAndroidResources; import com.android.utils.StringHelper; import java.io.File; /** * A scope containing data for a specific variant. */ public class VariantOutputScope { @NonNull private VariantScope variantScope; @NonNull private BaseVariantOutputData variantOutputData; // Tasks private AndroidTask<CompatibleScreensManifest> compatibleScreensManifestTask; private AndroidTask<? extends ManifestProcessorTask> manifestProcessorTask; private AndroidTask<ProcessAndroidResources> processResourcesTask; public VariantOutputScope( @NonNull VariantScope variantScope, @NonNull BaseVariantOutputData variantOutputData) { this.variantScope = variantScope; this.variantOutputData = variantOutputData; } @NonNull public GlobalScope getGlobalScope() { return variantScope.getGlobalScope(); } @NonNull public VariantScope getVariantScope() { return variantScope; } @NonNull public BaseVariantOutputData getVariantOutputData() { return variantOutputData; } @NonNull public String getTaskName(@NonNull String prefix) { return getTaskName(prefix, ""); } @NonNull public String getTaskName(@NonNull String prefix, @NonNull String suffix) { return prefix + StringHelper.capitalize(getVariantOutputData().getFullName()) + suffix; } @NonNull public File getPackageApk() { ApkVariantData apkVariantData = (ApkVariantData) variantScope.getVariantData(); boolean signedApk = apkVariantData.isSigned(); String apkName = signedApk ? getGlobalScope().getProjectBaseName() + "-" + variantOutputData.getBaseName() + "-unaligned.apk" : getGlobalScope().getProjectBaseName() + "-" + variantOutputData.getBaseName() + "-unsigned.apk"; // if this is the final task then the location is // the potentially overridden one. if (!signedApk || !apkVariantData.getZipAlignEnabled()) { return getGlobalScope().getProject().file( getGlobalScope().getApkLocation() + "/" + apkName); } else { // otherwise default one. return getGlobalScope().getProject().file(getGlobalScope().getDefaultApkLocation() + "/" + apkName); } } @NonNull public File getCompressedResourceFile() { return new File(getGlobalScope().getIntermediatesDir(), "/res/" + "resources-" + variantOutputData.getBaseName() + "-stripped.ap_"); } @NonNull public File getCompatibleScreensManifestFile() { return new File(getGlobalScope().getIntermediatesDir(), "/manifests/density/" + variantOutputData.getDirName() + "/AndroidManifest.xml"); } @NonNull public File getManifestOutputFile() { switch(variantScope.getVariantConfiguration().getType()) { case DEFAULT: return new File(getGlobalScope().getIntermediatesDir(), "/manifests/full/" + variantOutputData.getDirName() + "/AndroidManifest.xml"); case LIBRARY: return new File(getGlobalScope().getIntermediatesDir(), TaskManager.DIR_BUNDLES + "/" + getVariantScope().getVariantConfiguration().getDirName() + "/AndroidManifest.xml"); case ANDROID_TEST: return new File(getGlobalScope().getIntermediatesDir(), "manifest/" + variantScope.getVariantConfiguration().getDirName() + "/AndroidManifest.xml"); default: throw new RuntimeException( "getManifestOutputFile called for an unexpected variant."); } } @NonNull public File getProcessResourcePackageOutputFile() { return new File(getGlobalScope().getIntermediatesDir(), "res/resources-" + variantOutputData.getBaseName() + ".ap_"); } // Tasks @Nullable public AndroidTask<CompatibleScreensManifest> getCompatibleScreensManifestTask() { return compatibleScreensManifestTask; } public void setCompatibleScreensManifestTask( @Nullable AndroidTask<CompatibleScreensManifest> compatibleScreensManifestTask) { this.compatibleScreensManifestTask = compatibleScreensManifestTask; } public AndroidTask<? extends ManifestProcessorTask> getManifestProcessorTask() { return manifestProcessorTask; } public void setManifestProcessorTask( AndroidTask<? extends ManifestProcessorTask> manifestProcessorTask) { this.manifestProcessorTask = manifestProcessorTask; } public AndroidTask<ProcessAndroidResources> getProcessResourcesTask() { return processResourcesTask; } public void setProcessResourcesTask( AndroidTask<ProcessAndroidResources> processResourcesTask) { this.processResourcesTask = processResourcesTask; } }