summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--jack/src/com/android/jack/backend/dex/MinimalMultiDexWritingTool.java6
-rw-r--r--jack/src/com/android/jack/backend/dex/StandardMultiDexWritingTool.java6
-rw-r--r--jack/tests/com/android/jack/multidex/MultiDexTests.java39
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;
}