mirror of
https://github.com/revanced/ARSCLib.git
synced 2025-05-02 07:04:27 +02:00
Fix xml attribute encoding
This commit is contained in:
parent
34a9742d6b
commit
04f1a817a0
@ -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
|
||||
|
@ -41,14 +41,6 @@ public class ResXmlElement extends FixedBlockContainer implements JSONConvert<JS
|
||||
addChild(4, mEndElementContainer);
|
||||
addChild(5, mEndNamespaceList);
|
||||
}
|
||||
@Override
|
||||
protected void onPreRefreshRefresh(){
|
||||
ResXmlStartElement start = getStartElement();
|
||||
if(start==null){
|
||||
return;
|
||||
}
|
||||
start.getResXmlAttributeArray().sortAttributes();
|
||||
}
|
||||
public ResXmlElement createChildElement(){
|
||||
return createChildElement(null);
|
||||
}
|
||||
@ -612,6 +604,7 @@ public class ResXmlElement extends FixedBlockContainer implements JSONConvert<JS
|
||||
child.fromJson(childObject);
|
||||
}
|
||||
}
|
||||
start.calculatePositions();
|
||||
}
|
||||
@Override
|
||||
public String toString(){
|
||||
|
@ -2,9 +2,11 @@ package com.reandroid.lib.arsc.chunk.xml;
|
||||
|
||||
import com.reandroid.lib.arsc.chunk.ChunkType;
|
||||
import com.reandroid.lib.arsc.array.ResXmlAttributeArray;
|
||||
import com.reandroid.lib.arsc.item.IntegerItem;
|
||||
import com.reandroid.lib.arsc.io.BlockReader;
|
||||
import com.reandroid.lib.arsc.item.ShortItem;
|
||||
import com.reandroid.lib.arsc.pool.ResXmlStringPool;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Collection;
|
||||
|
||||
|
||||
@ -12,8 +14,9 @@ public class ResXmlStartElement extends BaseXmlChunk {
|
||||
private final ShortItem mAttributeStart;
|
||||
private final ShortItem mAttributeUnitSize;
|
||||
private final ShortItem mAttributeCount;
|
||||
private final ShortItem mIdAttribute;
|
||||
private final IntegerItem mClassAttribute;
|
||||
private final ShortItem mIdAttributePosition;
|
||||
private final ShortItem mClassAttributePosition;
|
||||
private final ShortItem mStyleAttributePosition;
|
||||
private final ResXmlAttributeArray mAttributeArray;
|
||||
private ResXmlEndElement mResXmlEndElement;
|
||||
public ResXmlStartElement() {
|
||||
@ -21,16 +24,77 @@ public class ResXmlStartElement extends BaseXmlChunk {
|
||||
mAttributeStart=new ShortItem(ATTRIBUTES_DEFAULT_START);
|
||||
mAttributeUnitSize =new ShortItem(ATTRIBUTES_UNIT_SIZE);
|
||||
mAttributeCount=new ShortItem();
|
||||
mIdAttribute=new ShortItem();
|
||||
mClassAttribute=new IntegerItem();
|
||||
mIdAttributePosition =new ShortItem();
|
||||
mClassAttributePosition=new ShortItem();
|
||||
mStyleAttributePosition=new ShortItem();
|
||||
mAttributeArray=new ResXmlAttributeArray(getHeaderBlock(), mAttributeStart, mAttributeCount);
|
||||
addChild(mAttributeStart);
|
||||
addChild(mAttributeUnitSize);
|
||||
addChild(mAttributeCount);
|
||||
addChild(mIdAttribute);
|
||||
addChild(mClassAttribute);
|
||||
addChild(mIdAttributePosition);
|
||||
addChild(mClassAttributePosition);
|
||||
addChild(mStyleAttributePosition);
|
||||
addChild(mAttributeArray);
|
||||
}
|
||||
@Override
|
||||
public void onReadBytes(BlockReader reader) throws IOException {
|
||||
super.onReadBytes(reader);
|
||||
if(mClassAttributePosition.get()==0 && mStyleAttributePosition.get()==0){
|
||||
return;
|
||||
}
|
||||
ResXmlStringPool stringPool=getStringPool();
|
||||
int c=(mClassAttributePosition.get() & 0xffff)-1;
|
||||
int style = (mStyleAttributePosition.get() >>> 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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user