String getBuildType() { return getBaseVariant().getBuildType().getName(); }
@Nullable public String getConsumerProguardConfig() { Set<File> consumerProguardFiles = new ImmutableSet.Builder<File>() .addAll(getBaseVariant().getMergedFlavor().getConsumerProguardFiles()) .addAll(getBaseVariant().getBuildType().getConsumerProguardFiles()) .build(); if (consumerProguardFiles.size() > 0) { Optional<File> optionalFile = consumerProguardFiles.stream().findFirst(); return FileUtil.getRelativePath(getProject().getProjectDir(), optionalFile.get()); } return null; }
extraBuildConfig.putAll(getBaseVariant().getBuildType().getBuildConfigFields());
@Nullable public String getProguardConfig() { if (minifyEnabled) { Set<File> proguardFiles = new ImmutableSet.Builder<File>() .addAll(getBaseVariant().getMergedFlavor().getProguardFiles()) .addAll(getBaseVariant().getBuildType().getProguardFiles()) .build(); Preconditions.checkArgument( proguardFiles.size() == 1, "%s proguard files found. Only one can be used.", proguardFiles.size()); File proguardFile = proguardFiles.iterator().next(); Preconditions.checkArgument( proguardFile.exists(), "Proguard file %s does not exist", proguardFile); return FileUtil.getRelativePath(getProject().getRootDir(), proguardFile); } return null; }
public AndroidAppTarget(Project project, String name, boolean isTest) { super(project, name, isTest); minifyEnabled = getBaseVariant().getBuildType().isMinifyEnabled(); keystore = extractKeystore(); placeholders.putAll(getBaseVariant().getBuildType().getManifestPlaceholders()); placeholders.putAll(getBaseVariant().getMergedFlavor().getManifestPlaceholders());
@Nullable private Keystore extractKeystore() { SigningConfig mergedConfig = getBaseVariant().getMergedFlavor().getSigningConfig(); SigningConfig config = mergedConfig != null ? mergedConfig : getBaseVariant().getBuildType().getSigningConfig(); if (config != null) { String keystoreFilePath = FileUtil.getRelativePath(getRootProject().getProjectDir(), config.getStoreFile()); ProjectUtil.getPlugin(getProject()).exportedPaths.add(keystoreFilePath); return Keystore.create( keystoreFilePath, config.getStorePassword(), config.getKeyAlias(), config.getKeyPassword()); } return null; }
+ Strings.nullToEmpty(getBaseVariant().getBuildType().getApplicationIdSuffix()); versionCode = getBaseVariant().getMergedFlavor().getVersionCode(); debuggable = getBaseVariant().getBuildType().isDebuggable();
@Nullable private static BaseVariant findVariant(List<BaseVariant> candidates, @Nullable String testBuildType, @Nullable String userConfiguredBuildVariantName) { if (candidates.isEmpty()) { return null; } if (userConfiguredBuildVariantName == null) { // Take first "test" buildType when there is no provided variant name // Release variant may be obfuscated using proguard. Also unit tests and coverage reports are usually collected in debug mode. Optional<BaseVariant> firstDebug = candidates.stream().filter(v -> testBuildType != null && testBuildType.equals(v.getBuildType().getName())).findFirst(); // No debug variant? Then use first variant whatever is the type BaseVariant result = firstDebug.orElse(candidates.get(0)); LOGGER.info("No variant name specified to be used by SonarQube. Default to '{}'", result.getName()); return result; } else { Optional<BaseVariant> result = candidates.stream().filter(v -> userConfiguredBuildVariantName.equals(v.getName())).findFirst(); if (result.isPresent()) { return result.get(); } else { throw new IllegalArgumentException("Unable to find variant '" + userConfiguredBuildVariantName + "' to use for SonarQube analysis. Candidates are: " + candidates.stream().map(BaseVariant::getName).collect(Collectors.joining(", "))); } } }
@Nullable private static BaseVariant findVariant(List<BaseVariant> candidates, @Nullable String testBuildType, @Nullable String userConfiguredBuildVariantName) { if (candidates.isEmpty()) { return null; } if (userConfiguredBuildVariantName == null) { // Take first "test" buildType when there is no provided variant name // Release variant may be obfuscated using proguard. Also unit tests and coverage reports are usually collected in debug mode. Optional<BaseVariant> firstDebug = candidates.stream().filter(v -> testBuildType != null && testBuildType.equals(v.getBuildType().getName())).findFirst(); // No debug variant? Then use first variant whatever is the type BaseVariant result = firstDebug.orElse(candidates.get(0)); LOGGER.info("No variant name specified to be used by SonarQube. Default to '{}'", result.getName()); return result; } else { Optional<BaseVariant> result = candidates.stream().filter(v -> userConfiguredBuildVariantName.equals(v.getName())).findFirst(); if (result.isPresent()) { return result.get(); } else { throw new IllegalArgumentException("Unable to find variant '" + userConfiguredBuildVariantName + "' to use for SonarQube analysis. Candidates are: " + candidates.stream().map(BaseVariant::getName).collect(Collectors.joining(", "))); } } }
@Override public VariantScope create(BaseVariant v) { ConfigurationContainer configurations = project.getConfigurations(); // the actual configuration Configuration configuration = getByVariant(v.getName()); // attributes match AttributeContainer attributes = configuration.getAttributes(); attributes .attribute(ARTIFACT_TYPE, ArtifactTypeDefinition.JAR_TYPE) .attribute(BuildTypeAttr.ATTRIBUTE, project.getObjects().named(BuildTypeAttr.class, v.getBuildType().getName())) .attribute(Usage.USAGE_ATTRIBUTE, project.getObjects().named(Usage.class, Usage.JAVA_RUNTIME)); v.getProductFlavors().forEach(p -> attributes.attribute(Attribute.of(p.getDimension(), ProductFlavorAttr.class), project.getObjects().named(ProductFlavorAttr.class, p.getName()))); configuration.setDescription("Resolved configuration for capt for variant: " + v.getName()); configuration.setVisible(false); configuration.setCanBeConsumed(false); configuration.getResolutionStrategy().sortArtifacts(ResolutionStrategy.SortOrder.CONSUMER_FIRST); v.getSourceSets().stream() .map(SourceProvider::getName) .map(VariantManager::sourceSetToConfigurationName) .map(configurations::getByName) .forEach(configuration::extendsFrom); return new VariantScope(v.getName(), configuration, global); }