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,