in src/com/facebook/buck/android/AndroidBinaryGraphEnhancerFactory.java [55:224]
public AndroidBinaryGraphEnhancer create(
ToolchainProvider toolchainProvider,
JavaBuckConfig javaBuckConfig,
AndroidBuckConfig androidBuckConfig,
CxxBuckConfig cxxBuckConfig,
DxConfig dxConfig,
ProGuardConfig proGuardConfig,
CellPathResolver cellPathResolver,
TargetGraph targetGraph,
BuildTarget buildTarget,
DependencyStack dependencyStack,
ProjectFilesystem projectFilesystem,
BuildRuleParams params,
ActionGraphBuilder graphBuilder,
ResourceFilter resourceFilter,
DexSplitMode dexSplitMode,
EnumSet<ExopackageMode> exopackageModes,
Supplier<ImmutableSet<JavaLibrary>> rulesToExcludeFromDex,
AndroidGraphEnhancerArgs args,
boolean useProtoFormat,
JavaOptions javaOptions,
JavacFactory javacFactory,
ConfigurationRuleRegistry configurationRuleRegistry) {
AndroidPlatformTarget androidPlatformTarget =
toolchainProvider.getByName(
AndroidPlatformTarget.DEFAULT_NAME,
buildTarget.getTargetConfiguration(),
AndroidPlatformTarget.class);
ListeningExecutorService dxExecutorService =
toolchainProvider
.getByName(
DxToolchain.DEFAULT_NAME, buildTarget.getTargetConfiguration(), DxToolchain.class)
.getDxExecutorService();
ProGuardObfuscateStep.SdkProguardType androidSdkProguardConfig =
args.getAndroidSdkProguardConfig().orElse(ProGuardObfuscateStep.SdkProguardType.NONE);
boolean shouldProguard =
args.getProguardConfig().isPresent()
|| !ProGuardObfuscateStep.SdkProguardType.NONE.equals(androidSdkProguardConfig);
boolean shouldPreDex =
!args.getDisablePreDex()
&& !shouldProguard
&& !args.getPreprocessJavaClassesBash().isPresent();
boolean shouldSkipCrunchPngs =
args.isSkipCrunchPngs().isPresent()
? args.isSkipCrunchPngs().get()
: androidBuckConfig.getSkipCrunchPngsDefault().orElse(false);
APKModuleGraph apkModuleGraph;
if (args.getApplicationModuleConfigs().isEmpty()) {
apkModuleGraph =
new APKModuleGraph(
targetGraph, buildTarget, Optional.of(args.getApplicationModuleTargets()));
} else {
apkModuleGraph =
new APKModuleGraph(
Optional.of(args.getApplicationModuleConfigs()),
args.getApplicationModuleDependencies(),
APKModuleGraph.extractTargetsFromQueries(args.getApplicationModuleBlacklist()),
args.getApplicationModulesWithResources(),
args.getUseDynamicFeature()? args.getApplicationModulesWithManifest(): args.getApplicationModulesWithResources(),
targetGraph,
buildTarget);
}
NonPreDexedDexBuildable.NonPredexedDexBuildableArgs nonPreDexedDexBuildableArgs =
ImmutableNonPredexedDexBuildableArgs.builder()
.setProguardAgentPath(proGuardConfig.getProguardAgentPath())
.setProguardJarOverride(
proGuardConfig.getProguardJarOverride(buildTarget.getTargetConfiguration()))
.setProguardMaxHeapSize(proGuardConfig.getProguardMaxHeapSize())
.setSdkProguardConfig(androidSdkProguardConfig)
.setPreprocessJavaClassesBash(
getPreprocessJavaClassesBash(args, buildTarget, graphBuilder, cellPathResolver))
.setReorderClassesIntraDex(args.isReorderClassesIntraDex())
.setDexReorderToolFile(args.getDexReorderToolFile())
.setDexReorderDataDumpFile(args.getDexReorderDataDumpFile())
.setDxExecutorService(dxExecutorService)
.setDxMaxHeapSize(dxConfig.getDxMaxHeapSize())
.setOptimizationPasses(args.getOptimizationPasses())
.setProguardJvmArgs(args.getProguardJvmArgs())
.setSkipProguard(args.isSkipProguard())
.setJavaRuntimeLauncher(
javaOptions.getJavaRuntimeLauncher(
graphBuilder, buildTarget.getTargetConfiguration()))
.setProguardConfigPath(args.getProguardConfig())
.setShouldProguard(shouldProguard)
.setMinSdkVersion(args.getManifestEntries().getMinSdkVersion())
.build();
return new AndroidBinaryGraphEnhancer(
toolchainProvider,
cellPathResolver,
buildTarget,
projectFilesystem,
androidPlatformTarget,
params,
graphBuilder,
args.getAaptMode(),
args.getAdditionalAaptParams(),
args.getResourceCompression(),
resourceFilter,
args.getEffectiveBannedDuplicateResourceTypes(),
args.getDuplicateResourceWhitelist(),
args.getResourceUnionPackage(),
addFallbackLocales(args.getLocales()),
args.getLocalizedStringFileName(),
args.getManifest(),
args.getManifestSkeleton(),
args.getModuleManifestSkeleton(),
getPackageType(args),
ImmutableSet.copyOf(args.getCpuFilters()),
args.isBuildStringSourceMap(),
shouldPreDex,
dexSplitMode,
args.getNoDx(),
/* resourcesToExclude */ ImmutableSet.of(),
/* nativeLibsToExclude */ ImmutableSet.of(),
/* nativeLinkablesToExclude */ ImmutableSet.of(),
/* nativeLibAssetsToExclude */ ImmutableSet.of(),
/* nativeLinkableAssetsToExclude */ ImmutableSet.of(),
shouldSkipCrunchPngs,
args.isIncludesVectorDrawables(),
args.isNoAutoVersionResources(),
args.isNoVersionTransitionsResources(),
args.isNoAutoAddOverlayResources(),
androidBuckConfig.getAaptNoResourceRemoval(),
javaBuckConfig,
javacFactory,
toolchainProvider
.getByName(
JavacOptionsProvider.DEFAULT_NAME,
buildTarget.getTargetConfiguration(),
JavacOptionsProvider.class)
.getJavacOptions(),
exopackageModes,
args.getBuildConfigValues(),
args.getBuildConfigValuesFile(),
XzStep.DEFAULT_COMPRESSION_LEVEL,
args.isTrimResourceIds(),
args.getKeepResourcePattern(),
args.isIgnoreAaptProguardConfig(),
Optional.of(args.getNativeLibraryMergeMap()),
args.getNativeLibraryMergeGlue(),
args.getNativeLibraryMergeCodeGenerator(),
args.getNativeLibraryMergeLocalizedSymbols(),
shouldProguard ? args.getNativeLibraryProguardConfigGenerator() : Optional.empty(),
args.isEnableRelinker() ? RelinkerMode.ENABLED : RelinkerMode.DISABLED,
args.getRelinkerWhitelist(),
dxExecutorService,
args.getManifestEntries(),
cxxBuckConfig,
apkModuleGraph,
dxConfig,
args.getDexTool(),
getPostFilterResourcesArgs(args, buildTarget, graphBuilder, cellPathResolver),
nonPreDexedDexBuildableArgs,
rulesToExcludeFromDex,
useProtoFormat,
AndroidNativeTargetConfigurationMatcherFactory.create(
configurationRuleRegistry, buildTarget, dependencyStack, args.getCpuFilters()),
androidBuckConfig.getFailOnLegacyAaptErrors(),
args.isAapt2LocaleFiltering(),
args.getExtraFilteredResources());
}