From db59ebc6ae6c1ff0bbac2f13cf47c8974dd42397 Mon Sep 17 00:00:00 2001 From: REAndroid Date: Tue, 17 Jan 2023 05:18:36 -0500 Subject: [PATCH] fix: [XML] decode duplicate file as path string for multiple referencing entries --- .../com/reandroid/lib/apk/ApkModuleXmlDecoder.java | 10 ++-------- .../lib/apk/xmlencoder/XMLValuesEncoderColor.java | 4 +++- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/reandroid/lib/apk/ApkModuleXmlDecoder.java b/src/main/java/com/reandroid/lib/apk/ApkModuleXmlDecoder.java index 6172d6e..3a45aaa 100644 --- a/src/main/java/com/reandroid/lib/apk/ApkModuleXmlDecoder.java +++ b/src/main/java/com/reandroid/lib/apk/ApkModuleXmlDecoder.java @@ -25,7 +25,6 @@ import com.reandroid.lib.arsc.chunk.xml.AndroidManifestBlock; import com.reandroid.lib.arsc.chunk.xml.ResXmlBlock; import com.reandroid.lib.arsc.container.SpecTypePair; import com.reandroid.lib.arsc.decoder.ValueDecoder; -import com.reandroid.lib.arsc.item.TableString; import com.reandroid.lib.arsc.value.*; import com.reandroid.lib.common.EntryStore; import com.reandroid.lib.common.Frameworks; @@ -110,7 +109,7 @@ import java.util.*; resFile.getInputSource().write(outputStream); outputStream.close(); - addDecodedEntry(resFile.getEntryBlockList()); + addDecodedEntry(resFile.pickOne()); } private void decodeResXml(EntryStore entryStore, File outDir, ResFile resFile) throws IOException, XMLException{ @@ -131,7 +130,7 @@ import java.util.*; XMLDocument xmlDocument=resXmlBlock.decodeToXml(entryStore, packageBlock.getId()); xmlDocument.save(file, true); - addDecodedEntry(resFile.getEntryBlockList()); + addDecodedEntry(resFile.pickOne()); } private void decodePublicXml(TableBlock tableBlock, File outDir) throws IOException{ @@ -167,11 +166,6 @@ import java.util.*; xmlDocument.save(file, true); addDecodedPath(AndroidManifestBlock.FILE_NAME); } - private void addDecodedEntry(Collection entryBlockList){ - for(EntryBlock entryBlock:entryBlockList){ - addDecodedEntry(entryBlock); - } - } private void addDecodedEntry(EntryBlock entryBlock){ if(entryBlock.isNull()){ return; diff --git a/src/main/java/com/reandroid/lib/apk/xmlencoder/XMLValuesEncoderColor.java b/src/main/java/com/reandroid/lib/apk/xmlencoder/XMLValuesEncoderColor.java index d524047..ee85b3d 100644 --- a/src/main/java/com/reandroid/lib/apk/xmlencoder/XMLValuesEncoderColor.java +++ b/src/main/java/com/reandroid/lib/apk/xmlencoder/XMLValuesEncoderColor.java @@ -28,7 +28,9 @@ class XMLValuesEncoderColor extends XMLValuesEncoder{ if(encodeResult!=null){ entryBlock.setValueAsRaw(encodeResult.valueType, encodeResult.value); }else { - throw new EncodeException("Unknown color value: "+value); + // If reaches here the value might be + // file path e.g. res/color/something.xml + entryBlock.setValueAsString(value); } } }