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 b550e3d0..74470801 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 @@ -86,8 +86,8 @@ public class Main { } else if (opt.equalsIgnoreCase("if") || opt.equalsIgnoreCase("install-framework")) { cmdInstallFramework(commandLine); cmdFound = true; - } else if (opt.equalsIgnoreCase("u") || opt.equalsIgnoreCase("update-framework")) { - cmdUpdateFramework(commandLine); + } else if (opt.equalsIgnoreCase("empty-framework-dir")) { + cmdEmptyFrameworkDirectory(commandLine); cmdFound = true; } else if (opt.equalsIgnoreCase("publicize-resources")) { cmdPublicizeResources(commandLine); @@ -248,7 +248,7 @@ public class Main { new Androlib().publicizeResources(new File(apkName)); } - private static void cmdUpdateFramework(CommandLine cli) throws AndrolibException { + private static void cmdEmptyFrameworkDirectory(CommandLine cli) throws AndrolibException { ApkOptions apkOptions = new ApkOptions(); if (cli.hasOption("f") || cli.hasOption("force")) { @@ -258,7 +258,7 @@ public class Main { apkOptions.frameworkFolderLocation = cli.getOptionValue("p"); } - new Androlib(apkOptions).updateFramework(); + new Androlib(apkOptions).emptyFrameworkDirectory(); } private static void _version() { @@ -376,7 +376,6 @@ public class Main { // check for advance mode if (isAdvanceMode()) { - DecodeOptions.addOption(debugDecOption); DecodeOptions.addOption(noDbgOption); DecodeOptions.addOption(keepResOption); DecodeOptions.addOption(analysisOption); @@ -408,6 +407,10 @@ public class Main { frameOptions.addOption(tagOption); frameOptions.addOption(frameIfDirOption); + // add empty framework options + emptyFrameworkOptions.addOption(forceDecOption); + emptyFrameworkOptions.addOption(frameIfDirOption); + // add all, loop existing cats then manually add advance for (Object op : normalOptions.getOptions()) { allOptions.addOption((Option)op); @@ -466,8 +469,9 @@ public class Main { formatter.printHelp("apktool " + verbosityHelp() + "d[ecode] [options] ", DecodeOptions); formatter.printHelp("apktool " + verbosityHelp() + "b[uild] [options] ", BuildOptions); if (isAdvanceMode()) { - formatter.printHelp("apktool " + verbosityHelp() + "publicize-resources ", - "Make all framework resources public.", emptyOptions, null); + formatter.printHelp("apktool " + verbosityHelp() + "publicize-resources ", emptyOptions); + formatter.printHelp("apktool " + verbosityHelp() + "empty-framework-dir [options]", emptyFrameworkOptions); + System.out.println(""); } else { System.out.println(""); } @@ -550,6 +554,7 @@ public class Main { private final static Options frameOptions; private final static Options allOptions; private final static Options emptyOptions; + private final static Options emptyFrameworkOptions; static { //normal and advance usage output @@ -559,5 +564,6 @@ public class Main { frameOptions = new Options(); allOptions = new Options(); emptyOptions = new Options(); + emptyFrameworkOptions = new Options(); } } 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 15f4aa28..2bbc8e49 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 @@ -684,8 +684,8 @@ public class Androlib { mAndRes.installFramework(frameFile); } - public void updateFramework() throws AndrolibException { - mAndRes.updateFramework(); + public void emptyFrameworkDirectory() throws AndrolibException { + mAndRes.emptyFrameworkDirectory(); } public boolean isFrameworkApk(ResTable resTable) { 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 d767edea..161b122c 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 @@ -591,16 +591,29 @@ final public class AndrolibResources { throw new CantFindFrameworkResException(id); } - public void updateFramework() throws AndrolibException { + public void emptyFrameworkDirectory() throws AndrolibException { File dir = getFrameworkDir(); File apk; apk = new File(dir, "1.apk"); if (! apk.exists()) { - LOGGER.warning("Can't update framework, no file found at: " + apk.getAbsolutePath()); + LOGGER.warning("Can't empty framework directory, no file found at: " + apk.getAbsolutePath()); } else { - + try { + if (apk.exists() && dir.listFiles().length > 1 && ! apkOptions.forceDeleteFramework) { + LOGGER.warning("More than default framework detected. Please run command with `--force` parameter to wipe framework directory."); + } else { + for (File file : dir.listFiles()) { + if (file.isFile() && file.getName().endsWith(".apk")) { + LOGGER.info("Removing " + file.getName() + " framework file..."); + file.delete(); + } + } + } + } catch (NullPointerException e) { + throw new AndrolibException(e); + } } }