diff --git a/apktool-lib/src/main/java/brut/androlib/res/decoder/AXmlResourceParser.java b/apktool-lib/src/main/java/brut/androlib/res/decoder/AXmlResourceParser.java index 62f23896..9ada6407 100644 --- a/apktool-lib/src/main/java/brut/androlib/res/decoder/AXmlResourceParser.java +++ b/apktool-lib/src/main/java/brut/androlib/res/decoder/AXmlResourceParser.java @@ -306,15 +306,15 @@ public class AXmlResourceParser implements XmlResourceParser { public String getAttributeValue(int index) { int offset = getAttributeOffset(index); - int valueString = m_attributes[offset + ATTRIBUTE_IX_VALUE_STRING]; - if (valueString != -1) { - return AndrolibResources.escapeTextForResXml( - m_strings.getString(valueString)); - } int valueType = m_attributes[offset + ATTRIBUTE_IX_VALUE_TYPE]; int valueData = m_attributes[offset + ATTRIBUTE_IX_VALUE_DATA]; + int valueString = m_attributes[offset + ATTRIBUTE_IX_VALUE_STRING]; - if (mAttrDecoder != null) { + if (mAttrDecoder != null && ( + valueString == -1 + || valueType == TypedValue.TYPE_REFERENCE + || valueType == TypedValue.TYPE_ATTRIBUTE + )) { try { return mAttrDecoder.decode(valueType, valueData, getAttributeNameResource(index)); @@ -329,6 +329,11 @@ public class AXmlResourceParser implements XmlResourceParser { } } + if (valueString != -1) { + return AndrolibResources.escapeTextForResXml( + m_strings.getString(valueString)); + } + return TypedValue.coerceToString(valueType, valueData); }