diff --git a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/decoder/AXmlResourceParser.java b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/decoder/AXmlResourceParser.java index c83eb6d5..a335db23 100644 --- a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/decoder/AXmlResourceParser.java +++ b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/decoder/AXmlResourceParser.java @@ -387,7 +387,14 @@ public class AXmlResourceParser implements XmlResourceParser { if (mAttrDecoder != null) { try { String stringBlockValue = valueRaw == -1 ? null : ResXmlEncoders.escapeXmlChars(mStringBlock.getString(valueRaw)); - String resourceMapValue = mAttrDecoder.decodeFromResourceId(valueData); + String resourceMapValue = null; + + // Ensure we only track down obfuscated values for reference/attribute type values. Otherwise we might + // spam lookups against resource table for invalid ids. + if (valueType == TypedValue.TYPE_REFERENCE || valueType == TypedValue.TYPE_DYNAMIC_REFERENCE || + valueType == TypedValue.TYPE_ATTRIBUTE || valueType == TypedValue.TYPE_DYNAMIC_ATTRIBUTE) { + resourceMapValue = mAttrDecoder.decodeFromResourceId(valueData); + } String value = stringBlockValue; if (stringBlockValue != null && resourceMapValue != null) { diff --git a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/decoder/ResAttrDecoder.java b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/decoder/ResAttrDecoder.java index b30c347e..8c450212 100644 --- a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/decoder/ResAttrDecoder.java +++ b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/decoder/ResAttrDecoder.java @@ -46,10 +46,8 @@ public class ResAttrDecoder { throws AndrolibException { if (attrResId != 0) { - ResID resId = new ResID(attrResId); - try { - ResResSpec resResSpec = mResTable.getResSpec(resId); + ResResSpec resResSpec = mResTable.getResSpec(attrResId); if (resResSpec != null) { return resResSpec.getName(); }