diff --git a/dexlib2/src/main/java/org/jf/dexlib2/writer/DexWriter.java b/dexlib2/src/main/java/org/jf/dexlib2/writer/DexWriter.java index 60a94bcb6..c7c9f6352 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/writer/DexWriter.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/writer/DexWriter.java @@ -221,6 +221,14 @@ public int compare(Entry o1, Entry> Comparator> comparableValueComparator() { + return new Comparator>() { + @Override public int compare(Entry o1, Entry o2) { + return o1.getValue().compareTo(o2.getValue()); + } + }; + } + protected class InternalEncodedValueWriter extends EncodedValueWriter { private InternalEncodedValueWriter(@Nonnull DexDataWriter writer) { @@ -491,11 +499,11 @@ private void writeClasses(@Nonnull DexDataStore dataStore, @Nonnull DexDataWrite classIndexSectionOffset = indexWriter.getPosition(); classDataSectionOffset = offsetWriter.getPosition(); - List> classEntries = Lists.newArrayList(classSection.getItems()); - Collections.sort(classEntries, DexWriter.comparableKeyComparator()); + List> classEntriesKeySorted = Lists.newArrayList(classSection.getItems()); + Collections.sort(classEntriesKeySorted, DexWriter.comparableKeyComparator()); int index = 0; - for (Map.Entry key: classEntries) { + for (Map.Entry key: classEntriesKeySorted) { index = writeClass(indexWriter, offsetWriter, index, key); } @@ -503,12 +511,15 @@ private void writeClasses(@Nonnull DexDataStore dataStore, @Nonnull DexDataWrite return; } + offsetWriter.align(); hiddenApiRestrictionsOffset = offsetWriter.getPosition(); - RestrictionsWriter restrictionsWriter = new RestrictionsWriter(dataStore, offsetWriter, classEntries.size()); + List> classEntriesValueSorted = Lists.newArrayList(classSection.getItems()); + Collections.sort(classEntriesValueSorted, DexWriter.comparableValueComparator()); + RestrictionsWriter restrictionsWriter = new RestrictionsWriter(dataStore, offsetWriter, classEntriesValueSorted.size()); try { - for (Map.Entry key : classEntries) { + for (Map.Entry key : classEntriesValueSorted) { for (FieldKey fieldKey : classSection.getSortedStaticFields(key.getKey())) { restrictionsWriter.writeRestriction(classSection.getFieldHiddenApiRestrictions(fieldKey));