/** * Returns a base name that includes the given splits name. * @param splitName the split name * @return a unique name made up of the variant and split names. */ @NonNull public String computeBaseNameWithSplits(@NonNull String splitName) { StringBuilder sb = new StringBuilder(); if (!mFlavors.isEmpty()) { for (ProductFlavor pf : mFlavors) { sb.append(pf.getName()).append('-'); } } sb.append(splitName).append('-'); sb.append(mBuildType.getName()); if (mType.isForTesting()) { sb.append('-').append(mType.getPrefix()); } return sb.toString(); }
/** * Returns the full, unique name of the variant in camel case (starting with a lower case), * including BuildType, Flavors and Test (if applicable). * * @return the name of the variant */ @NonNull public String getFullName() { if (mFullName == null) { StringBuilder sb = new StringBuilder(); String flavorName = getFlavorName(); if (!flavorName.isEmpty()) { sb.append(flavorName); sb.append(StringHelper.capitalize(mBuildType.getName())); } else { sb.append(mBuildType.getName()); } if (mType.isForTesting()) { sb.append(mType.getSuffix()); } mFullName = sb.toString(); } return mFullName; }
public static ImmutableList<VariantType> getTestingTypes() { ImmutableList.Builder<VariantType> result = ImmutableList.builder(); for (VariantType variantType : values()) { if (variantType.isForTesting()) { result.add(variantType); } } return result.build(); }
/** * Turns a string into a valid source set name for the given {@link VariantType}, e.g. * "fooBarUnitTest" becomes "testFooBar". */ @NonNull private static String computeSourceSetName( @NonNull String name, @NonNull VariantType variantType) { if (name.endsWith(variantType.getSuffix())) { name = name.substring(0, name.length() - variantType.getSuffix().length()); } if (!variantType.getPrefix().isEmpty()) { name = variantType.getPrefix() + StringHelper.capitalize(name); } return name; }
@NonNull @Override public Set<Scope> getReferencedScopes() { Set<Scope> set = Sets.newHashSetWithExpectedSize(5); if (variantType == VariantType.LIBRARY) { set.add(Scope.SUB_PROJECTS); set.add(Scope.SUB_PROJECTS_LOCAL_DEPS); set.add(Scope.EXTERNAL_LIBRARIES); } if (variantType.isForTesting()) { set.add(Scope.TESTED_CODE); } set.add(Scope.PROVIDED_ONLY); return Sets.immutableEnumSet(set); }
extraModelInfo.getExtraArtifacts()); for (VariantType variantType : VariantType.getTestingTypes()) { artifactMetaDataList.add(new ArtifactMetaDataImpl( variantType.getArtifactName(), true /*isTest*/, variantType.getArtifactType())); if (!variantData.getType().isForTesting()) { variants.add(createVariant(variantData));
private static void checkName(@NonNull String name, @NonNull String displayName) { checkPrefix(name, displayName, ANDROID_TEST.getPrefix()); checkPrefix(name, displayName, UNIT_TEST.getPrefix()); if (LINT.equals(name)) { throw new RuntimeException(String.format( "%1$s names cannot be %2$s", displayName, LINT)); } }
/** * Create a ProductFlavorContainer from a ProductFlavorData * * @param productFlavorData the product flavor data * @param sourceProviderContainers collection of extra source providers * * @return a non-null ProductFlavorContainer */ @NonNull static ProductFlavorContainer createProductFlavorContainer( @NonNull ProductFlavorData productFlavorData, @NonNull Collection<SourceProviderContainer> sourceProviderContainers) { List<SourceProviderContainer> clonedContainers = SourceProviderContainerImpl.cloneCollection(sourceProviderContainers); for (VariantType variantType : VariantType.getTestingTypes()) { DefaultAndroidSourceSet sourceSet = productFlavorData.getTestSourceSet(variantType); if (sourceSet != null) { clonedContainers.add(SourceProviderContainerImpl.create( variantType.getArtifactName(), sourceSet)); } } return new ProductFlavorContainerImpl( ProductFlavorImpl.cloneFlavor(productFlavorData.getProductFlavor(), null, null), SourceProviderImpl.cloneProvider(productFlavorData.getSourceSet()), clonedContainers); }
@NonNull @Override public String getName() { return (taskKind == TaskKind.CONNECTED ? CONNECTED : DEVICE) + ANDROID_TEST.getSuffix(); }
.getType().isForTesting(); if (isTestCoverageEnabled) { pcData = createJacocoTask(tasks, scope, pcData); boolean isTestForApp = config.getType().isForTesting() && ((TestVariantData) variantData).getTestedVariantData().getVariantConfiguration() .getType().equals(DEFAULT); boolean isMinifyEnabled = config.isMinifyEnabled(); boolean isMultiDexEnabled = config.isMultiDexEnabled() && !isTestForApp;
if (!testedVariantData.getType().equals(LIBRARY) || scope.getVariantData().getType().equals(UNIT_TEST)) { classpath = classpath.plus(project.files( testedVariantData.getScope().getJavaClasspath(), if (scope.getVariantData().getType().equals(UNIT_TEST) && testedVariantData.getType().equals(LIBRARY)) {
private static void createCompoundSourceSets( @NonNull List<? extends ProductFlavor> productFlavorList, GradleVariantConfiguration variantConfig, NamedDomainObjectContainer<AndroidSourceSet> sourceSetsContainer) { if (!productFlavorList.isEmpty() && !variantConfig.getType().isSingleBuildType()) { DefaultAndroidSourceSet variantSourceSet = (DefaultAndroidSourceSet) sourceSetsContainer.maybeCreate( computeSourceSetName( variantConfig.getFullName(), variantConfig.getType())); variantConfig.setVariantSourceProvider(variantSourceSet); } if (productFlavorList.size() > 1) { DefaultAndroidSourceSet multiFlavorSourceSet = (DefaultAndroidSourceSet) sourceSetsContainer.maybeCreate( computeSourceSetName( variantConfig.getFlavorName(), variantConfig.getType())); variantConfig.setMultiFlavorSourceProvider(multiFlavorSourceSet); } }
private JavaArtifactImpl createUnitTestsJavaArtifact( @NonNull VariantType variantType, @NonNull BaseVariantData<? extends BaseVariantOutputData> variantData) { SourceProviders sourceProviders = determineSourceProviders(variantData); DependenciesImpl dependencies = DependenciesImpl.cloneDependencies(variantData, androidBuilder); List<File> extraGeneratedSourceFolders = variantData.getExtraGeneratedSourceFolders(); return new JavaArtifactImpl( variantType.getArtifactName(), variantData.assembleVariantTask.getName(), variantData.compileTask.getName(), Sets.newHashSet(variantData.prepareDependenciesTask.getName(), taskManager.createMockableJar.getName()), extraGeneratedSourceFolders != null ? extraGeneratedSourceFolders : Collections.<File>emptyList(), (variantData.javacTask != null) ? variantData.javacTask.getDestinationDir() : variantData.getScope().getJavaOutputDir(), variantData.processJavaResourcesTask.getDestinationDir(), taskManager.createMockableJar.getOutputFile(), dependencies, sourceProviders.variantSourceProvider, sourceProviders.multiFlavorSourceProvider); }
/** * Reads the package name from the manifest. This is unmodified by the build type. */ @Nullable public String getPackageFromManifest() { checkState(!mType.isForTesting()); String packageName = getManifestAttributeSupplier().getPackage(); if (packageName == null) { throw new RuntimeException(String.format("Cannot read packageName from %1$s", mDefaultSourceProvider.getManifestFile().getAbsolutePath())); } return packageName; }
extraModelInfo.getExtraArtifacts()); for (VariantType variantType : VariantType.getTestingTypes()) { artifactMetaDataList.add(new ArtifactMetaDataImpl( variantType.getArtifactName(), true /*isTest*/, variantType.getArtifactType())); if (!variantData.getType().isForTesting()) { androidProject.addVariant(createVariant(variantData));
private static void checkName(@NonNull String name, @NonNull String displayName) { checkPrefix(name, displayName, ANDROID_TEST.getPrefix()); checkPrefix(name, displayName, UNIT_TEST.getPrefix()); if (LINT.equals(name)) { throw new RuntimeException(String.format( "%1$s names cannot be %2$s", displayName, LINT)); } }
/** * Turns a string into a valid source set name for the given {@link VariantType}, e.g. * "fooBarUnitTest" becomes "testFooBar". */ @NonNull private static String computeSourceSetName( @NonNull String name, @NonNull VariantType variantType) { if (name.endsWith(variantType.getSuffix())) { name = name.substring(0, name.length() - variantType.getSuffix().length()); } if (!variantType.getPrefix().isEmpty()) { name = variantType.getPrefix() + StringHelper.capitalize(name); } return name; }
/** * Create a BuildTypeContainer from a BuildTypeData * * @param buildTypeData the build type data * @param sourceProviderContainers collection of extra source providers * * @return a non-null BuildTypeContainer */ @NonNull static BuildTypeContainer create( @NonNull BuildTypeData buildTypeData, @NonNull Collection<SourceProviderContainer> sourceProviderContainers) { List<SourceProviderContainer> clonedContainers = SourceProviderContainerImpl.cloneCollection(sourceProviderContainers); for (VariantType variantType : VariantType.getTestingTypes()) { DefaultAndroidSourceSet testSourceSet = buildTypeData.getTestSourceSet(variantType); if (testSourceSet != null) { clonedContainers.add(SourceProviderContainerImpl.create( variantType.getArtifactName(), testSourceSet)); } } return new BuildTypeContainerImpl( BuildTypeImpl.cloneBuildType(buildTypeData.getBuildType()), SourceProviderImpl.cloneProvider(buildTypeData.getSourceSet()), clonedContainers); }
@NonNull @Override public String getName() { return super.getName() + VariantType.ANDROID_TEST.getSuffix(); } });
@Override public void execute(@NonNull MergeSourceSetFolders mergeAssetsTask) { super.execute(mergeAssetsTask); final BaseVariantData<? extends BaseVariantOutputData> variantData = scope.getVariantData(); final GradleVariantConfiguration variantConfig = variantData.getVariantConfiguration(); variantData.mergeAssetsTask = mergeAssetsTask; final boolean includeDependencies = !variantConfig.getType() .equals(VariantType.LIBRARY); ConventionMappingHelper.map(mergeAssetsTask, "inputDirectorySets", () -> { ArrayList<File> generatedAssets = new ArrayList<>(); generatedAssets.add(scope.getShadersOutputDir()); if (variantData.copyApkTask != null) { generatedAssets.add(variantData.copyApkTask.getDestinationDir()); } List<AssetSet> assetSets = variantConfig.getAssetSets(generatedAssets, includeDependencies); AaptOptions options = scope.getGlobalScope().getExtension().getAaptOptions(); if (options != null && options.getIgnoreAssets() != null) { assetSets.forEach(as -> as.setIgnoredPatterns(options.getIgnoreAssets())); } return assetSets; }); mergeAssetsTask.setOutputDir(scope.getMergeAssetsOutputDir()); } }