Provide disable_pre_dex option for android_binary().
Summary:
This gives us an escape hatch to disable pre-dexing on an individual
android_binary() rule. The plan is to improve pre-dexing so that it
is clearly a win so we can ultimately remove this option.
diff --git a/src/com/facebook/buck/android/AndroidBinaryBuildRuleFactory.java b/src/com/facebook/buck/android/AndroidBinaryBuildRuleFactory.java
index 4fcfb52..3a20be3 100644
--- a/src/com/facebook/buck/android/AndroidBinaryBuildRuleFactory.java
+++ b/src/com/facebook/buck/android/AndroidBinaryBuildRuleFactory.java
@@ -18,10 +18,10 @@
import com.facebook.buck.dalvik.ZipSplitter;
import com.facebook.buck.model.BuildTarget;
-import com.facebook.buck.rules.AbstractBuildRuleFactory;
-import com.facebook.buck.rules.BuildRuleFactoryParams;
import com.facebook.buck.parser.NoSuchBuildTargetException;
import com.facebook.buck.rules.AbstractBuildRuleBuilderParams;
+import com.facebook.buck.rules.AbstractBuildRuleFactory;
+import com.facebook.buck.rules.BuildRuleFactoryParams;
import com.facebook.buck.rules.SourcePath;
import com.google.common.base.Optional;
@@ -75,6 +75,9 @@
? 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")) ?
diff --git a/src/com/facebook/buck/android/AndroidBinaryRule.java b/src/com/facebook/buck/android/AndroidBinaryRule.java
index d75ac36..cbc2f67 100644
--- a/src/com/facebook/buck/android/AndroidBinaryRule.java
+++ b/src/com/facebook/buck/android/AndroidBinaryRule.java
@@ -1189,6 +1189,7 @@
private BuildTarget keystoreTarget;
private PackageType packageType = DEFAULT_PACKAGE_TYPE;
private Set<BuildTarget> buildRulesToExcludeFromDex = Sets.newHashSet();
+ private boolean disablePreDex = false;
private DexSplitMode dexSplitMode = new DexSplitMode(
/* shouldSplitDex */ false,
ZipSplitter.DexSplitStrategy.MAXIMIZE_PRIMARY_DEX_SIZE,
@@ -1227,7 +1228,8 @@
BuildRuleParams originalParams = createBuildRuleParams(ruleResolver);
ImmutableSortedSet<BuildRule> originalDeps = originalParams.getDeps();
ImmutableSet<DexProducedFromJavaLibraryThatContainsClassFiles> preDexDeps;
- if (PackageType.DEBUG.equals(packageType)
+ if (!disablePreDex
+ && PackageType.DEBUG.equals(packageType)
&& !dexSplitMode.isShouldSplitDex() // TODO(mbolin): Support predex for split dex.
&& !preprocessJavaClassesBash.isPresent() // TODO(mbolin): Support predex post-preprocess.
) {
@@ -1397,6 +1399,11 @@
return this;
}
+ public Builder setDisablePreDex(boolean disablePreDex) {
+ this.disablePreDex = disablePreDex;
+ return this;
+ }
+
public Builder setDexSplitMode(DexSplitMode dexSplitMode) {
this.dexSplitMode = dexSplitMode;
return this;
diff --git a/src/com/facebook/buck/parser/buck.py b/src/com/facebook/buck/parser/buck.py
index 4217007..44e9f3c 100644
--- a/src/com/facebook/buck/parser/buck.py
+++ b/src/com/facebook/buck/parser/buck.py
@@ -411,6 +411,7 @@
use_split_dex=False,
use_linear_alloc_split_dex=False,
minimize_primary_dex_size=False,
+ disable_pre_dex=False,
dex_compression='jar',
use_android_proguard_config_with_optimizations=False,
proguard_config=None,
@@ -438,6 +439,7 @@
'use_split_dex': use_split_dex,
'use_linear_alloc_split_dex': use_linear_alloc_split_dex,
'minimize_primary_dex_size': minimize_primary_dex_size,
+ 'disable_pre_dex' : disable_pre_dex,
'dex_compression': dex_compression,
'use_android_proguard_config_with_optimizations':
use_android_proguard_config_with_optimizations,