diff --git a/CHANGES b/CHANGES
index de57f831..66f86771 100644
--- a/CHANGES
+++ b/CHANGES
@@ -46,6 +46,7 @@ v2.0.0 (TBA)
-Fixed (issue #684) - Fixed issue with multiple ResPackages in ARSC file.
-Fixed (issue #682) - Fixed handling renamed manifests with ("yi")
-Fixed (issue #664) - Fixed issue with apks with large StringPools failing to decode.
+-Fixed (issue #447) - Fixed bad cast of ResStringValue to ResAtr by handling ResStringValue correctly (Thanks whydoubt)
-Fixed issue with APKs with multiple dex files.
-Fixed issue with using Apktool without smali/baksmali for ApktoolProperties (Thanks teprrr)
-Fixed issue with non-URI standard characters in apk name (Thanks rover12421)
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 35c38c5e..24eab3be 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
@@ -52,14 +52,20 @@ public class ResStyleValue extends ResBagValue implements
}
for (int i = 0; i < mItems.length; i++) {
ResResSpec spec = mItems[i].m1.getReferent();
+ String name = null;
+ String value = null;
+ String resource = spec.getDefaultResource().getValue().toString();
// hacky-fix remove bad ReferenceVars
- if (spec.getDefaultResource().getValue().toString()
- .contains("ResReferenceValue@")) {
+ if (resource.contains("ResReferenceValue@")) {
continue;
+ } else if (resource.contains("ResStringValue@")) {
+ name = "@" + spec.getFullName(res.getResSpec().getPackage(), false);
+ } else {
+ ResAttr attr = (ResAttr) spec.getDefaultResource().getValue();
+ value = attr.convertToResXmlFormat(mItems[i].m2);
+ name = spec.getFullName(res.getResSpec().getPackage(), true);
}
- ResAttr attr = (ResAttr) spec.getDefaultResource().getValue();
- String value = attr.convertToResXmlFormat(mItems[i].m2);
if (value == null) {
value = mItems[i].m2.encodeAsResXmlValue();
@@ -70,8 +76,7 @@ public class ResStyleValue extends ResBagValue implements
}
serializer.startTag(null, "item");
- serializer.attribute(null, "name",
- spec.getFullName(res.getResSpec().getPackage(), true));
+ serializer.attribute(null, "name", name);
serializer.text(value);
serializer.endTag(null, "item");
}
diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/testapp/res/values-mcc001/styles.xml b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/testapp/res/values-mcc001/styles.xml
index 29649cff..3d000025 100644
--- a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/testapp/res/values-mcc001/styles.xml
+++ b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/testapp/res/values-mcc001/styles.xml
@@ -6,6 +6,7 @@
\ No newline at end of file
diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/testapp/res/values/strings.xml b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/testapp/res/values/strings.xml
index dbbe1827..70e30dbe 100644
--- a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/testapp/res/values/strings.xml
+++ b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/testapp/res/values/strings.xml
@@ -2,4 +2,5 @@
Hello World
+ divider