diff options
Diffstat (limited to 'dx/src/com/android/dx/merge/DexMerger.java')
-rw-r--r-- | dx/src/com/android/dx/merge/DexMerger.java | 26 |
1 files changed, 19 insertions, 7 deletions
diff --git a/dx/src/com/android/dx/merge/DexMerger.java b/dx/src/com/android/dx/merge/DexMerger.java index b8071176a..1ba876aef 100644 --- a/dx/src/com/android/dx/merge/DexMerger.java +++ b/dx/src/com/android/dx/merge/DexMerger.java @@ -33,7 +33,9 @@ import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; +import java.util.HashSet; import java.util.List; +import java.util.Set; /** * Combine two dex files into one. @@ -595,6 +597,8 @@ public final class DexMerger { transformAnnotationSets(dexB, bIndexMap); transformAnnotationDirectories(dexA, aIndexMap); transformAnnotationDirectories(dexB, bIndexMap); + transformStaticValues(dexA, aIndexMap); + transformStaticValues(dexB, bIndexMap); } private void transformAnnotationSets(DexBuffer in, IndexMap indexMap) { @@ -617,6 +621,16 @@ public final class DexMerger { } } + private void transformStaticValues(DexBuffer in, IndexMap indexMap) { + TableOfContents.Section section = in.getTableOfContents().encodedArrays; + if (section.exists()) { + DexBuffer.Section staticValuesIn = in.open(section.off); + for (int i = 0; i < section.size; i++) { + transformStaticValues(staticValuesIn, indexMap); + } + } + } + /** * Reads a class_def_item beginning at {@code in} and writes the index and * data. @@ -644,13 +658,7 @@ public final class DexMerger { } int staticValuesOff = classDef.getStaticValuesOffset(); - if (staticValuesOff == 0) { - idsDefsOut.writeInt(0); - } else { - DexBuffer.Section staticValuesIn = in.open(staticValuesOff); - idsDefsOut.writeInt(encodedArrayOut.getPosition()); - transformStaticValues(staticValuesIn, indexMap); - } + idsDefsOut.writeInt(indexMap.adjustStaticValues(staticValuesOff)); } /** @@ -839,6 +847,7 @@ public final class DexMerger { private void transformStaticValues(DexBuffer.Section in, IndexMap indexMap) { contentsOut.encodedArrays.size++; + indexMap.putStaticValuesOffset(in.getPosition(), encodedArrayOut.getPosition()); indexMap.adjustEncodedArray(in.readEncodedArray()).writeTo(encodedArrayOut); } @@ -914,6 +923,9 @@ public final class DexMerger { // at most 1/3 of the bytes in an encoding arrays section are uleb/sleb annotation += (int) Math.ceil(contents.annotations.byteCount * 1.34); } + + typeList = DexBuffer.fourByteAlign(typeList); + code = DexBuffer.fourByteAlign(code); } public void minusWaste(DexMerger dexMerger) { |