]> git.saurik.com Git - android/aapt.git/commitdiff
Add single crunch command to aapt. do not merge.
authorXavier Ducrohet <xav@android.com>
Fri, 21 Dec 2012 17:54:02 +0000 (09:54 -0800)
committerXavier Ducrohet <xav@android.com>
Wed, 2 Jan 2013 23:41:52 +0000 (15:41 -0800)
Previously the crunch command would work on a full res folder
and output a full res folder (with only the drawables). This
was only used in the SDK.

The incremental logic is moved to the SDK build system so we
change the crunch command (or rather add a new one) to only
crunch a single file.

(cherry picked from commit b1f6ad82dd8d1702617a757a88430604b3131fac)

Change-Id: I3653f67ee321eac37cb8a6d228b1ef6d104ff0be

Bundle.h
Command.cpp
Main.cpp
Main.h

index fde3bd68f834606299e816108d202c6246826f17..5089b9de28a83d53d67580fc2ff0bf4efb15f9fa 100644 (file)
--- a/Bundle.h
+++ b/Bundle.h
@@ -38,6 +38,7 @@ typedef enum Command {
     kCommandRemove,
     kCommandPackage,
     kCommandCrunch,
+    kCommandSingleCrunch,
 } Command;
 
 /*
@@ -62,6 +63,7 @@ public:
           mVersionCode(NULL), mVersionName(NULL), mCustomPackage(NULL), mExtraPackages(NULL),
           mMaxResVersion(NULL), mDebugMode(false), mNonConstantId(false), mProduct(NULL),
           mUseCrunchCache(false), mErrorOnFailedInsert(false), mOutputTextSymbols(NULL),
+          mSingleCrunchInputFile(NULL), mSingleCrunchOutputFile(NULL),
           mArgc(0), mArgv(NULL)
         {}
     ~Bundle(void) {}
@@ -176,6 +178,10 @@ public:
     bool getUseCrunchCache() const { return mUseCrunchCache; }
     const char* getOutputTextSymbols() const { return mOutputTextSymbols; }
     void setOutputTextSymbols(const char* val) { mOutputTextSymbols = val; }
+    const char* getSingleCrunchInputFile() const { return mSingleCrunchInputFile; }
+    void setSingleCrunchInputFile(const char* val) { mSingleCrunchInputFile = val; }
+    const char* getSingleCrunchOutputFile() const { return mSingleCrunchOutputFile; }
+    void setSingleCrunchOutputFile(const char* val) { mSingleCrunchOutputFile = val; }
 
     /*
      * Set and get the file specification.
@@ -283,6 +289,8 @@ private:
     bool        mUseCrunchCache;
     bool        mErrorOnFailedInsert;
     const char* mOutputTextSymbols;
+    const char* mSingleCrunchInputFile;
+    const char* mSingleCrunchOutputFile;
 
     /* file specification */
     int         mArgc;
index 0a5e5904a95a530c1b1fbdde2942418a817f0dc8..b98925bd184cc0415735af4be1c27385a4dc0869 100644 (file)
@@ -7,6 +7,7 @@
 #include "Bundle.h"
 #include "ResourceFilter.h"
 #include "ResourceTable.h"
+#include "Images.h"
 #include "XMLNode.h"
 
 #include <utils/Log.h>
@@ -1839,6 +1840,21 @@ int doCrunch(Bundle* bundle)
     return NO_ERROR;
 }
 
