diff --git a/CHANGES b/CHANGES index efb93d85..cceda86d 100644 --- a/CHANGES +++ b/CHANGES @@ -5,6 +5,7 @@ v1.5.3 (TBA) -Updated to Gradle 1.4 -Updated known bytes for configurations to 38 (from addition of layout direction) -Fixed NPE when handling odex apks even with --no-src specified. (Thanks Rodrigo Chiossi) +-Fixed (issue #427) - Correctly handles `--frame-path` on [b]uild v1.5.2 (Released February 2 - 2013) Codename: Bug Fixes -Fixed (issue #299) - output smali filename errors to screen during rebuild instead of filestream 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 c354b27c..179af105 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 @@ -120,7 +120,9 @@ public class Main { decoder.setKeepBrokenResources(true); } else if ("--frame-path".equals(opt)) { i++; - System.out.println("Using Framework Directory: " + args[i]); + if (i >= args.length) { + throw new InvalidArgsError(); + } decoder.setFrameworkDir(args[i]); } else { throw new InvalidArgsError(); @@ -172,6 +174,8 @@ public class Main { private static void cmdBuild(String[] args) throws BrutException { + Androlib instance = new Androlib(); + // hold all the fields HashMap flags = new HashMap(); flags.put("forceBuildAll", false); @@ -199,6 +203,9 @@ public class Main { } else if ("-a".equals(opt) || "--aapt".equals(opt)) { mAaptPath = args[i + 1]; skip = 1; + } else if ("--frame-path".equals(opt)) { + i++; + instance.setFrameworkFolder(args[i]); } else if ("-o".equals(opt) || "--original".equals(opt)) { if (args.length >= 4) { throw new InvalidArgsError(); @@ -227,7 +234,7 @@ public class Main { throw new InvalidArgsError(); } - new Androlib().build(new File(appDirName), outFile, flags, mOrigApk, + instance.build(new File(appDirName), outFile, flags, mOrigApk, mAaptPath); } @@ -331,6 +338,8 @@ public class Main { + " Build in debug mode. Check project page for more info.\n" + " -a, --aapt\n" + " Loads aapt from specified location.\n" + + " --frame-path \n" + + " Use the specified directory for framework files\n" + "\n" + " if|install-framework [] --frame-path [] \n" + " Install framework file to your system.\n" 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 8a3f74c0..e619c162 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 @@ -534,6 +534,10 @@ public class Androlib { public void setApkFile(File apkFile) { mOrigApkFile = new ExtFile(apkFile); } + + public void setFrameworkFolder(String path) { + mAndRes.setFrameworkFolder(path); + } private ExtFile mOrigApkFile = null; private String mAaptPath = null; 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 f360dba5..c5b4627e 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 @@ -704,12 +704,11 @@ final public class AndrolibResources { 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"; + path = System.getProperty("user.home") + File.separatorChar + "Library/apktool/framework"; } else { - path = System.getProperty("user.home") + File.separatorChar - + "apktool" + File.separatorChar + "framework"; + path = System.getProperty("user.home") + File.separatorChar + "apktool" + File.separatorChar + "framework"; } + File dir = new File(path); if (!dir.exists()) { if (!dir.mkdirs()) {