diff --git a/apktool-cli/pom.xml b/apktool-cli/pom.xml
index 572fa44f..b033f52b 100644
--- a/apktool-cli/pom.xml
+++ b/apktool-cli/pom.xml
@@ -49,6 +49,12 @@
${project.groupId}
apktool-lib
${project.version}
+
+
+ commons-lang3
+ org.apache.commons
+
+
common
@@ -62,5 +68,11 @@
1.3.4-ibot7
jar
+
+ commons-lang
+ commons-lang
+ 2.4
+ jar
+
\ No newline at end of file
diff --git a/apktool-lib/pom.xml b/apktool-lib/pom.xml
index 3b4d2787..a9522740 100644
--- a/apktool-lib/pom.xml
+++ b/apktool-lib/pom.xml
@@ -65,6 +65,11 @@
+
+ commons-lang
+ commons-lang
+ 2.4
+
brut.j
dir
diff --git a/apktool-lib/src/main/java/brut/androlib/res/data/value/ResPluralsValue.java b/apktool-lib/src/main/java/brut/androlib/res/data/value/ResPluralsValue.java
index accb4bb0..2ca45fbb 100644
--- a/apktool-lib/src/main/java/brut/androlib/res/data/value/ResPluralsValue.java
+++ b/apktool-lib/src/main/java/brut/androlib/res/data/value/ResPluralsValue.java
@@ -16,12 +16,13 @@
package brut.androlib.res.data.value;
-import brut.androlib.res.xml.ResValuesXmlSerializable;
-import brut.androlib.res.xml.ResXmlEncoders;
import brut.androlib.AndrolibException;
import brut.androlib.res.data.ResResource;
+import brut.androlib.res.xml.ResValuesXmlSerializable;
+import brut.androlib.res.xml.ResXmlEncoders;
import brut.util.Duo;
import java.io.IOException;
+import org.apache.commons.lang.StringUtils;
import org.xmlpull.v1.XmlSerializer;
/**
@@ -49,9 +50,21 @@ public class ResPluralsValue extends ResBagValue implements ResValuesXmlSerializ
if (item == null) {
continue;
}
+
+ ResScalarValue rawValue = item;
+
serializer.startTag(null, "item");
serializer.attribute(null, "quantity", QUANTITY_MAP[i]);
- serializer.text(item.encodeAsResXmlValue());
+ if (ResXmlEncoders.hasMultipleNonPositionalSubstitutions(rawValue.encodeAsResXmlValue())) {
+ serializer.text(item.encodeAsResXmlValueExt());
+ } else {
+ String recode = item.encodeAsResXmlValue();
+ //Dirty, but working fix @miuirussia
+ for (int j = 0; j < 10; j++) {
+ recode = StringUtils.replace(recode, "%" + Integer.toString(j) + "$" + Integer.toString(j) + "$", "%" + Integer.toString(j) + "$");
+ }
+ serializer.text(recode);
+ }
serializer.endTag(null, "item");
}
serializer.endTag(null, "plurals");
diff --git a/apktool-lib/src/main/java/brut/androlib/res/data/value/ResScalarValue.java b/apktool-lib/src/main/java/brut/androlib/res/data/value/ResScalarValue.java
index 6d80e1b8..8fcc2e12 100644
--- a/apktool-lib/src/main/java/brut/androlib/res/data/value/ResScalarValue.java
+++ b/apktool-lib/src/main/java/brut/androlib/res/data/value/ResScalarValue.java
@@ -52,7 +52,7 @@ public abstract class ResScalarValue extends ResValue
if (mRawValue != null) {
return mRawValue;
}
- return encodeAsResXml();
+ return encodeAsResXmlValueExt();
}
public String encodeAsResXmlValueExt() throws AndrolibException {
@@ -90,15 +90,16 @@ public abstract class ResScalarValue extends ResValue
public void serializeToResValuesXml(XmlSerializer serializer, ResResource res)
throws IOException, AndrolibException {
String type = res.getResSpec().getType().getName();
- boolean item = ! "reference".equals(mType) && ! type.equals(mType);
+ boolean item = !"reference".equals(mType) && !type.equals(mType);
String body = encodeAsResXmlValue();
/* check for resource reference */
if (body.contains("@")){
- // item = true;
- // messes up strings with @, need to check if strings.xml ignore
+ if(!res.getFilePath().contains("string")) {
+ item = true;
+ }
}
/* check for using attrib as node or item */