diff --git a/CHANGES b/CHANGES index a66ca4cf..5f5edc0a 100644 --- a/CHANGES +++ b/CHANGES @@ -9,6 +9,7 @@ v2.0.0 (TBA) -Fixed (issue #439) - Correctly handles apk's that have have the general access bit enabled for encryption. -Fixed (issue #339) - Re-enables debug mode ( -d flag) to fix smali debugging. (Thanks Ryszard) -Fixed (issue #177) - Adapted output of smali to make breakpoint setting easier in different IDEs. (Thanks Ryszard) +-Fixed (issue #391) - Fixes characters (& and <) from being double escaped in 's of arrays.xml v1.5.3 (TBA) -Updated to smali/baksmali to v1.4.2 diff --git a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/value/ResArrayValue.java b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/value/ResArrayValue.java index a35791be..3cf6f7c9 100644 --- a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/value/ResArrayValue.java +++ b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/value/ResArrayValue.java @@ -58,7 +58,7 @@ public class ResArrayValue extends ResBagValue implements serializer.attribute(null, "name", res.getResSpec().getName()); for (int i = 0; i < mItems.length; i++) { serializer.startTag(null, "item"); - serializer.text(mItems[i].encodeAsResXmlItemValue()); + serializer.text(mItems[i].encodeAsResXmlNonEscapedItemValue()); serializer.endTag(null, "item"); } serializer.endTag(null, type); diff --git a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/value/ResScalarValue.java b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/value/ResScalarValue.java index c540eee8..905e4875 100644 --- a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/value/ResScalarValue.java +++ b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/value/ResScalarValue.java @@ -57,6 +57,10 @@ public abstract class ResScalarValue extends ResValue implements return encodeAsResXmlValueExt().replace("@android:", "@*android:"); } + public String encodeAsResXmlNonEscapedItemValue() throws AndrolibException { + return encodeAsResXmlValue().replace("@android:", "@*android:").replace("&", "&").replace("<","<"); + } + public String encodeAsResXmlValueExt() throws AndrolibException { String rawValue = mRawValue; if (rawValue != null) { diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/testapp/res/values-mcc001/arrays.xml b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/testapp/res/values-mcc001/arrays.xml index 8cc3d152..6d9c6c84 100644 --- a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/testapp/res/values-mcc001/arrays.xml +++ b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/testapp/res/values-mcc001/arrays.xml @@ -5,6 +5,8 @@ TEST2 TEST3 %2$s foo %1$d + http://google.com&boo=1&foo=2 + <b>Bolded Text</b> -1