sort package directories

This commit is contained in:
REAndroid 2023-01-05 13:03:46 -05:00
parent caa721b90f
commit ee2bd9108e
3 changed files with 21 additions and 3 deletions

View File

@ -22,6 +22,17 @@ package com.reandroid.lib.apk.xmlencoder;
import java.util.regex.Pattern; import java.util.regex.Pattern;
public class EncodeUtil { public class EncodeUtil {
public static void sortPublicXml(List<File> fileList){
Comparator<File> cmp=new Comparator<File>() {
@Override
public int compare(File f1, File f2) {
String n1=f1.getAbsolutePath();
String n2=f2.getAbsolutePath();
return n1.compareTo(n2);
}
};
fileList.sort(cmp);
}
public static void sortValuesXml(List<File> fileList){ public static void sortValuesXml(List<File> fileList){
Comparator<File> cmp=new Comparator<File>() { Comparator<File> cmp=new Comparator<File>() {
@Override @Override

View File

@ -189,7 +189,7 @@
continue; continue;
} }
xmlFiles.addAll( xmlFiles.addAll(
ApkUtil.recursiveFiles(mainDir, ApkUtil.FILE_NAME_PUBLIC_XML)); ApkUtil.recursiveFiles(dir, ApkUtil.FILE_NAME_PUBLIC_XML));
} }
List<File> results = new ArrayList<>(); List<File> results = new ArrayList<>();
for(File file:xmlFiles){ for(File file:xmlFiles){
@ -197,6 +197,7 @@
results.add(file); results.add(file);
} }
} }
EncodeUtil.sortPublicXml(results);
return results; return results;
} }

View File

@ -17,6 +17,7 @@ package com.reandroid.lib.apk.xmlencoder;
import com.reandroid.lib.arsc.chunk.PackageBlock; import com.reandroid.lib.arsc.chunk.PackageBlock;
import com.reandroid.lib.arsc.chunk.TypeBlock; import com.reandroid.lib.arsc.chunk.TypeBlock;
import com.reandroid.lib.arsc.container.SpecTypePair;
import com.reandroid.lib.arsc.decoder.ValueDecoder; import com.reandroid.lib.arsc.decoder.ValueDecoder;
import com.reandroid.lib.arsc.item.SpecString; import com.reandroid.lib.arsc.item.SpecString;
import com.reandroid.lib.arsc.pool.TypeStringPool; import com.reandroid.lib.arsc.pool.TypeStringPool;
@ -92,8 +93,13 @@ class XMLValuesEncoder {
PackageBlock packageBlock = getMaterials().getCurrentPackage(); PackageBlock packageBlock = getMaterials().getCurrentPackage();
TypeStringPool typeStringPool = packageBlock.getTypeStringPool(); TypeStringPool typeStringPool = packageBlock.getTypeStringPool();
byte typeId = typeStringPool.idOf(type); byte typeId = typeStringPool.idOf(type);
return packageBlock.getSpecTypePairArray() SpecTypePair specTypePair
.getOrCreateTypeBlock(typeId, qualifiers); = packageBlock.getSpecTypePairArray().getOrCreate(typeId);
int highest = specTypePair.getHighestEntryCount();
TypeBlock typeBlock = specTypePair
.getOrCreateTypeBlock(qualifiers);
typeBlock.getEntryBlockArray().ensureSize(highest);
return typeBlock;
} }
EncodeMaterials getMaterials() { EncodeMaterials getMaterials() {
return materials; return materials;