in src/com/facebook/buck/android/AndroidBinaryRule.java [1261:1331]
public AndroidBinaryRule build(BuildRuleResolver ruleResolver) {
// Make sure the "keystore" argument refers to a KeystoreRule.
BuildRule rule = ruleResolver.get(keystoreTarget);
Buildable keystore = rule.getBuildable();
if (!(keystore instanceof Keystore)) {
throw new HumanReadableException(
"In %s, keystore='%s' must be a keystore() but was %s().",
getBuildTarget(),
rule.getFullyQualifiedName(),
rule.getType().getName());
}
BuildRuleParams originalParams = createBuildRuleParams(ruleResolver);
ImmutableSortedSet<BuildRule> originalDeps = originalParams.getDeps();
ImmutableSet<IntermediateDexRule> preDexDeps;
ImmutableSet<BuildTarget> buildRulesToExcludeFromDex =
buildRulesToExcludeFromDexBuilder.build();
if (!disablePreDex
&& PackageType.DEBUG.equals(packageType)
&& !dexSplitMode.isShouldSplitDex() // TODO(mbolin): Support predex for split dex.
&& !preprocessJavaClassesBash.isPresent() // TODO(mbolin): Support predex post-preprocess.
) {
AndroidBinaryGraphEnhancer graphEnhancer = new AndroidBinaryGraphEnhancer(
originalDeps,
buildRulesToExcludeFromDex,
originalParams.getPathRelativizer(),
originalParams.getRuleKeyBuilderFactory());
preDexDeps = graphEnhancer.createDepsForPreDexing(ruleResolver);
} else {
preDexDeps = ImmutableSet.of();
}
boolean allowNonExistentRule =
false;
// Must create a new BuildRuleParams to supersede the one built by
// createBuildRuleParams(ruleResolver).
ImmutableSortedSet<BuildRule> totalDeps = ImmutableSortedSet.<BuildRule>naturalOrder()
.addAll(originalDeps)
.addAll(preDexDeps)
.build();
BuildRuleParams finalParams = new BuildRuleParams(getBuildTarget(),
totalDeps,
originalParams.getVisibilityPatterns(),
originalParams.getPathRelativizer(),
originalParams.getRuleKeyBuilderFactory());
return new AndroidBinaryRule(
finalParams,
manifest,
target,
getBuildTargetsAsBuildRules(ruleResolver, classpathDeps.build()),
(Keystore)keystore,
packageType,
/* buildRulesToExcludeFromDex */ getBuildTargetsAsBuildRules(ruleResolver,
buildRulesToExcludeFromDex,
allowNonExistentRule),
dexSplitMode,
useAndroidProguardConfigWithOptimizations,
proguardConfig,
resourceCompressionMode,
primaryDexSubstrings.build(),
linearAllocHardLimit,
primaryDexClassesFile,
resourceFilter,
cpuFilters.build(),
preDexDeps,
getBuildTargetsAsBuildRules(ruleResolver, preprocessJavaClassesDeps.build()),
preprocessJavaClassesBash);
}