aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Roberts <you@example.com>2021-05-13 01:40:45 -0400
committerBen Gruver <bgruv@google.com>2022-03-08 14:50:22 -0600
commit81bd303a80b4413d4720243b2c80fb619d89bec8 (patch)
treeef3d013172121eca43354436ee3c08e48b08dea8
parent891703dff20dddd5a3b421588a66c9c6fd989516 (diff)
downloadgoogle-smali-81bd303a80b4413d4720243b2c80fb619d89bec8.tar.gz
fix DexWriter for hiddenapi section
-rw-r--r--dexlib2/src/main/java/org/jf/dexlib2/writer/DexWriter.java21
1 files changed, 16 insertions, 5 deletions
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 60a94bcb..c7c9f635 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 abstract class DexWriter<
};
}
+ 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 @@ public abstract class DexWriter<
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 @@ public abstract class DexWriter<
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));