diff --git a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/value/ResReferenceValue.java b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/value/ResReferenceValue.java index 2cd41d43..570a6d72 100644 --- a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/value/ResReferenceValue.java +++ b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/value/ResReferenceValue.java @@ -17,6 +17,7 @@ package brut.androlib.res.data.value; import brut.androlib.AndrolibException; +import brut.androlib.err.UndefinedResObject; import brut.androlib.res.data.ResPackage; import brut.androlib.res.data.ResResSpec; @@ -45,6 +46,9 @@ public class ResReferenceValue extends ResIntValue { } ResResSpec spec = getReferent(); + if (spec == null) { + return "@null"; + } boolean newId = spec.hasDefaultResource() && spec.getDefaultResource().getValue() instanceof ResIdValue; // generate the beginning to fix @android @@ -54,10 +58,18 @@ public class ResReferenceValue extends ResIntValue { } public ResResSpec getReferent() throws AndrolibException { - return mPackage.getResTable().getResSpec(getValue()); + try { + return mPackage.getResTable().getResSpec(getValue()); + } catch (UndefinedResObject ex) { + return null; + } } public boolean isNull() { return mValue == 0; } + + public boolean referentIsNull() throws AndrolibException { + return getReferent() == null; + } } diff --git a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/value/ResStyleValue.java b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/value/ResStyleValue.java index d847a80c..0780f63e 100644 --- a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/value/ResStyleValue.java +++ b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/value/ResStyleValue.java @@ -45,7 +45,7 @@ public class ResStyleValue extends ResBagValue implements ResResource res) throws IOException, AndrolibException { serializer.startTag(null, "style"); serializer.attribute(null, "name", res.getResSpec().getName()); - if (!mParent.isNull()) { + if (!mParent.isNull() && !mParent.referentIsNull()) { serializer.attribute(null, "parent", mParent.encodeAsResXmlAttr()); } else if (res.getResSpec().getName().indexOf('.') != -1) { serializer.attribute(null, "parent", "");