From f83383a33b192e63cd85c0060586088d4ecaec18 Mon Sep 17 00:00:00 2001 From: Robert Mays Jr Date: Thu, 29 Nov 2012 18:30:21 -0500 Subject: [PATCH] Support for --framework command line argument to specify the location of the framework files (previously forced you to keep them in the home folder) --- .../apktool-cli/src/main/java/brut/apktool/Main.java | 8 +++++++- .../src/main/java/brut/androlib/ApkDecoder.java | 6 ++++++ .../java/brut/androlib/res/AndrolibResources.java | 12 +++++++++--- 3 files changed, 22 insertions(+), 4 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 a643c5dc..83f43374 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 @@ -111,7 +111,11 @@ public class Main { decoder.setDecodeResources(ApkDecoder.DECODE_RESOURCES_NONE); } else if ("--keep-broken-res".equals(opt)) { decoder.setKeepBrokenResources(true); - } else { + } else if ("--framework".equals(opt)) { + i++; + System.out.println("Using Framework Directory: " + args[i]); + decoder.setFrameworkDir(args[i]); + } else { throw new InvalidArgsError(); } } @@ -262,6 +266,8 @@ public class Main { " Force delete destination directory.\n" + " -t , --frame-tag \n" + " Try to use framework files tagged by .\n" + + " --framework \n" + + " Use the specified directory for framework files" + " --keep-broken-res\n" + " Use if there was an error and some resources were dropped, e.g.:\n" + " \"Invalid config flags detected. Dropping resources\", but you\n" + 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 e1ca29a4..87f46b68 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 @@ -157,6 +157,10 @@ public class ApkDecoder { public void setKeepBrokenResources(boolean keepBrokenResources) { mKeepBrokenResources = keepBrokenResources; } + + public void setFrameworkDir(String dir) { + mFrameworkDir = dir; + } public ResTable getResTable() throws AndrolibException { if (mResTable == null) { @@ -167,6 +171,7 @@ public class ApkDecoder { "Apk doesn't contain either AndroidManifest.xml file or resources.arsc file"); } AndrolibResources.sKeepBroken = mKeepBrokenResources; + AndrolibResources.sFrameworkFolder = mFrameworkDir; mResTable = mAndrolib.getResTable(mApkFile, hasResources); mResTable.setFrameTag(mFrameTag); } @@ -271,5 +276,6 @@ public class ApkDecoder { private boolean mForceDelete = false; private String mFrameTag; private boolean mKeepBrokenResources = false; + private String mFrameworkDir = null; private boolean mBakDeb = true; } 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 0d5e656b..f3a9d2de 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 @@ -545,8 +545,11 @@ final public class AndrolibResources { private File getFrameworkDir() throws AndrolibException { String path; - /* store in user-home, for Mac OS X */ - if (System.getProperty("os.name").equals("Mac OS X")) { + /* if a framework path was specified on the command line, use it */ + if (sFrameworkFolder != null) { + path = sFrameworkFolder; + } else if (System.getProperty("os.name").equals("Mac OS X")) { + /* store in user-home, for Mac OS X */ path = System.getProperty("user.home") + File.separatorChar + "Library/apktool/framework"; } else { @@ -556,6 +559,9 @@ final public class AndrolibResources { File dir = new File(path); if (! dir.exists()) { if (! dir.mkdirs()) { + if (sFrameworkFolder != null) { + System.out.println("Can't create Framework directory: " + dir); + } throw new AndrolibException("Can't create directory: " + dir); } } @@ -573,7 +579,7 @@ final public class AndrolibResources { // TODO: dirty static hack. I have to refactor decoding mechanisms. public static boolean sKeepBroken = false; - + public static String sFrameworkFolder = null; private final static Logger LOGGER = Logger.getLogger(AndrolibResources.class.getName());