diff --git a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/table/ResEntrySpec.java b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/table/ResEntrySpec.java index 5df49b9c3b..19087da444 100644 --- a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/table/ResEntrySpec.java +++ b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/table/ResEntrySpec.java @@ -29,7 +29,6 @@ public class ResEntrySpec { public static final String DUMMY_PREFIX = "APKTOOL_DUMMY_"; public static final String MISSING_PREFIX = "APKTOOL_MISSING_"; - public static final String RENAMED_PREFIX = "APKTOOL_RENAMED_"; private final ResTypeSpec mTypeSpec; private final ResId mId; @@ -40,10 +39,22 @@ public ResEntrySpec(ResTypeSpec typeSpec, ResId id, String name) { assert typeSpec.getId() == id.getTypeId(); mTypeSpec = typeSpec; mId = id; + // Some apps had their entry names collapsed to a single value in // the key string pool. Rename to avoid duplicates. - if (name == null || name.isEmpty() || INVALID_ENTRY_NAMES.contains(name)) { - mName = RENAMED_PREFIX + id; + // || getTypeName().startsWith("^attr-private")) + + if (name == null + || name.isEmpty() + || INVALID_ENTRY_NAMES.contains(name)) { + + mName = getTypeName() + "_" + id; + + } else if ("attr".equals(getTypeName()) + && Character.isDigit(name.charAt(0))) { + + mName = getTypeName() + "_" + id; // attr_id + } else { mName = name; } @@ -86,10 +97,6 @@ public boolean isMissing() { return mName.startsWith(MISSING_PREFIX); } - public boolean isRenamed() { - return mName.startsWith(RENAMED_PREFIX); - } - @Override public String toString() { return String.format("ResEntrySpec{typeSpec=%s, id=%s, name=%s}", diff --git a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/table/value/ResReference.java b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/table/value/ResReference.java index 899721313f..e015353b20 100644 --- a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/table/value/ResReference.java +++ b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/table/value/ResReference.java @@ -117,6 +117,9 @@ public void serializeToValuesXml(XmlSerializer serial, ResEntry entry) if (entry.getType().isBagType()) { asItem = true; } + if (asItem && "attr".equals(type)) { + asItem = false; + } String tagName = asItem ? "item" : type; serial.startTag(null, tagName);