diff --git a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/decoder/ARSCDecoder.java b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/decoder/ARSCDecoder.java index 17e15b51..90bc296c 100644 --- a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/decoder/ARSCDecoder.java +++ b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/decoder/ARSCDecoder.java @@ -260,10 +260,16 @@ public class ARSCDecoder { private ResType readTableType() throws IOException, AndrolibException { checkChunkType(ARSCHeader.XML_TYPE_TYPE); int typeId = mIn.readUnsignedByte() - mTypeIdOffset; + + // #3311 - Some older applications have no TYPE_SPEC chunks, but still define TYPE chunks. if (mResTypeSpecs.containsKey(typeId)) { - mResId = (0xff000000 & mResId) | mResTypeSpecs.get(typeId).getId() << 16; mTypeSpec = mResTypeSpecs.get(typeId); + } else { + mTypeSpec = new ResTypeSpec(mTypeNames.getString(typeId - 1), typeId); + addTypeSpec(mTypeSpec); + mPkg.addType(mTypeSpec); } + mResId = (0xff000000 & mResId) | mTypeSpec.getId() << 16; int typeFlags = mIn.readByte(); mIn.skipBytes(2); // reserved