From 04f1a817a0fa4e05caaf21f8bbe6140e0a27276f Mon Sep 17 00:00:00 2001 From: REAndroid Date: Mon, 12 Dec 2022 15:17:32 -0500 Subject: [PATCH] Fix xml attribute encoding --- build.gradle | 2 +- .../lib/arsc/chunk/xml/ResXmlElement.java | 9 +- .../arsc/chunk/xml/ResXmlStartElement.java | 89 +++++++++++++++++-- 3 files changed, 84 insertions(+), 16 deletions(-) diff --git a/build.gradle b/build.gradle index 9de2fcb..423cae4 100755 --- a/build.gradle +++ b/build.gradle @@ -2,7 +2,7 @@ apply plugin: 'java-library' group 'com.reandroid.lib.arsc' -version '1.0.4' +version '1.0.5' java { sourceCompatibility JavaVersion.VERSION_1_8 diff --git a/src/main/java/com/reandroid/lib/arsc/chunk/xml/ResXmlElement.java b/src/main/java/com/reandroid/lib/arsc/chunk/xml/ResXmlElement.java index ff7d05c..10b1282 100755 --- a/src/main/java/com/reandroid/lib/arsc/chunk/xml/ResXmlElement.java +++ b/src/main/java/com/reandroid/lib/arsc/chunk/xml/ResXmlElement.java @@ -41,14 +41,6 @@ public class ResXmlElement extends FixedBlockContainer implements JSONConvert>> 16) - 1; + int z=c+style; + stringPool.childesCount(); + } + @Override + protected void onPreRefreshRefresh(){ + sortAttributes(); + } + private void sortAttributes(){ + ResXmlAttributeArray array = getResXmlAttributeArray(); + + ResXmlAttribute idAttribute=array.get(mIdAttributePosition.get()-1); + ResXmlAttribute classAttribute=array.get(mClassAttributePosition.get()-1); + ResXmlAttribute styleAttribute=array.get(mStyleAttributePosition.get()-1); + + array.sortAttributes(); + if(idAttribute!=null){ + mIdAttributePosition.set((short) (idAttribute.getIndex()+1)); + } + if(classAttribute!=null){ + mClassAttributePosition.set((short) (classAttribute.getIndex()+1)); + // In case obfuscation + if(!"class".equals(classAttribute.getName())){ + classAttribute.setName("class", 0); + } + } + if(styleAttribute!=null){ + mStyleAttributePosition.set((short) (styleAttribute.getIndex()+1)); + // In case obfuscation + if(!"style".equals(styleAttribute.getName())){ + styleAttribute.setName("style", 0); + } + } + } + void calculatePositions(){ + + int android_id=0x010100d0; + ResXmlAttribute idAttribute=getAttribute(android_id); + ResXmlAttribute classAttribute=getNoIdAttribute("class"); + ResXmlAttribute styleAttribute=getNoIdAttribute("style"); + + if(idAttribute!=null){ + mIdAttributePosition.set((short) (idAttribute.getIndex()+1)); + } + if(classAttribute!=null){ + mClassAttributePosition.set((short) (classAttribute.getIndex()+1)); + } + if(styleAttribute!=null){ + mStyleAttributePosition.set((short) (styleAttribute.getIndex()+1)); + } + } public ResXmlAttribute getAttribute(int resourceId){ for(ResXmlAttribute attribute:listResXmlAttributes()){ if(resourceId==attribute.getNameResourceID()){ @@ -39,6 +103,17 @@ public class ResXmlStartElement extends BaseXmlChunk { } return null; } + private ResXmlAttribute getNoIdAttribute(String name){ + for(ResXmlAttribute attribute:listResXmlAttributes()){ + if(attribute.getNameResourceID()!=0){ + continue; + } + if(name.equals(attribute.getName())){ + return attribute; + } + } + return null; + } public ResXmlAttribute getAttribute(String uri, String name){ if(name==null){ return null;