diff --git a/src/main/java/com/reandroid/apk/xmldecoder/BagDecoderArray.java b/src/main/java/com/reandroid/apk/xmldecoder/BagDecoderArray.java index 8da7784..e02c590 100644 --- a/src/main/java/com/reandroid/apk/xmldecoder/BagDecoderArray.java +++ b/src/main/java/com/reandroid/apk/xmldecoder/BagDecoderArray.java @@ -21,7 +21,6 @@ import com.reandroid.arsc.chunk.PackageBlock; import com.reandroid.arsc.decoder.ValueDecoder; import com.reandroid.arsc.value.*; import com.reandroid.common.EntryStore; -import com.reandroid.xml.XMLElement; import java.io.IOException; import java.util.HashSet; @@ -40,11 +39,18 @@ class BagDecoderArray extends BagDecoder{ writer.attribute("name", entry.getName()); PackageBlock packageBlock = entry.getPackageBlock(); + EntryStore entryStore = getEntryStore(); ResValueMap[] resValueMaps = mapEntry.listResValueMap(); + boolean zero_name = isZeroNameArray(resValueMaps); for(int i = 0; i < resValueMaps.length; i++){ ResValueMap valueMap = resValueMaps[i]; String childTag = "item"; writer.startTag(childTag); + if(zero_name){ + String name = ValueDecoder.decodeAttributeName( + entryStore, packageBlock, valueMap.getName()); + writer.attribute("name", name); + } writeText(writer, packageBlock, valueMap); writer.endTag(childTag); } @@ -73,14 +79,20 @@ class BagDecoderArray extends BagDecoder{ if(parentId!=0){ return false; } - ResValueMap[] bagItems = mapEntry.listResValueMap(); - if(bagItems==null||bagItems.length==0){ + ResValueMap[] valueMapList = mapEntry.listResValueMap(); + if(valueMapList == null || valueMapList.length == 0){ return false; } - int len=bagItems.length; - for(int i=0;i> 16) & 0xffff; if(high!=0x0100 && high!=0x0200){ return false; @@ -93,4 +105,16 @@ class BagDecoderArray extends BagDecoder{ } return true; } + private static boolean isZeroNameArray(ResValueMap[] resValueMapList){ + int length = resValueMapList.length; + for(int i = 0; i < length; i++){ + if(!isZeroName(resValueMapList[i])){ + return false; + } + } + return true; + } + private static boolean isZeroName(ResValueMap resValueMap){ + return resValueMap.getName() == 0; + } } diff --git a/src/main/java/com/reandroid/apk/xmlencoder/ValuesEncoder.java b/src/main/java/com/reandroid/apk/xmlencoder/ValuesEncoder.java index 378ef1f..1a20d99 100644 --- a/src/main/java/com/reandroid/apk/xmlencoder/ValuesEncoder.java +++ b/src/main/java/com/reandroid/apk/xmlencoder/ValuesEncoder.java @@ -1,4 +1,4 @@ - /* +/* * Copyright (C) 2022 github.com/REAndroid * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -71,11 +71,7 @@ class ValuesEncoder { type=getType(xmlDocument, type); XMLValuesEncoder encoder; if(isBag(xmlDocument, type)){ - if("array".equals(type) && hasNameAttributes(xmlDocument)){ - encoder = getBagEncoder("style"); - }else{ - encoder = getBagEncoder(type); - } + encoder = getBagEncoder(type); }else{ encoder=getEncoder(type); } diff --git a/src/main/java/com/reandroid/apk/xmlencoder/XMLValuesEncoderArray.java b/src/main/java/com/reandroid/apk/xmlencoder/XMLValuesEncoderArray.java index 677b309..b6cbdf6 100644 --- a/src/main/java/com/reandroid/apk/xmlencoder/XMLValuesEncoderArray.java +++ b/src/main/java/com/reandroid/apk/xmlencoder/XMLValuesEncoderArray.java @@ -1,4 +1,4 @@ - /* +/* * Copyright (C) 2022 github.com/REAndroid * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -38,12 +38,27 @@ class XMLValuesEncoderArray extends XMLValuesEncoderBag{ }else if(ApkUtil.TAG_INTEGER_ARRAY.equals(tagName)){ force_integer = true; } + EncodeMaterials materials = getMaterials(); ResValueMapArray itemArray = mapEntry.getValue(); for(int i=0;i