From db2478a71fe33304aa780e43ada2383a43fbf05d Mon Sep 17 00:00:00 2001 From: Jeff Smith Date: Sat, 18 Oct 2014 23:26:08 -0500 Subject: [PATCH 1/2] Handle ResStringValue when ResAttr expected in ResStyleValue --- .../androlib/res/data/value/ResStyleValue.java | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) 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"); } From 14898693449c4d0a69014e4e47f0a684757dbae8 Mon Sep 17 00:00:00 2001 From: Connor Tumbleson Date: Mon, 20 Oct 2014 06:51:06 -0500 Subject: [PATCH 2/2] added unit-test and changelog note --- CHANGES | 1 + .../resources/brut/apktool/testapp/res/values-mcc001/styles.xml | 1 + .../test/resources/brut/apktool/testapp/res/values/strings.xml | 1 + 3 files changed, 3 insertions(+) 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/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 @@