From ee2bd9108ef51b1e739c23fc147656be6e312cbf Mon Sep 17 00:00:00 2001 From: REAndroid Date: Thu, 5 Jan 2023 13:03:46 -0500 Subject: [PATCH] sort package directories --- .../com/reandroid/lib/apk/xmlencoder/EncodeUtil.java | 11 +++++++++++ .../com/reandroid/lib/apk/xmlencoder/RESEncoder.java | 3 ++- .../lib/apk/xmlencoder/XMLValuesEncoder.java | 10 ++++++++-- 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/reandroid/lib/apk/xmlencoder/EncodeUtil.java b/src/main/java/com/reandroid/lib/apk/xmlencoder/EncodeUtil.java index 6a46992..8ebfbbb 100644 --- a/src/main/java/com/reandroid/lib/apk/xmlencoder/EncodeUtil.java +++ b/src/main/java/com/reandroid/lib/apk/xmlencoder/EncodeUtil.java @@ -22,6 +22,17 @@ package com.reandroid.lib.apk.xmlencoder; import java.util.regex.Pattern; public class EncodeUtil { + public static void sortPublicXml(List fileList){ + Comparator cmp=new Comparator() { + @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 fileList){ Comparator cmp=new Comparator() { @Override diff --git a/src/main/java/com/reandroid/lib/apk/xmlencoder/RESEncoder.java b/src/main/java/com/reandroid/lib/apk/xmlencoder/RESEncoder.java index 560556a..0de130c 100644 --- a/src/main/java/com/reandroid/lib/apk/xmlencoder/RESEncoder.java +++ b/src/main/java/com/reandroid/lib/apk/xmlencoder/RESEncoder.java @@ -189,7 +189,7 @@ continue; } xmlFiles.addAll( - ApkUtil.recursiveFiles(mainDir, ApkUtil.FILE_NAME_PUBLIC_XML)); + ApkUtil.recursiveFiles(dir, ApkUtil.FILE_NAME_PUBLIC_XML)); } List results = new ArrayList<>(); for(File file:xmlFiles){ @@ -197,6 +197,7 @@ results.add(file); } } + EncodeUtil.sortPublicXml(results); return results; } diff --git a/src/main/java/com/reandroid/lib/apk/xmlencoder/XMLValuesEncoder.java b/src/main/java/com/reandroid/lib/apk/xmlencoder/XMLValuesEncoder.java index 16fb738..7b070a9 100644 --- a/src/main/java/com/reandroid/lib/apk/xmlencoder/XMLValuesEncoder.java +++ b/src/main/java/com/reandroid/lib/apk/xmlencoder/XMLValuesEncoder.java @@ -17,6 +17,7 @@ package com.reandroid.lib.apk.xmlencoder; import com.reandroid.lib.arsc.chunk.PackageBlock; 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.item.SpecString; import com.reandroid.lib.arsc.pool.TypeStringPool; @@ -92,8 +93,13 @@ class XMLValuesEncoder { PackageBlock packageBlock = getMaterials().getCurrentPackage(); TypeStringPool typeStringPool = packageBlock.getTypeStringPool(); byte typeId = typeStringPool.idOf(type); - return packageBlock.getSpecTypePairArray() - .getOrCreateTypeBlock(typeId, qualifiers); + SpecTypePair specTypePair + = packageBlock.getSpecTypePairArray().getOrCreate(typeId); + int highest = specTypePair.getHighestEntryCount(); + TypeBlock typeBlock = specTypePair + .getOrCreateTypeBlock(qualifiers); + typeBlock.getEntryBlockArray().ensureSize(highest); + return typeBlock; } EncodeMaterials getMaterials() { return materials;