fix DexWriter for hiddenapi section
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 60a94bc..c7c9f63 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 @@
         };
     }
 
+    private static <T extends Comparable<? super T>> Comparator<Entry<?, ? extends T>> comparableValueComparator() {
+        return new Comparator<Entry<?, ? extends T>>() {
+            @Override public int compare(Entry<?, ? extends T> o1, Entry<?, ? extends T> o2) {
+                return o1.getValue().compareTo(o2.getValue());
+            }
+        };
+    }
+
     protected class InternalEncodedValueWriter extends EncodedValueWriter<StringKey, TypeKey, FieldRefKey, MethodRefKey,
             AnnotationElement, ProtoRefKey, MethodHandleKey, EncodedValue> {
         private InternalEncodedValueWriter(@Nonnull DexDataWriter writer) {
@@ -491,11 +499,11 @@
         classIndexSectionOffset = indexWriter.getPosition();
         classDataSectionOffset = offsetWriter.getPosition();
 
-        List<Map.Entry<? extends ClassKey, Integer>> classEntries = Lists.newArrayList(classSection.getItems());
-        Collections.sort(classEntries, DexWriter.<ClassKey>comparableKeyComparator());
+        List<Map.Entry<? extends ClassKey, Integer>> classEntriesKeySorted = Lists.newArrayList(classSection.getItems());
+        Collections.sort(classEntriesKeySorted, DexWriter.<ClassKey>comparableKeyComparator());
 
         int index = 0;
-        for (Map.Entry<? extends ClassKey, Integer> key: classEntries) {
+        for (Map.Entry<? extends ClassKey, Integer> key: classEntriesKeySorted) {
             index = writeClass(indexWriter, offsetWriter, index, key);
         }
 
@@ -503,12 +511,15 @@
             return;
         }
 
+        offsetWriter.align();
         hiddenApiRestrictionsOffset = offsetWriter.getPosition();
 
-        RestrictionsWriter restrictionsWriter = new RestrictionsWriter(dataStore, offsetWriter, classEntries.size());
+        List<Map.Entry<? extends ClassKey, Integer>> classEntriesValueSorted = Lists.newArrayList(classSection.getItems());
+        Collections.sort(classEntriesValueSorted, DexWriter.comparableValueComparator());
+        RestrictionsWriter restrictionsWriter = new RestrictionsWriter(dataStore, offsetWriter, classEntriesValueSorted.size());
 
         try {
-            for (Map.Entry<? extends ClassKey, Integer> key : classEntries) {
+            for (Map.Entry<? extends ClassKey, Integer> key : classEntriesValueSorted) {
 
                 for (FieldKey fieldKey : classSection.getSortedStaticFields(key.getKey())) {
                     restrictionsWriter.writeRestriction(classSection.getFieldHiddenApiRestrictions(fieldKey));