From 5d383e4a62d7c31ae1659de8ee499007e4e0cab8 Mon Sep 17 00:00:00 2001 From: Marc Miltenberger Date: Wed, 28 Jun 2017 11:24:40 +0200 Subject: [PATCH 1/2] Basically, on import getResSpec is called multiple times and very often throws an exception. Returning null is much faster and therefore in cases where the caller does not rely on a thrown exception, it may use the new getResSpecUnsafe method. --- .../src/main/java/brut/androlib/res/data/ResResSpec.java | 8 ++++---- .../src/main/java/brut/androlib/res/data/ResTypeSpec.java | 6 +++++- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/ResResSpec.java b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/ResResSpec.java index ecac54bf..a11e2742 100755 --- a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/ResResSpec.java +++ b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/ResResSpec.java @@ -35,12 +35,12 @@ public class ResResSpec { this.mId = id; String cleanName; - try { - ResResSpec resResSpec = type.getResSpec(name); + ResResSpec resResSpec = type.getResSpecUnsafe(name); + if (resResSpec != null) cleanName = name + "_APKTOOL_DUPLICATENAME_" + id.toString(); - } catch (AndrolibException ex) { + else cleanName = (name.isEmpty() ? ("APKTOOL_DUMMYVAL_" + id.toString()) : name); - } + this.mName = cleanName; this.mPackage = pkg; this.mType = type; diff --git a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/ResTypeSpec.java b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/ResTypeSpec.java index b486b0b6..40022323 100644 --- a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/ResTypeSpec.java +++ b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/ResTypeSpec.java @@ -62,13 +62,17 @@ public final class ResTypeSpec { } public ResResSpec getResSpec(String name) throws AndrolibException { - ResResSpec spec = mResSpecs.get(name); + ResResSpec spec = getResSpecUnsafe(name); if (spec == null) { throw new UndefinedResObject(String.format("resource spec: %s/%s", getName(), name)); } return spec; } + public ResResSpec getResSpecUnsafe(String name) { + return mResSpecs.get(name); + } + public void removeResSpec(ResResSpec spec) throws AndrolibException { mResSpecs.remove(spec.getName()); } From 40ece96a1ae397dd07970f0f4e549d7978bb0ae9 Mon Sep 17 00:00:00 2001 From: Connor Tumbleson Date: Wed, 28 Jun 2017 10:09:15 -0400 Subject: [PATCH 2/2] remove shorthand if statement syntax --- .../src/main/java/brut/androlib/res/data/ResResSpec.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/ResResSpec.java b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/ResResSpec.java index a11e2742..d9b3808b 100755 --- a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/ResResSpec.java +++ b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/ResResSpec.java @@ -36,10 +36,11 @@ public class ResResSpec { String cleanName; ResResSpec resResSpec = type.getResSpecUnsafe(name); - if (resResSpec != null) + if (resResSpec != null) { cleanName = name + "_APKTOOL_DUPLICATENAME_" + id.toString(); - else + } else { cleanName = (name.isEmpty() ? ("APKTOOL_DUMMYVAL_" + id.toString()) : name); + } this.mName = cleanName; this.mPackage = pkg;