in src/com/facebook/buck/android/AndroidBinaryBuildRuleFactory.java [38:141]
protected void amendBuilder(AndroidBinaryRule.Builder builder,
BuildRuleFactoryParams params) throws NoSuchBuildTargetException {
// manifest
builder.setManifest(params.getRequiredSourcePath("manifest", builder));
// target
String target = params.getRequiredStringAttribute("target");
builder.setTarget(target);
// keystore
BuildTarget keystore = params.getRequiredBuildTarget("keystore");
builder.setKeystore(keystore);
// classpath_deps
for (String classpathDep : params.getOptionalListAttribute("classpath_deps")) {
BuildTarget classpathDepTarget = params.resolveBuildTarget(classpathDep);
builder.addClasspathDep(classpathDepTarget);
}
// package_type
// Note that it is not required for the user to supply this attribute, but buck.py should
// supply 'debug' if the user has not supplied a value.
String packageType = params.getRequiredStringAttribute("package_type");
builder.setPackageType(packageType);
// no_dx
for (String noDx : params.getOptionalListAttribute("no_dx")) {
BuildTarget buildTarget = params.resolveBuildTarget(noDx);
builder.addBuildRuleToExcludeFromDex(buildTarget);
}
// use_split_dex
boolean useSplitDex = params.getBooleanAttribute("use_split_dex");
ZipSplitter.DexSplitStrategy dexSplitStrategy = params.getBooleanAttribute("minimize_primary_dex_size")
? ZipSplitter.DexSplitStrategy.MINIMIZE_PRIMARY_DEX_SIZE
: ZipSplitter.DexSplitStrategy.MAXIMIZE_PRIMARY_DEX_SIZE;
// disable_pre_dex
builder.setDisablePreDex(params.getBooleanAttribute("disable_pre_dex"));
// dex_compression
DexStore dexStore =
"xz".equals(params.getRequiredStringAttribute("dex_compression")) ?
DexStore.XZ :
DexStore.JAR;
// use_linear_alloc_split_dex
boolean useLinearAllocSplitDex = params.getBooleanAttribute("use_linear_alloc_split_dex");
builder.setDexSplitMode(new DexSplitMode(
useSplitDex,
dexSplitStrategy,
dexStore,
useLinearAllocSplitDex));
// use_android_proguard_config_with_optimizations
boolean useAndroidProguardConfigWithOptimizations =
params.getBooleanAttribute("use_android_proguard_config_with_optimizations");
builder.setUseAndroidProguardConfigWithOptimizations(useAndroidProguardConfigWithOptimizations);
// proguard_config
Optional<SourcePath> proguardConfig = params.getOptionalSourcePath("proguard_config", builder);
builder.setProguardConfig(proguardConfig);
// resource_compression
Optional<String> resourceCompression = params.getOptionalStringAttribute("resource_compression");
if (resourceCompression.isPresent()) {
builder.setResourceCompressionMode(resourceCompression.get());
}
// primary_dex_substrings
List<String> primaryDexSubstrings = params.getOptionalListAttribute("primary_dex_substrings");
builder.addPrimaryDexSubstrings(primaryDexSubstrings);
// linear_alloc_hard_limit
long linearAllocHardLimit = params.getRequiredLongAttribute("linear_alloc_hard_limit");
builder.setLinearAllocHardLimit(linearAllocHardLimit);
// primary_dex_classes_file
Optional<SourcePath> primaryDexClassesFile = params.getOptionalSourcePath(
"primary_dex_classes_file", builder);
builder.setPrimaryDexClassesFile(primaryDexClassesFile);
// resource_filter
List<String> resourceFilter = params.getOptionalListAttribute("resource_filter");
builder.setResourceFilter(new FilterResourcesStep.ResourceFilter(resourceFilter));
// cpu_filters
List<String> cpuFilters = params.getOptionalListAttribute("cpu_filters");
for (String filter: cpuFilters) {
builder.addCpuFilter(filter);
}
// preprocess_java_classes_deps
for (String dep : params.getOptionalListAttribute("preprocess_java_classes_deps")) {
BuildTarget buildTarget = params.resolveBuildTarget(dep);
builder.addPreprocessJavaClassesDep(buildTarget);
}
// preprocess_java_classes_bash
builder.setPreprocessJavaClassesBash(params.getOptionalStringAttribute(
"preprocess_java_classes_bash"));
}