diff options
-rw-r--r-- | dx/src/com/android/dx/cf/direct/ClassPathOpener.java | 34 | ||||
-rw-r--r-- | dx/src/com/android/dx/command/DxConsole.java | 13 | ||||
-rw-r--r-- | dx/src/com/android/dx/command/Main.java | 2 | ||||
-rw-r--r-- | dx/src/com/android/dx/command/dexer/Main.java | 12 |
4 files changed, 42 insertions, 19 deletions
diff --git a/dx/src/com/android/dx/cf/direct/ClassPathOpener.java b/dx/src/com/android/dx/cf/direct/ClassPathOpener.java index c9fe275cd..26fbca029 100644 --- a/dx/src/com/android/dx/cf/direct/ClassPathOpener.java +++ b/dx/src/com/android/dx/cf/direct/ClassPathOpener.java @@ -242,9 +242,6 @@ public class ClassPathOpener { */ private boolean processArchive(File file) throws IOException { ZipFile zip = new ZipFile(file); - ByteArrayOutputStream baos = new ByteArrayOutputStream(40000); - byte[] buf = new byte[20000]; - boolean any = false; ArrayList<? extends java.util.zip.ZipEntry> entriesList = Collections.list(zip.entries()); @@ -259,28 +256,31 @@ public class ClassPathOpener { consumer.onProcessArchiveStart(file); + ByteArrayOutputStream baos = new ByteArrayOutputStream(40000); + byte[] buf = new byte[20000]; + boolean any = false; + for (ZipEntry one : entriesList) { - if (one.isDirectory()) { - continue; - } + final boolean isDirectory = one.isDirectory(); String path = one.getName(); if (filter.accept(path)) { - InputStream in = zip.getInputStream(one); - - baos.reset(); - for (;;) { - int amt = in.read(buf); - if (amt < 0) { - break; + final byte[] bytes; + if (!isDirectory) { + InputStream in = zip.getInputStream(one); + + baos.reset(); + int read; + while ((read = in.read(buf)) != -1) { + baos.write(buf, 0, read); } - baos.write(buf, 0, amt); + in.close(); + bytes = baos.toByteArray(); + } else { + bytes = new byte[0]; } - in.close(); - - byte[] bytes = baos.toByteArray(); any |= consumer.processFileBytes(path, one.getTime(), bytes); } } diff --git a/dx/src/com/android/dx/command/DxConsole.java b/dx/src/com/android/dx/command/DxConsole.java index 9ce9836ef..919de8c80 100644 --- a/dx/src/com/android/dx/command/DxConsole.java +++ b/dx/src/com/android/dx/command/DxConsole.java @@ -16,6 +16,8 @@ package com.android.dx.command; +import java.io.IOException; +import java.io.OutputStream; import java.io.PrintStream; /** @@ -34,4 +36,15 @@ public class DxConsole { * Error output stream. Links to {@code System.err} by default. */ public static PrintStream err = System.err; + + /** + * Output stream which prints to nowhere. + */ + public static final PrintStream noop = new PrintStream(new OutputStream() { + + @Override + public void write(int b) throws IOException { + // noop + } + }); } diff --git a/dx/src/com/android/dx/command/Main.java b/dx/src/com/android/dx/command/Main.java index 9834987e5..a0be5bd51 100644 --- a/dx/src/com/android/dx/command/Main.java +++ b/dx/src/com/android/dx/command/Main.java @@ -33,7 +33,7 @@ public class Main { "[--dump-width=<n>]\n" + " [--dump-method=<name>[*]] [--verbose-dump] [--no-files] " + "[--core-library]\n" + - " [--num-threads=<n>] [--incremental] [--force-jumbo]\n" + + " [--num-threads=<n>] [--incremental] [--force-jumbo] [--no-warning]\n" + " [--multi-dex [--main-dex-list=<file> [--minimal-main-dex]]\n" + " [--input-list=<file>]\n" + " [<file>.class | <file>.{zip,jar,apk} | <directory>] ...\n" + diff --git a/dx/src/com/android/dx/command/dexer/Main.java b/dx/src/com/android/dx/command/dexer/Main.java index 84baa935b..06ffcedef 100644 --- a/dx/src/com/android/dx/command/dexer/Main.java +++ b/dx/src/com/android/dx/command/dexer/Main.java @@ -1204,6 +1204,9 @@ public class Main { /** whether to run in debug mode */ public boolean debug = false; + /** whether to emit warning messages */ + public boolean warnings = true; + /** whether to emit high-level verbose human-oriented output */ public boolean verbose = false; @@ -1414,6 +1417,8 @@ public class Main { while(parser.getNext()) { if (parser.isArg("--debug")) { debug = true; + } else if (parser.isArg("--no-warning")) { + warnings = false; } else if (parser.isArg("--verbose")) { verbose = true; } else if (parser.isArg("--verbose-dump")) { @@ -1585,7 +1590,12 @@ public class Main { cfOptions.optimizeListFile = optimizeListFile; cfOptions.dontOptimizeListFile = dontOptimizeListFile; cfOptions.statistics = statistics; - cfOptions.warn = DxConsole.err; + + if (warnings) { + cfOptions.warn = DxConsole.err; + } else { + cfOptions.warn = DxConsole.noop; + } dexOptions = new DexOptions(); dexOptions.forceJumbo = forceJumbo; |