Specify --no-optimize to dx for APK debug builds.

Test Plan: Sandcastle builds.
diff --git a/src/com/facebook/buck/android/AndroidBinaryRule.java b/src/com/facebook/buck/android/AndroidBinaryRule.java
index ec26fb9..c2450b9 100644
--- a/src/com/facebook/buck/android/AndroidBinaryRule.java
+++ b/src/com/facebook/buck/android/AndroidBinaryRule.java
@@ -1082,7 +1082,8 @@
         secondaryInputsDir,
         successDir,
         Optional.<Integer>absent(),
-        dexSplitMode.getDexStore());
+        dexSplitMode.getDexStore(),
+        /* optimize */ PackageType.RELEASE.equals(packageType));
     commands.add(smartDexingCommand);
   }
 
diff --git a/src/com/facebook/buck/android/DxStep.java b/src/com/facebook/buck/android/DxStep.java
index 23866bf..de51a3d 100644
--- a/src/com/facebook/buck/android/DxStep.java
+++ b/src/com/facebook/buck/android/DxStep.java
@@ -32,15 +32,18 @@
 
   private final String outputDexFile;
   private final Set<Path> filesToDex;
+  private final boolean optimize;
 
   /**
    * @param outputDexFile path to the file where the generated classes.dex should go
    * @param filesToDex each element in this set is a path to a .class file, a zip file of .class
    *     files, or a directory of .class files
+   * @param optimize If false, specify {@code --no-optimize}.
    */
-  public DxStep(String outputDexFile, Iterable<Path> filesToDex) {
+  public DxStep(String outputDexFile, Iterable<Path> filesToDex, boolean optimize) {
     this.outputDexFile = Preconditions.checkNotNull(outputDexFile);
     this.filesToDex = ImmutableSet.copyOf(filesToDex);
+    this.optimize = optimize;
   }
 
   @Override
@@ -56,6 +59,10 @@
       builder.add("--statistics");
     }
 
+    if (!optimize) {
+      builder.add("--no-optimize");
+    }
+
     // verbose flag, if appropriate.
     if (context.getVerbosity().shouldUseVerbosityFlagIfAvailable()) {
       builder.add("--verbose");
diff --git a/src/com/facebook/buck/android/SmartDexingStep.java b/src/com/facebook/buck/android/SmartDexingStep.java
index fc41a9d..7f389d5 100644
--- a/src/com/facebook/buck/android/SmartDexingStep.java
+++ b/src/com/facebook/buck/android/SmartDexingStep.java
@@ -72,6 +72,7 @@
   private final Path successDir;
   private final Optional<Integer> numThreads;
   private final DexStore dexStore;
+  private final boolean optimizeDex;
   private ListeningExecutorService dxExecutor;
 
   /** Lazily initialized.  See {@link InputResolver#createOutputToInputs(DexStore)}. */
@@ -99,7 +100,8 @@
       Optional<String> secondaryInputsDir,
       Path successDir,
       Optional<Integer> numThreads,
-      DexStore dexStore) {
+      DexStore dexStore,
+      boolean optimizeDex) {
     this.inputResolver = new InputResolver(primaryOutputPath,
         primaryInputsToDex,
         secondaryOutputDir,
@@ -107,6 +109,7 @@
     this.successDir = Preconditions.checkNotNull(successDir);
     this.numThreads = Preconditions.checkNotNull(numThreads);
     this.dexStore = Preconditions.checkNotNull(dexStore);
+    this.optimizeDex = optimizeDex;
   }
 
   @VisibleForTesting
@@ -241,7 +244,8 @@
             }
           })),
           outputFile.getPath(),
-          context.getProjectFilesystem().resolve(successDir.resolve(outputFile.getName()))));
+          context.getProjectFilesystem().resolve(successDir.resolve(outputFile.getName())),
+          optimizeDex));
     }
 
     ImmutableList.Builder<Step> commands = ImmutableList.builder();
@@ -340,16 +344,19 @@
     private final Set<Path> srcs;
     private final String outputPath;
     private final Path outputHashPath;
+    private final boolean optimizeDex;
     private String newInputsHash;
 
     public DxPseudoRule(ExecutionContext context,
         Set<Path> srcs,
         String outputPath,
-        Path outputHashPath) {
+        Path outputHashPath,
+        boolean optimizeDex) {
       this.context = Preconditions.checkNotNull(context);
       this.srcs = ImmutableSet.copyOf(srcs);
       this.outputPath = Preconditions.checkNotNull(outputPath);
       this.outputHashPath = Preconditions.checkNotNull(outputHashPath);
+      this.optimizeDex = optimizeDex;
     }
 
     /**
@@ -435,7 +442,7 @@
       List<Step> steps = Lists.newArrayList();
       if (useXzCompression()) {
         String tempDexJarOutput = outputPath.replaceAll("\\.jar\\.xz$", ".tmp.jar");
-        steps.add(new DxStep(tempDexJarOutput, srcs));
+        steps.add(new DxStep(tempDexJarOutput, srcs, optimizeDex));
         // We need to make sure classes.dex is STOREd in the .dex.jar file, otherwise .XZ
         // compression won't be effective.
         String repackedJar = outputPath.replaceAll("\\.xz$", "");
@@ -448,7 +455,7 @@
         steps.add(new RmStep(tempDexJarOutput, true));
         steps.add(new XzStep(repackedJar));
       } else {
-        steps.add(new DxStep(outputPath, srcs));
+        steps.add(new DxStep(outputPath, srcs, optimizeDex));
       }
       steps.add(new WriteFileStep(newInputsHash, outputHashPath));
 
diff --git a/test/com/facebook/buck/android/SmartDexingStepTest.java b/test/com/facebook/buck/android/SmartDexingStepTest.java
index 02a13f6..a02d977 100644
--- a/test/com/facebook/buck/android/SmartDexingStepTest.java
+++ b/test/com/facebook/buck/android/SmartDexingStepTest.java
@@ -118,8 +118,11 @@
     Path outputHashFile = new File(tmpDir.getRoot(), "out.dex.hash").toPath();
     Files.write("dummy", outputHashFile.toFile(), Charsets.UTF_8);
 
-    DxPseudoRule rule = new DxPseudoRule(context, ImmutableSet.of(testIn.toPath()),
-        outputFile.getPath(), outputHashFile);
+    DxPseudoRule rule = new DxPseudoRule(context,
+        ImmutableSet.of(testIn.toPath()),
+        outputFile.getPath(),
+        outputHashFile,
+        /* optimizeDex */ false);
     assertFalse("'dummy' is not a matching input hash", rule.checkIsCached());
 
     // Write the real hash into the output hash file and ensure that checkIsCached now