From 1826c7f65f90515f75ebb82bfe97db344e2fbfee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ryszard=20Wi=C5=9Bniewski?= Date: Wed, 2 Jun 2010 09:32:12 +0200 Subject: [PATCH] Added apktool.yml file for storing project meta-data. --- src/brut/androlib/Androlib.java | 35 +++++++++++++++++++++++++++++++ src/brut/androlib/ApkDecoder.java | 9 ++++++++ 2 files changed, 44 insertions(+) diff --git a/src/brut/androlib/Androlib.java b/src/brut/androlib/Androlib.java index 16a8ef5d..b7ac28e3 100644 --- a/src/brut/androlib/Androlib.java +++ b/src/brut/androlib/Androlib.java @@ -33,7 +33,10 @@ import java.io.*; import java.nio.MappedByteBuffer; import java.nio.channels.FileChannel.MapMode; import java.util.List; +import java.util.Map; import java.util.logging.Logger; +import org.yaml.snakeyaml.DumperOptions; +import org.yaml.snakeyaml.Yaml; /** * @author Ryszard Wiśniewski @@ -111,6 +114,37 @@ public class Androlib { } } + public void writeMetaFile(File mOutDir, Map meta) + throws AndrolibException { + DumperOptions options = new DumperOptions(); + options.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK); + options.setIndent(4); + Yaml yaml = new Yaml(options); + try { + yaml.dump(meta, new FileWriter(new File(mOutDir, "apktool.yml"))); + } catch (IOException ex) { + throw new AndrolibException(ex); + } + } + + public Map readMetaFile(ExtFile appDir) + throws AndrolibException { + InputStream in = null; + try { + in = appDir.getDirectory().getFileInput("apktool.yml"); + Yaml yaml = new Yaml(); + return (Map) yaml.load(in); + } catch (DirectoryException ex) { + throw new AndrolibException(ex); + } finally { + if (in != null) { + try { + in.close(); + } catch (IOException ex) {} + } + } + } + public void build(File appDir, boolean forceBuildAll, boolean debug) throws AndrolibException { build(new ExtFile(appDir), forceBuildAll, debug); @@ -119,6 +153,7 @@ public class Androlib { public void build(ExtFile appDir, boolean forceBuildAll, boolean debug) throws AndrolibException { boolean framework = mAndRes.detectWhetherAppIsFramework(appDir); + Map meta = readMetaFile(appDir); new File(appDir, APK_DIRNAME).mkdirs(); buildSources(appDir, forceBuildAll, debug); diff --git a/src/brut/androlib/ApkDecoder.java b/src/brut/androlib/ApkDecoder.java index 26a29dec..c2259205 100644 --- a/src/brut/androlib/ApkDecoder.java +++ b/src/brut/androlib/ApkDecoder.java @@ -24,6 +24,8 @@ import brut.directory.Directory; import brut.directory.DirectoryException; import brut.util.OS; import java.io.File; +import java.util.LinkedHashMap; +import java.util.Map; /** * @author Ryszard Wiśniewski @@ -101,6 +103,7 @@ public class ApkDecoder { } } mAndrolib.decodeRawFiles(mApkFile, outDir); + writeMetaFile(); } public void setDecodeSources(short mode) throws AndrolibException { @@ -157,6 +160,12 @@ public class ApkDecoder { return mOutDir; } + private void writeMetaFile() throws AndrolibException { + Map meta = new LinkedHashMap(); + meta.put("version", Androlib.getVersion()); + mAndrolib.writeMetaFile(mOutDir, meta); + } + private final Androlib mAndrolib; private ExtFile mApkFile;