diff --git a/jadx-core/src/main/java/jadx/core/xmlgen/ResXmlGen.java b/jadx-core/src/main/java/jadx/core/xmlgen/ResXmlGen.java
index 5d8556f2c..dcf43c876 100644
--- a/jadx-core/src/main/java/jadx/core/xmlgen/ResXmlGen.java
+++ b/jadx-core/src/main/java/jadx/core/xmlgen/ResXmlGen.java
@@ -243,7 +243,7 @@ public class ResXmlGen {
cw.add(" />");
} else {
cw.add('>');
- if (itemTag.equals("string")) {
+ if (itemTag.equals("string") || (typeName.equals("array") && valueStr.charAt(0) != '@')) {
cw.add(StringUtils.escapeResStrValue(valueStr));
} else {
cw.add(StringUtils.escapeResValue(valueStr));
diff --git a/jadx-core/src/test/java/jadx/core/xmlgen/ResXmlGenTest.java b/jadx-core/src/test/java/jadx/core/xmlgen/ResXmlGenTest.java
index 74e921fa4..1e3cb0e46 100644
--- a/jadx-core/src/test/java/jadx/core/xmlgen/ResXmlGenTest.java
+++ b/jadx-core/src/test/java/jadx/core/xmlgen/ResXmlGenTest.java
@@ -125,4 +125,26 @@ class ResXmlGenTest {
+ " Jadx Decompiler App\n"
+ "", files.get(0).getText().toString());
}
+
+ @Test
+ void testArrayEscape() {
+ ResourceStorage resStorage = new ResourceStorage();
+ ResourceEntry re = new ResourceEntry(2130903103, "jadx.gui.app", "array", "single_quote_escape_sample", "");
+ re.setNamedValues(
+ Lists.list(new RawNamedValue(16777216, new RawValue(3, 0))));
+ resStorage.add(re);
+
+ ValuesParser vp = new ValuesParser(new String[] { "Let's go" }, resStorage.getResourcesNames());
+ ResXmlGen resXmlGen = new ResXmlGen(resStorage, vp);
+ List files = resXmlGen.makeResourcesXml();
+
+ assertEquals(1, files.size());
+ assertEquals("res/values/arrays.xml", files.get(0).getFileName());
+ assertEquals("\n"
+ + "\n"
+ + " \n"
+ + " - Let\\'s go
\n"
+ + " \n"
+ + "", files.get(0).getText().toString());
+ }
}