diff --git a/src/main/java/com/reandroid/apk/xmlencoder/EncodeMaterials.java b/src/main/java/com/reandroid/apk/xmlencoder/EncodeMaterials.java index 6677b10..eed5511 100644 --- a/src/main/java/com/reandroid/apk/xmlencoder/EncodeMaterials.java +++ b/src/main/java/com/reandroid/apk/xmlencoder/EncodeMaterials.java @@ -84,6 +84,10 @@ if(ref!=null){ return ref.value; } + ref = ValueDecoder.encodeNullReference(refString); + if(ref!=null){ + return ref.value; + } throw new EncodeException( "Not proper reference string: '"+refString+"'"); } diff --git a/src/main/java/com/reandroid/apk/xmlencoder/XMLValuesEncoderStyle.java b/src/main/java/com/reandroid/apk/xmlencoder/XMLValuesEncoderStyle.java index ea75dfa..17ecd8d 100644 --- a/src/main/java/com/reandroid/apk/xmlencoder/XMLValuesEncoderStyle.java +++ b/src/main/java/com/reandroid/apk/xmlencoder/XMLValuesEncoderStyle.java @@ -39,11 +39,14 @@ class XMLValuesEncoderStyle extends XMLValuesEncoderBag{ if(id!=0){ item.setName(id); String value = child.getTextContent(); - if(ValueDecoder.isReference(value)){ + ValueDecoder.EncodeResult encodeResult = ValueDecoder.encodeNullReference(value); + if(encodeResult!=null){ + item.setTypeAndData(encodeResult.valueType, encodeResult.value); + }else if(ValueDecoder.isReference(value)){ item.setTypeAndData(ValueType.REFERENCE, getMaterials().resolveReference(value)); }else { - ValueDecoder.EncodeResult encodeResult = ValueDecoder.encodeGuessAny(value); + encodeResult = ValueDecoder.encodeGuessAny(value); if(encodeResult!=null){ item.setTypeAndData(encodeResult.valueType, encodeResult.value); }else { @@ -86,6 +89,11 @@ class XMLValuesEncoderStyle extends XMLValuesEncoderBag{ bagItem.setTypeAndData(encodeEnumFlag.valueType, encodeEnumFlag.value); return; } + ValueDecoder.EncodeResult encodeResult = ValueDecoder.encodeNullReference(valueText); + if(encodeResult!=null){ + bagItem.setTypeAndData(encodeResult.valueType, encodeResult.value); + return; + } if(ValueDecoder.isReference(valueText)){ if(valueText.startsWith("?")){ bagItem.setValueType(ValueType.ATTRIBUTE); @@ -99,7 +107,7 @@ class XMLValuesEncoderStyle extends XMLValuesEncoderBag{ }else if(EncodeUtil.isEmpty(valueText)) { bagItem.setTypeAndData(ValueType.NULL, 0); }else{ - ValueDecoder.EncodeResult encodeResult = ValueDecoder.encodeGuessAny(valueText); + encodeResult = ValueDecoder.encodeGuessAny(valueText); if(encodeResult!=null){ bagItem.setTypeAndData(encodeResult.valueType, encodeResult.value); diff --git a/src/main/java/com/reandroid/arsc/decoder/ValueDecoder.java b/src/main/java/com/reandroid/arsc/decoder/ValueDecoder.java index d60f89a..c100bb8 100755 --- a/src/main/java/com/reandroid/arsc/decoder/ValueDecoder.java +++ b/src/main/java/com/reandroid/arsc/decoder/ValueDecoder.java @@ -63,16 +63,11 @@ public class ValueDecoder { if(txt==null){ return null; } - if("@empty".equals(txt)){ - return new EncodeResult(ValueType.NULL, 1); + EncodeResult result = encodeNullReference(txt); + if(result != null){ + return result; } - if("@null".equals(txt)){ - return new EncodeResult(ValueType.REFERENCE, 0); - } - if("?null".equals(txt)){ - return new EncodeResult(ValueType.ATTRIBUTE, 0); - } - EncodeResult result=encodeColor(txt); + result=encodeColor(txt); if(result!=null){ return result; } @@ -99,6 +94,21 @@ public class ValueDecoder { } return null; } + public static EncodeResult encodeNullReference(String txt){ + if(txt==null){ + return null; + } + if("@empty".equals(txt)){ + return new EncodeResult(ValueType.NULL, 1); + } + if("@null".equals(txt)){ + return new EncodeResult(ValueType.REFERENCE, 0); + } + if("?null".equals(txt)){ + return new EncodeResult(ValueType.ATTRIBUTE, 0); + } + return null; + } public static EncodeResult encodeHexReference(String txt){ if(txt==null){ return null;