+/*
+ * Do PNG Crunching on a single flag
+ *  -i points to a single png file
+ *  -o points to a single png output file
+ */
+int doSingleCrunch(Bundle* bundle)
+{
+    fprintf(stdout, "Crunching single PNG file: %s\n", bundle->getSingleCrunchInputFile());
+    fprintf(stdout, "\tOutput file: %s\n", bundle->getSingleCrunchOutputFile());
+
+    String8 input(bundle->getSingleCrunchInputFile());
+    String8 output(bundle->getSingleCrunchOutputFile());
+    return preProcessImageToCache(bundle, input, output);
+}
+
 char CONSOLE_DATA[2925] = {
     32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
     32, 32, 32, 32, 32, 32, 32, 95, 46, 32, 32, 32, 32, 32, 32, 32, 32, 32,
index f398de0630b981cdd655da2c1322508cf8b60aa1..32fecb29034c4f742a6a2dee04f4cb142877ea83 100644 (file)
--- a/Main.cpp
+++ b/Main.cpp
@@ -85,7 +85,11 @@ void usage(void)
         "   Add specified files to Zip-compatible archive.\n\n", gProgName);
     fprintf(stderr,
         " %s c[runch] [-v] -S resource-sources ... -C output-folder ...\n"
-        "   Do PNG preprocessing and store the results in output folder.\n\n", gProgName);
+        "   Do PNG preprocessing on one or several resource folders\n"
+        "   and store the results in the output folder.\n\n", gProgName);
+    fprintf(stderr,
+        " %s s[ingleCrunch] [-v] -i input-file -o outputfile\n"
+        "   Do PNG preprocessing on a single file.\n\n", gProgName);
     fprintf(stderr,
         " %s v[ersion]\n"
         "   Print program version.\n\n", gProgName);
@@ -203,13 +207,14 @@ int handleCommand(Bundle* bundle)
     //    printf("  %d: '%s'\n", i, bundle->getFileSpecEntry(i));
 
     switch (bundle->getCommand()) {
-    case kCommandVersion:   return doVersion(bundle);
-    case kCommandList:      return doList(bundle);
-    case kCommandDump:      return doDump(bundle);
-    case kCommandAdd:       return doAdd(bundle);
-    case kCommandRemove:    return doRemove(bundle);
-    case kCommandPackage:   return doPackage(bundle);
-    case kCommandCrunch:    return doCrunch(bundle);
+    case kCommandVersion:      return doVersion(bundle);
+    case kCommandList:         return doList(bundle);
+    case kCommandDump:         return doDump(bundle);
+    case kCommandAdd:          return doAdd(bundle);
+    case kCommandRemove:       return doRemove(bundle);
+    case kCommandPackage:      return doPackage(bundle);
+    case kCommandCrunch:       return doCrunch(bundle);
+    case kCommandSingleCrunch: return doSingleCrunch(bundle);
     default:
         fprintf(stderr, "%s: requested command not yet supported\n", gProgName);
         return 1;
@@ -249,6 +254,8 @@ int main(int argc, char* const argv[])
         bundle.setCommand(kCommandPackage);
     else if (argv[1][0] == 'c')
         bundle.setCommand(kCommandCrunch);
+    else if (argv[1][0] == 's')
+        bundle.setCommand(kCommandSingleCrunch);
     else {
         fprintf(stderr, "ERROR: Unknown command '%s'\n", argv[1]);
         wantUsage = true;
@@ -427,6 +434,28 @@ int main(int argc, char* const argv[])
                 convertPath(argv[0]);
                 bundle.setCrunchedOutputDir(argv[0]);
                 break;
+            case 'i':
+                argc--;
+                argv++;
+                if (!argc) {
+                    fprintf(stderr, "ERROR: No argument supplied for '-i' option\n");
+                    wantUsage = true;
+                    goto bail;
+                }
+                convertPath(argv[0]);
+                bundle.setSingleCrunchInputFile(argv[0]);
+                break;
+            case 'o':
+                argc--;
+                argv++;
+                if (!argc) {
+                    fprintf(stderr, "ERROR: No argument supplied for '-o' option\n");
+                    wantUsage = true;
+                    goto bail;
+                }
+                convertPath(argv[0]);
+                bundle.setSingleCrunchOutputFile(argv[0]);
+                break;
             case '0':
                 argc--;
                 argv++;
diff --git a/Main.h b/Main.h
index d20c601a0c7726dcc561f17ef78156fccdb0c066..a6b39ac418dc11ecb78827cdd5e6c5a43a680e5f 100644 (file)
--- a/Main.h
+++ b/Main.h
@@ -29,6 +29,7 @@ extern int doAdd(Bundle* bundle);
 extern int doRemove(Bundle* bundle);
 extern int doPackage(Bundle* bundle);
 extern int doCrunch(Bundle* bundle);
+extern int doSingleCrunch(Bundle* bundle);
 
 extern int calcPercent(long uncompressedLen, long compressedLen);