mirror of
https://github.com/revanced/smali.git
synced 2025-04-29 22:24:26 +02:00
fix DexWriter for hiddenapi section
This commit is contained in:
parent
891703dff2
commit
81bd303a80
@ -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,
|
protected class InternalEncodedValueWriter extends EncodedValueWriter<StringKey, TypeKey, FieldRefKey, MethodRefKey,
|
||||||
AnnotationElement, ProtoRefKey, MethodHandleKey, EncodedValue> {
|
AnnotationElement, ProtoRefKey, MethodHandleKey, EncodedValue> {
|
||||||
private InternalEncodedValueWriter(@Nonnull DexDataWriter writer) {
|
private InternalEncodedValueWriter(@Nonnull DexDataWriter writer) {
|
||||||
@ -491,11 +499,11 @@ public abstract class DexWriter<
|
|||||||
classIndexSectionOffset = indexWriter.getPosition();
|
classIndexSectionOffset = indexWriter.getPosition();
|
||||||
classDataSectionOffset = offsetWriter.getPosition();
|
classDataSectionOffset = offsetWriter.getPosition();
|
||||||
|
|
||||||
List<Map.Entry<? extends ClassKey, Integer>> classEntries = Lists.newArrayList(classSection.getItems());
|
List<Map.Entry<? extends ClassKey, Integer>> classEntriesKeySorted = Lists.newArrayList(classSection.getItems());
|
||||||
Collections.sort(classEntries, DexWriter.<ClassKey>comparableKeyComparator());
|
Collections.sort(classEntriesKeySorted, DexWriter.<ClassKey>comparableKeyComparator());
|
||||||
|
|
||||||
int index = 0;
|
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);
|
index = writeClass(indexWriter, offsetWriter, index, key);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -503,12 +511,15 @@ public abstract class DexWriter<
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
offsetWriter.align();
|
||||||
hiddenApiRestrictionsOffset = offsetWriter.getPosition();
|
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 {
|
try {
|
||||||
for (Map.Entry<? extends ClassKey, Integer> key : classEntries) {
|
for (Map.Entry<? extends ClassKey, Integer> key : classEntriesValueSorted) {
|
||||||
|
|
||||||
for (FieldKey fieldKey : classSection.getSortedStaticFields(key.getKey())) {
|
for (FieldKey fieldKey : classSection.getSortedStaticFields(key.getKey())) {
|
||||||
restrictionsWriter.writeRestriction(classSection.getFieldHiddenApiRestrictions(fieldKey));
|
restrictionsWriter.writeRestriction(classSection.getFieldHiddenApiRestrictions(fieldKey));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user