From bb421598803270ef084937339c7f4fdea9aaeafe Mon Sep 17 00:00:00 2001 From: IgorEisberg Date: Sat, 3 Jul 2021 21:26:16 +0300 Subject: [PATCH 1/8] style: rename vars for consistency --- .../src/main/java/brut/apktool/Main.java | 2 +- .../src/main/java/brut/androlib/Androlib.java | 4 ++-- .../main/java/brut/androlib/ApkDecoder.java | 18 +++++++++--------- .../java/brut/androlib/src/SmaliBuilder.java | 2 +- .../java/brut/androlib/src/SmaliDecoder.java | 16 ++++++++-------- 5 files changed, 21 insertions(+), 21 deletions(-) diff --git a/brut.apktool/apktool-cli/src/main/java/brut/apktool/Main.java b/brut.apktool/apktool-cli/src/main/java/brut/apktool/Main.java index 4139a59c..263b1fd8 100644 --- a/brut.apktool/apktool-cli/src/main/java/brut/apktool/Main.java +++ b/brut.apktool/apktool-cli/src/main/java/brut/apktool/Main.java @@ -152,7 +152,7 @@ public class Main { decoder.setAnalysisMode(true, false); } if (cli.hasOption("api") || cli.hasOption("api-level")) { - decoder.setApi(Integer.parseInt(cli.getOptionValue("api"))); + decoder.setApiLevel(Integer.parseInt(cli.getOptionValue("api"))); } if (cli.hasOption("o") || cli.hasOption("output")) { outDir = new File(cli.getOptionValue("o")); diff --git a/brut.apktool/apktool-lib/src/main/java/brut/androlib/Androlib.java b/brut.apktool/apktool-lib/src/main/java/brut/androlib/Androlib.java index 35fe942f..3d22a11a 100644 --- a/brut.apktool/apktool-lib/src/main/java/brut/androlib/Androlib.java +++ b/brut.apktool/apktool-lib/src/main/java/brut/androlib/Androlib.java @@ -81,7 +81,7 @@ public class Androlib { } } - public void decodeSourcesSmali(File apkFile, File outDir, String filename, boolean bakdeb, int api) + public void decodeSourcesSmali(File apkFile, File outDir, String filename, boolean bakDeb, int apiLevel) throws AndrolibException { try { File smaliDir; @@ -93,7 +93,7 @@ public class Androlib { OS.rmdir(smaliDir); smaliDir.mkdirs(); LOGGER.info("Baksmaling " + filename + "..."); - SmaliDecoder.decode(apkFile, smaliDir, filename, bakdeb, api); + SmaliDecoder.decode(apkFile, smaliDir, filename, bakDeb, apiLevel); } catch (BrutException ex) { throw new AndrolibException(ex); } diff --git a/brut.apktool/apktool-lib/src/main/java/brut/androlib/ApkDecoder.java b/brut.apktool/apktool-lib/src/main/java/brut/androlib/ApkDecoder.java index d0ddfbf1..e834dc08 100644 --- a/brut.apktool/apktool-lib/src/main/java/brut/androlib/ApkDecoder.java +++ b/brut.apktool/apktool-lib/src/main/java/brut/androlib/ApkDecoder.java @@ -71,8 +71,8 @@ public class ApkDecoder { mOutDir = outDir; } - public void setApi(int api) { - mApi = api; + public void setApiLevel(int apiLevel) { + mApiLevel = apiLevel; } public void decode() throws AndrolibException, IOException, DirectoryException { @@ -142,7 +142,7 @@ public class ApkDecoder { break; case DECODE_SOURCES_SMALI: case DECODE_SOURCES_SMALI_ONLY_MAIN_CLASSES: - mAndrolib.decodeSourcesSmali(mApkFile, outDir, "classes.dex", mBakDeb, mApi); + mAndrolib.decodeSourcesSmali(mApkFile, outDir, "classes.dex", mBakDeb, mApiLevel); break; } } @@ -158,11 +158,11 @@ public class ApkDecoder { mAndrolib.decodeSourcesRaw(mApkFile, outDir, file); break; case DECODE_SOURCES_SMALI: - mAndrolib.decodeSourcesSmali(mApkFile, outDir, file, mBakDeb, mApi); + mAndrolib.decodeSourcesSmali(mApkFile, outDir, file, mBakDeb, mApiLevel); break; case DECODE_SOURCES_SMALI_ONLY_MAIN_CLASSES: if (file.startsWith("classes") && file.endsWith(".dex")) { - mAndrolib.decodeSourcesSmali(mApkFile, outDir, file, mBakDeb, mApi); + mAndrolib.decodeSourcesSmali(mApkFile, outDir, file, mBakDeb, mApiLevel); } else { mAndrolib.decodeSourcesRaw(mApkFile, outDir, file); } @@ -235,12 +235,12 @@ public class ApkDecoder { Map sdkInfo = mResTable.getSdkInfo(); if (sdkInfo.get("targetSdkVersion") != null) { - mApi = Integer.parseInt(sdkInfo.get("targetSdkVersion")); + mApiLevel = Integer.parseInt(sdkInfo.get("targetSdkVersion")); } } - public void setBaksmaliDebugMode(boolean bakdeb) { - mBakDeb = bakdeb; + public void setBaksmaliDebugMode(boolean bakDeb) { + mBakDeb = bakDeb; } public void setForceDelete(boolean forceDelete) { @@ -471,5 +471,5 @@ public class ApkDecoder { private boolean mBakDeb = true; private Collection mUncompressedFiles; private boolean mAnalysisMode = false; - private int mApi = 15; + private int mApiLevel = 15; } diff --git a/brut.apktool/apktool-lib/src/main/java/brut/androlib/src/SmaliBuilder.java b/brut.apktool/apktool-lib/src/main/java/brut/androlib/src/SmaliBuilder.java index dec23f22..f1a17250 100644 --- a/brut.apktool/apktool-lib/src/main/java/brut/androlib/src/SmaliBuilder.java +++ b/brut.apktool/apktool-lib/src/main/java/brut/androlib/src/SmaliBuilder.java @@ -85,7 +85,7 @@ public class SmaliBuilder { private final ExtFile mSmaliDir; private final File mDexFile; - private int mApiLevel = 0; + private final int mApiLevel; private final static Logger LOGGER = Logger.getLogger(SmaliBuilder.class.getName()); } diff --git a/brut.apktool/apktool-lib/src/main/java/brut/androlib/src/SmaliDecoder.java b/brut.apktool/apktool-lib/src/main/java/brut/androlib/src/SmaliDecoder.java index b46131c3..37dab151 100644 --- a/brut.apktool/apktool-lib/src/main/java/brut/androlib/src/SmaliDecoder.java +++ b/brut.apktool/apktool-lib/src/main/java/brut/androlib/src/SmaliDecoder.java @@ -31,17 +31,17 @@ import java.io.IOException; public class SmaliDecoder { - public static void decode(File apkFile, File outDir, String dexName, boolean bakdeb, int api) + public static void decode(File apkFile, File outDir, String dexName, boolean bakDeb, int apiLevel) throws AndrolibException { - new SmaliDecoder(apkFile, outDir, dexName, bakdeb, api).decode(); + new SmaliDecoder(apkFile, outDir, dexName, bakDeb, apiLevel).decode(); } - private SmaliDecoder(File apkFile, File outDir, String dexName, boolean bakdeb, int api) { + private SmaliDecoder(File apkFile, File outDir, String dexName, boolean bakDeb, int apiLevel) { mApkFile = apkFile; - mOutDir = outDir; + mOutDir = outDir; mDexFile = dexName; - mBakDeb = bakdeb; - mApi = api; + mBakDeb = bakDeb; + mApiLevel = apiLevel; } private void decode() throws AndrolibException { @@ -67,7 +67,7 @@ public class SmaliDecoder { } // create the container - MultiDexContainer container = DexFileFactory.loadDexContainer(mApkFile, Opcodes.forApi(mApi)); + MultiDexContainer container = DexFileFactory.loadDexContainer(mApkFile, Opcodes.forApi(mApiLevel)); MultiDexContainer.DexEntry dexEntry; DexBackedDexFile dexFile; @@ -105,5 +105,5 @@ public class SmaliDecoder { private final File mOutDir; private final String mDexFile; private final boolean mBakDeb; - private final int mApi; + private final int mApiLevel; } From 992de66bac56092b1f82abb8d8c61ed852ebae80 Mon Sep 17 00:00:00 2001 From: IgorEisberg Date: Sat, 3 Jul 2021 22:17:00 +0300 Subject: [PATCH 2/8] Handle setAnalysisMode properly --- .../apktool-cli/src/main/java/brut/apktool/Main.java | 2 +- .../src/main/java/brut/androlib/ApkDecoder.java | 11 +++-------- 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/brut.apktool/apktool-cli/src/main/java/brut/apktool/Main.java b/brut.apktool/apktool-cli/src/main/java/brut/apktool/Main.java index 263b1fd8..9d426a5a 100644 --- a/brut.apktool/apktool-cli/src/main/java/brut/apktool/Main.java +++ b/brut.apktool/apktool-cli/src/main/java/brut/apktool/Main.java @@ -149,7 +149,7 @@ public class Main { decoder.setFrameworkDir(cli.getOptionValue("p")); } if (cli.hasOption("m") || cli.hasOption("match-original")) { - decoder.setAnalysisMode(true, false); + decoder.setAnalysisMode(true); } if (cli.hasOption("api") || cli.hasOption("api-level")) { decoder.setApiLevel(Integer.parseInt(cli.getOptionValue("api"))); diff --git a/brut.apktool/apktool-lib/src/main/java/brut/androlib/ApkDecoder.java b/brut.apktool/apktool-lib/src/main/java/brut/androlib/ApkDecoder.java index e834dc08..25c6045f 100644 --- a/brut.apktool/apktool-lib/src/main/java/brut/androlib/ApkDecoder.java +++ b/brut.apktool/apktool-lib/src/main/java/brut/androlib/ApkDecoder.java @@ -103,7 +103,6 @@ public class ApkDecoder { mAndrolib.decodeResourcesRaw(mApkFile, outDir); if (mForceDecodeManifest == FORCE_DECODE_MANIFEST_FULL) { setTargetSdkVersion(); - setAnalysisMode(mAnalysisMode, true); // done after raw decoding of resources because copyToDir overwrites dest files if (hasManifest()) { @@ -113,7 +112,6 @@ public class ApkDecoder { break; case DECODE_RESOURCES_FULL: setTargetSdkVersion(); - setAnalysisMode(mAnalysisMode, true); if (hasManifest()) { mAndrolib.decodeManifestWithResources(mApkFile, outDir, getResTable()); @@ -216,14 +214,10 @@ public class ApkDecoder { mDecodeAssets = mode; } - public void setAnalysisMode(boolean mode, boolean pass) throws AndrolibException{ + public void setAnalysisMode(boolean mode) { mAnalysisMode = mode; - // only set mResTable, once it exists - if (pass) { - if (mResTable == null) { - mResTable = getResTable(); - } + if (mResTable != null) { mResTable.setAnalysisMode(mode); } } @@ -268,6 +262,7 @@ public class ApkDecoder { "Apk doesn't contain either AndroidManifest.xml file or resources.arsc file"); } mResTable = mAndrolib.getResTable(mApkFile, hasResources); + mResTable.setAnalysisMode(mAnalysisMode); } return mResTable; } From 1fd3f52b9ddfe9048960cc8055ed128ce3d30c3c Mon Sep 17 00:00:00 2001 From: IgorEisberg Date: Sat, 3 Jul 2021 22:35:59 +0300 Subject: [PATCH 3/8] clean: setTargetSdkVersion used before manifest was decoded --- .../src/main/java/brut/androlib/ApkDecoder.java | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/brut.apktool/apktool-lib/src/main/java/brut/androlib/ApkDecoder.java b/brut.apktool/apktool-lib/src/main/java/brut/androlib/ApkDecoder.java index 25c6045f..cffaca4e 100644 --- a/brut.apktool/apktool-lib/src/main/java/brut/androlib/ApkDecoder.java +++ b/brut.apktool/apktool-lib/src/main/java/brut/androlib/ApkDecoder.java @@ -102,8 +102,6 @@ public class ApkDecoder { case DECODE_RESOURCES_NONE: mAndrolib.decodeResourcesRaw(mApkFile, outDir); if (mForceDecodeManifest == FORCE_DECODE_MANIFEST_FULL) { - setTargetSdkVersion(); - // done after raw decoding of resources because copyToDir overwrites dest files if (hasManifest()) { mAndrolib.decodeManifestWithResources(mApkFile, outDir, getResTable()); @@ -111,8 +109,6 @@ public class ApkDecoder { } break; case DECODE_RESOURCES_FULL: - setTargetSdkVersion(); - if (hasManifest()) { mAndrolib.decodeManifestWithResources(mApkFile, outDir, getResTable()); } @@ -222,17 +218,6 @@ public class ApkDecoder { } } - public void setTargetSdkVersion() throws AndrolibException { - if (mResTable == null) { - mResTable = mAndrolib.getResTable(mApkFile); - } - - Map sdkInfo = mResTable.getSdkInfo(); - if (sdkInfo.get("targetSdkVersion") != null) { - mApiLevel = Integer.parseInt(sdkInfo.get("targetSdkVersion")); - } - } - public void setBaksmaliDebugMode(boolean bakDeb) { mBakDeb = bakDeb; } From 204b742cf0ecb958c9cbb9a1121e27219fcd17bb Mon Sep 17 00:00:00 2001 From: IgorEisberg Date: Sat, 3 Jul 2021 22:46:11 +0300 Subject: [PATCH 4/8] Avoid abuse of getResTable calls and unneeded checks --- .../src/main/java/brut/androlib/Androlib.java | 2 +- .../main/java/brut/androlib/ApkDecoder.java | 39 ++++++++++--------- 2 files changed, 22 insertions(+), 19 deletions(-) diff --git a/brut.apktool/apktool-lib/src/main/java/brut/androlib/Androlib.java b/brut.apktool/apktool-lib/src/main/java/brut/androlib/Androlib.java index 3d22a11a..ff4a2510 100644 --- a/brut.apktool/apktool-lib/src/main/java/brut/androlib/Androlib.java +++ b/brut.apktool/apktool-lib/src/main/java/brut/androlib/Androlib.java @@ -193,7 +193,7 @@ public class Androlib { return false; } - public void decodeUnknownFiles(ExtFile apkFile, File outDir, ResTable resTable) + public void decodeUnknownFiles(ExtFile apkFile, File outDir) throws AndrolibException { LOGGER.info("Copying unknown files..."); File unknownOut = new File(outDir, UNK_DIRNAME); diff --git a/brut.apktool/apktool-lib/src/main/java/brut/androlib/ApkDecoder.java b/brut.apktool/apktool-lib/src/main/java/brut/androlib/ApkDecoder.java index cffaca4e..c6fc4ba0 100644 --- a/brut.apktool/apktool-lib/src/main/java/brut/androlib/ApkDecoder.java +++ b/brut.apktool/apktool-lib/src/main/java/brut/androlib/ApkDecoder.java @@ -97,6 +97,9 @@ public class ApkDecoder { LOGGER.info("Using Apktool " + Androlib.getVersion() + " on " + mApkFile.getName()); + // recreate the resource table in case it was already created + mResTable = null; + if (hasResources()) { switch (mDecodeResources) { case DECODE_RESOURCES_NONE: @@ -168,7 +171,7 @@ public class ApkDecoder { } mAndrolib.decodeRawFiles(mApkFile, outDir, mDecodeAssets); - mAndrolib.decodeUnknownFiles(mApkFile, outDir, mResTable); + mAndrolib.decodeUnknownFiles(mApkFile, outDir); mUncompressedFiles = new ArrayList(); mAndrolib.recordUncompressedFiles(mApkFile, mUncompressedFiles); mAndrolib.writeOriginalFiles(mApkFile, outDir); @@ -324,8 +327,8 @@ public class ApkDecoder { meta.version = Androlib.getVersion(); meta.apkFileName = mApkFile.getName(); - if (mDecodeResources != DECODE_RESOURCES_NONE && (hasManifest() || hasResources())) { - meta.isFrameworkApk = mAndrolib.isFrameworkApk(getResTable()); + if (mResTable != null) { + meta.isFrameworkApk = mAndrolib.isFrameworkApk(mResTable); putUsesFramework(meta); putSdkInfo(meta); putPackageInfo(meta); @@ -340,7 +343,7 @@ public class ApkDecoder { } private void putUsesFramework(MetaInfo meta) throws AndrolibException { - Set pkgs = getResTable().listFramePackages(); + Set pkgs = mResTable.listFramePackages(); if (pkgs.isEmpty()) { return; } @@ -361,7 +364,7 @@ public class ApkDecoder { } private void putSdkInfo(MetaInfo meta) throws AndrolibException { - Map info = getResTable().getSdkInfo(); + Map info = mResTable.getSdkInfo(); if (info.size() > 0) { String refValue; if (info.get("minSdkVersion") != null) { @@ -387,12 +390,12 @@ public class ApkDecoder { } private void putPackageInfo(MetaInfo meta) throws AndrolibException { - String renamed = getResTable().getPackageRenamed(); - String original = getResTable().getPackageOriginal(); + String renamed = mResTable.getPackageRenamed(); + String original = mResTable.getPackageOriginal(); - int id = getResTable().getPackageId(); + int id = mResTable.getPackageId(); try { - id = getResTable().getPackage(renamed).getId(); + id = mResTable.getPackage(renamed).getId(); } catch (UndefinedResObjectException ignored) {} if (Strings.isNullOrEmpty(original)) { @@ -409,7 +412,7 @@ public class ApkDecoder { } private void putVersionInfo(MetaInfo meta) throws AndrolibException { - VersionInfo info = getResTable().getVersionInfo(); + VersionInfo info = mResTable.getVersionInfo(); String refValue = ResXmlPatcher.pullValueFromStrings(mOutDir, info.versionName); if (refValue != null) { info.versionName = refValue; @@ -417,6 +420,14 @@ public class ApkDecoder { meta.versionInfo = info; } + private void putSharedLibraryInfo(MetaInfo meta) { + meta.sharedLibrary = mResTable.getSharedLibrary(); + } + + private void putSparseResourcesInfo(MetaInfo meta) { + meta.sparseResources = mResTable.getSparseResources(); + } + private void putUnknownInfo(MetaInfo meta) { meta.unknownFiles = mAndrolib.mResUnknownFiles.getUnknownFiles(); } @@ -427,14 +438,6 @@ public class ApkDecoder { } } - private void putSparseResourcesInfo(MetaInfo meta) { - meta.sparseResources = mResTable.getSparseResources(); - } - - private void putSharedLibraryInfo(MetaInfo meta) { - meta.sharedLibrary = mResTable.getSharedLibrary(); - } - private final Androlib mAndrolib; private final static Logger LOGGER = Logger.getLogger(Androlib.class.getName()); From 1472b505416e87121dcab17fdcc3ba0e137a7e74 Mon Sep 17 00:00:00 2001 From: IgorEisberg Date: Sat, 3 Jul 2021 23:05:04 +0300 Subject: [PATCH 5/8] fix: pass opcodes=null for baksmali to auto-determine by dex version When DexBackedDexFile gets opcodes==null, it calls getDefaultOpcodes(dexVersion) which returns the appropriate opcodes for the given dex version. No hints are required for baksmali, but only needed for smali. https://github.com/JesusFreke/smali/blob/master/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/DexBackedDexFile.java#L83 --- .../src/main/java/brut/androlib/ApkDecoder.java | 14 +++++++------- .../main/java/brut/androlib/src/SmaliBuilder.java | 5 +---- .../main/java/brut/androlib/src/SmaliDecoder.java | 2 +- 3 files changed, 9 insertions(+), 12 deletions(-) diff --git a/brut.apktool/apktool-lib/src/main/java/brut/androlib/ApkDecoder.java b/brut.apktool/apktool-lib/src/main/java/brut/androlib/ApkDecoder.java index c6fc4ba0..113a2dc3 100644 --- a/brut.apktool/apktool-lib/src/main/java/brut/androlib/ApkDecoder.java +++ b/brut.apktool/apktool-lib/src/main/java/brut/androlib/ApkDecoder.java @@ -71,10 +71,6 @@ public class ApkDecoder { mOutDir = outDir; } - public void setApiLevel(int apiLevel) { - mApiLevel = apiLevel; - } - public void decode() throws AndrolibException, IOException, DirectoryException { try { File outDir = getOutDir(); @@ -221,6 +217,10 @@ public class ApkDecoder { } } + public void setApiLevel(int apiLevel) { + mApiLevel = apiLevel; + } + public void setBaksmaliDebugMode(boolean bakDeb) { mBakDeb = bakDeb; } @@ -420,11 +420,11 @@ public class ApkDecoder { meta.versionInfo = info; } - private void putSharedLibraryInfo(MetaInfo meta) { + private void putSharedLibraryInfo(MetaInfo meta) throws AndrolibException { meta.sharedLibrary = mResTable.getSharedLibrary(); } - private void putSparseResourcesInfo(MetaInfo meta) { + private void putSparseResourcesInfo(MetaInfo meta) throws AndrolibException { meta.sparseResources = mResTable.getSparseResources(); } @@ -454,5 +454,5 @@ public class ApkDecoder { private boolean mBakDeb = true; private Collection mUncompressedFiles; private boolean mAnalysisMode = false; - private int mApiLevel = 15; + private int mApiLevel = 0; } diff --git a/brut.apktool/apktool-lib/src/main/java/brut/androlib/src/SmaliBuilder.java b/brut.apktool/apktool-lib/src/main/java/brut/androlib/src/SmaliBuilder.java index f1a17250..5c2c456d 100644 --- a/brut.apktool/apktool-lib/src/main/java/brut/androlib/src/SmaliBuilder.java +++ b/brut.apktool/apktool-lib/src/main/java/brut/androlib/src/SmaliBuilder.java @@ -32,14 +32,11 @@ import java.io.InputStream; import java.util.logging.Logger; public class SmaliBuilder { + public static void build(ExtFile smaliDir, File dexFile, int apiLevel) throws AndrolibException { new SmaliBuilder(smaliDir, dexFile, apiLevel).build(); } - public static void build(ExtFile smaliDir, File dexFile) throws AndrolibException { - new SmaliBuilder(smaliDir, dexFile, 0).build(); - } - private SmaliBuilder(ExtFile smaliDir, File dexFile, int apiLevel) { mSmaliDir = smaliDir; mDexFile = dexFile; diff --git a/brut.apktool/apktool-lib/src/main/java/brut/androlib/src/SmaliDecoder.java b/brut.apktool/apktool-lib/src/main/java/brut/androlib/src/SmaliDecoder.java index 37dab151..46bbcd7f 100644 --- a/brut.apktool/apktool-lib/src/main/java/brut/androlib/src/SmaliDecoder.java +++ b/brut.apktool/apktool-lib/src/main/java/brut/androlib/src/SmaliDecoder.java @@ -67,7 +67,7 @@ public class SmaliDecoder { } // create the container - MultiDexContainer container = DexFileFactory.loadDexContainer(mApkFile, Opcodes.forApi(mApiLevel)); + MultiDexContainer container = DexFileFactory.loadDexContainer(mApkFile, mApiLevel > 0 ? Opcodes.forApi(mApiLevel) : null); MultiDexContainer.DexEntry dexEntry; DexBackedDexFile dexFile; From 83f9693633317251df0b2cdd2b12f7672c56adcd Mon Sep 17 00:00:00 2001 From: IgorEisberg Date: Sat, 3 Jul 2021 23:15:10 +0300 Subject: [PATCH 6/8] clean: get rid of useless throws --- .../src/main/java/brut/androlib/ApkDecoder.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/brut.apktool/apktool-lib/src/main/java/brut/androlib/ApkDecoder.java b/brut.apktool/apktool-lib/src/main/java/brut/androlib/ApkDecoder.java index 113a2dc3..812bfe65 100644 --- a/brut.apktool/apktool-lib/src/main/java/brut/androlib/ApkDecoder.java +++ b/brut.apktool/apktool-lib/src/main/java/brut/androlib/ApkDecoder.java @@ -67,7 +67,7 @@ public class ApkDecoder { mResTable = null; } - public void setOutDir(File outDir) throws AndrolibException { + public void setOutDir(File outDir) { mOutDir = outDir; } @@ -342,7 +342,7 @@ public class ApkDecoder { mAndrolib.writeMetaFile(mOutDir, meta); } - private void putUsesFramework(MetaInfo meta) throws AndrolibException { + private void putUsesFramework(MetaInfo meta) { Set pkgs = mResTable.listFramePackages(); if (pkgs.isEmpty()) { return; @@ -363,7 +363,7 @@ public class ApkDecoder { } } - private void putSdkInfo(MetaInfo meta) throws AndrolibException { + private void putSdkInfo(MetaInfo meta) { Map info = mResTable.getSdkInfo(); if (info.size() > 0) { String refValue; @@ -411,7 +411,7 @@ public class ApkDecoder { meta.packageInfo.forcedPackageId = String.valueOf(id); } - private void putVersionInfo(MetaInfo meta) throws AndrolibException { + private void putVersionInfo(MetaInfo meta) { VersionInfo info = mResTable.getVersionInfo(); String refValue = ResXmlPatcher.pullValueFromStrings(mOutDir, info.versionName); if (refValue != null) { @@ -420,11 +420,11 @@ public class ApkDecoder { meta.versionInfo = info; } - private void putSharedLibraryInfo(MetaInfo meta) throws AndrolibException { + private void putSharedLibraryInfo(MetaInfo meta) { meta.sharedLibrary = mResTable.getSharedLibrary(); } - private void putSparseResourcesInfo(MetaInfo meta) throws AndrolibException { + private void putSparseResourcesInfo(MetaInfo meta) { meta.sparseResources = mResTable.getSparseResources(); } From 88d3d0038c9639c7b5728f5b5ee7dd39e456a268 Mon Sep 17 00:00:00 2001 From: IgorEisberg Date: Sat, 3 Jul 2021 23:24:42 +0300 Subject: [PATCH 7/8] style: organize some using statements for consistency --- .../apktool-lib/src/main/java/brut/androlib/Androlib.java | 3 +-- .../src/main/java/brut/androlib/res/AndrolibResources.java | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/brut.apktool/apktool-lib/src/main/java/brut/androlib/Androlib.java b/brut.apktool/apktool-lib/src/main/java/brut/androlib/Androlib.java index ff4a2510..151f9786 100644 --- a/brut.apktool/apktool-lib/src/main/java/brut/androlib/Androlib.java +++ b/brut.apktool/apktool-lib/src/main/java/brut/androlib/Androlib.java @@ -31,8 +31,7 @@ import brut.androlib.src.SmaliBuilder; import brut.androlib.src.SmaliDecoder; import brut.common.BrutException; import brut.directory.*; -import brut.util.BrutIO; -import brut.util.OS; +import brut.util.*; import java.io.*; import java.util.*; import java.util.logging.Logger; diff --git a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/AndrolibResources.java b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/AndrolibResources.java index 6e6f221e..58ffd0d4 100644 --- a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/AndrolibResources.java +++ b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/AndrolibResources.java @@ -26,12 +26,12 @@ import brut.androlib.res.data.*; import brut.androlib.res.decoder.*; import brut.androlib.res.decoder.ARSCDecoder.ARSCData; import brut.androlib.res.decoder.ARSCDecoder.FlagsOffset; -import brut.directory.*; import brut.androlib.res.util.ExtMXSerializer; import brut.androlib.res.util.ExtXmlSerializer; import brut.androlib.res.xml.ResValuesXmlSerializable; import brut.androlib.res.xml.ResXmlPatcher; import brut.common.BrutException; +import brut.directory.*; import brut.util.*; import org.apache.commons.io.IOUtils; import org.xmlpull.v1.XmlSerializer; From 1ed1076a8478cf929d0e507bd173636e16e7f8ac Mon Sep 17 00:00:00 2001 From: IgorEisberg Date: Sun, 4 Jul 2021 00:16:22 +0300 Subject: [PATCH 8/8] correction: don't clear resource table if it was already loaded --- .../apktool-lib/src/main/java/brut/androlib/ApkDecoder.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/brut.apktool/apktool-lib/src/main/java/brut/androlib/ApkDecoder.java b/brut.apktool/apktool-lib/src/main/java/brut/androlib/ApkDecoder.java index 812bfe65..9accf1bb 100644 --- a/brut.apktool/apktool-lib/src/main/java/brut/androlib/ApkDecoder.java +++ b/brut.apktool/apktool-lib/src/main/java/brut/androlib/ApkDecoder.java @@ -93,9 +93,6 @@ public class ApkDecoder { LOGGER.info("Using Apktool " + Androlib.getVersion() + " on " + mApkFile.getName()); - // recreate the resource table in case it was already created - mResTable = null; - if (hasResources()) { switch (mDecodeResources) { case DECODE_RESOURCES_NONE: