diff options
3 files changed, 46 insertions, 5 deletions
diff --git a/jack/src/com/android/jack/backend/dex/MinimalMultiDexWritingTool.java b/jack/src/com/android/jack/backend/dex/MinimalMultiDexWritingTool.java index 89b9cf7..c61aadb 100644 --- a/jack/src/com/android/jack/backend/dex/MinimalMultiDexWritingTool.java +++ b/jack/src/com/android/jack/backend/dex/MinimalMultiDexWritingTool.java @@ -66,6 +66,12 @@ public class MinimalMultiDexWritingTool extends DexWritingTool { finishMerge(merger, outputDex); outputDex = getOutputDex(outputVDir, dexCount++); merger = new JackMerger(createDexFile()); + try { + mergeDex(merger, currentDex); + } catch (MergeOverflow e1) { + // This should not happen, the type is not too big, we've just read it from a dex. + throw new AssertionError(); + } } } diff --git a/jack/src/com/android/jack/backend/dex/StandardMultiDexWritingTool.java b/jack/src/com/android/jack/backend/dex/StandardMultiDexWritingTool.java index 86c0295..08361db 100644 --- a/jack/src/com/android/jack/backend/dex/StandardMultiDexWritingTool.java +++ b/jack/src/com/android/jack/backend/dex/StandardMultiDexWritingTool.java @@ -63,6 +63,12 @@ public class StandardMultiDexWritingTool extends DexWritingTool { finishMerge(merger, outputDex); outputDex = getOutputDex(outputVDir, dexCount++); merger = new JackMerger(createDexFile()); + try { + mergeDex(merger, currentDex); + } catch (MergeOverflow e1) { + // This should not happen, the type is not too big, we've just read it from a dex. + throw new AssertionError(); + } } } diff --git a/jack/tests/com/android/jack/multidex/MultiDexTests.java b/jack/tests/com/android/jack/multidex/MultiDexTests.java index 0202116..8f6615b 100644 --- a/jack/tests/com/android/jack/multidex/MultiDexTests.java +++ b/jack/tests/com/android/jack/multidex/MultiDexTests.java @@ -29,9 +29,12 @@ import junit.framework.Assert; import org.junit.BeforeClass; import org.junit.Test; +import java.io.BufferedReader; import java.io.File; +import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; +import java.io.InputStreamReader; import javax.annotation.Nonnull; @@ -121,11 +124,12 @@ public class MultiDexTests { return app1Options; } - private File getListingOfDex(File out) throws IOException, FileNotFoundException { + private File getListingOfDex(@Nonnull File dex) throws IOException, FileNotFoundException { + assert dex.isFile(); ExecuteFile exec = new ExecuteFile(new String[]{ "bash", "-c", "dexdump " - + out.getAbsolutePath() + + + dex.getAbsolutePath() + " | grep \" Class descriptor : \" | cut -d\\' -f2 | sed -e 's/$/:/'"}); File outList = TestTools.createTempFile("types", ".txt"); @@ -135,6 +139,26 @@ public class MultiDexTests { return outList; } + private int getTypeCountInDex(@Nonnull File dex) throws IOException, FileNotFoundException { + assert dex.isFile(); + ExecuteFile exec = + new ExecuteFile(new String[]{ + "bash", "-c", "dexdump " + + dex.getAbsolutePath() + + " | grep \" Class descriptor : \" | wc -l"}); + + File out = TestTools.createTempFile("typeNumber", ".txt"); + + exec.setOut(out); + Assert.assertTrue(exec.run()); + BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(out))); + try { + return Integer.parseInt(reader.readLine().trim()); + } finally { + reader.close(); + } + } + @Nonnull private static File prepareFrameworks() throws IOException, Exception { File frameworks = TestTools.createTempDir("frameworks", ""); @@ -177,9 +201,14 @@ public class MultiDexTests { + File.pathSeparator + annotations.getPath() + File.pathSeparator + frameworks.getPath() + File.pathSeparator + library.getPath(), out, false); - Assert.assertTrue(new File(out, "classes.dex").exists()); - Assert.assertTrue(new File(out, "classes2.dex").exists()); - Assert.assertFalse(new File(out, "classes3.dex").exists()); + File classesDex = new File(out, "classes.dex"); + Assert.assertTrue(classesDex.exists()); + File classes2Dex = new File(out, "classes2.dex"); + Assert.assertTrue(classes2Dex.exists()); + File classes3Dex = new File(out, "classes3.dex"); + Assert.assertFalse(classes3Dex.exists()); + int totalTypeNumber = getTypeCountInDex(classesDex) + getTypeCountInDex(classes2Dex); + Assert.assertEquals(100, totalTypeNumber); return; } |