Bundle.h revision 282e181b58cf72b6ca770dc7ca5f91f135444502
19720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//
29720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Copyright 2006 The Android Open Source Project
39720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//
49720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// State bundle.  Used to pass around stuff like command-line args.
59720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//
69720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef __BUNDLE_H
79720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define __BUNDLE_H
89720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
99720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#include <stdlib.h>
109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#include <utils/Log.h>
119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#include <utils/threads.h>
129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#include <utils/List.h>
139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#include <utils/Errors.h>
149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#include <utils/String8.h>
159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#include <utils/Vector.h>
169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockenum {
189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    SDK_CUPCAKE = 3,
199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    SDK_DONUT = 4,
209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    SDK_ECLAIR = 5,
219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    SDK_ECLAIR_0_1 = 6,
229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    SDK_MR1 = 7,
239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    SDK_FROYO = 8,
249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    SDK_HONEYCOMB_MR2 = 13,
259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    SDK_ICE_CREAM_SANDWICH = 14,
269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    SDK_ICE_CREAM_SANDWICH_MR1 = 15,
279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/*
309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Things we can do.
319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block */
329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktypedef enum Command {
339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    kCommandUnknown = 0,
349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    kCommandVersion,
359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    kCommandList,
369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    kCommandDump,
379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    kCommandAdd,
389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    kCommandRemove,
399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    kCommandPackage,
409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    kCommandCrunch,
419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    kCommandSingleCrunch,
429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} Command;
439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/*
459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Bundle of goodies, including everything specified on the command line.
469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block */
479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass Bundle {
489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    Bundle(void)
509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block        : mCmd(kCommandUnknown), mVerbose(false), mAndroidList(false),
519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block          mForce(false), mGrayscaleTolerance(0), mMakePackageDirs(false),
529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block          mUpdate(false), mExtending(false),
539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block          mRequireLocalization(false), mPseudolocalize(false),
549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block          mWantUTF16(false), mValues(false), mIncludeMetaData(false),
559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block          mCompressionMethod(0), mJunkPath(false), mOutputAPKFile(NULL),
569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block          mManifestPackageNameOverride(NULL), mInstrumentationPackageNameOverride(NULL),
579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block          mAutoAddOverlay(false), mGenDependencies(false),
589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block          mAssetSourceDir(NULL),
599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block          mCrunchedOutputDir(NULL), mProguardFile(NULL),
609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block          mAndroidManifestFile(NULL), mPublicOutputFile(NULL),
619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block          mRClassDir(NULL), mResourceIntermediatesDir(NULL), mManifestMinSdkVersion(NULL),
629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block          mMinSdkVersion(NULL), mTargetSdkVersion(NULL), mMaxSdkVersion(NULL),
639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block          mVersionCode(NULL), mVersionName(NULL), mCustomPackage(NULL), mExtraPackages(NULL),
649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block          mMaxResVersion(NULL), mDebugMode(false), mNonConstantId(false), mProduct(NULL),
659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block          mUseCrunchCache(false), mErrorOnFailedInsert(false), mOutputTextSymbols(NULL),
669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block          mSingleCrunchInputFile(NULL), mSingleCrunchOutputFile(NULL),
679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block          mArgc(0), mArgv(NULL)
689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block        {}
699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    ~Bundle(void) {}
709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    /*
729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block     * Set the command value.  Returns "false" if it was previously set.
739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block     */
749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    Command getCommand(void) const { return mCmd; }
759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    void setCommand(Command cmd) { mCmd = cmd; }
769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    /*
789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block     * Command modifiers.  Not all modifiers are appropriate for all
799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block     * commands.
809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block     */
819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    bool getVerbose(void) const { return mVerbose; }
829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    void setVerbose(bool val) { mVerbose = val; }
839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    bool getAndroidList(void) const { return mAndroidList; }
849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    void setAndroidList(bool val) { mAndroidList = val; }
859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    bool getForce(void) const { return mForce; }
869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    void setForce(bool val) { mForce = val; }
879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    void setGrayscaleTolerance(int val) { mGrayscaleTolerance = val; }
889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    int  getGrayscaleTolerance() const { return mGrayscaleTolerance; }
899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    bool getMakePackageDirs(void) const { return mMakePackageDirs; }
909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    void setMakePackageDirs(bool val) { mMakePackageDirs = val; }
919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    bool getUpdate(void) const { return mUpdate; }
929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    void setUpdate(bool val) { mUpdate = val; }
939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    bool getExtending(void) const { return mExtending; }
949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    void setExtending(bool val) { mExtending = val; }
959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    bool getRequireLocalization(void) const { return mRequireLocalization; }
969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    void setRequireLocalization(bool val) { mRequireLocalization = val; }
979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    bool getPseudolocalize(void) const { return mPseudolocalize; }
989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    void setPseudolocalize(bool val) { mPseudolocalize = val; }
999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    void setWantUTF16(bool val) { mWantUTF16 = val; }
1009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    bool getValues(void) const { return mValues; }
1019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    void setValues(bool val) { mValues = val; }
1029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    bool getIncludeMetaData(void) const { return mIncludeMetaData; }
1039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    void setIncludeMetaData(bool val) { mIncludeMetaData = val; }
1049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    int getCompressionMethod(void) const { return mCompressionMethod; }
1059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    void setCompressionMethod(int val) { mCompressionMethod = val; }
1069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    bool getJunkPath(void) const { return mJunkPath; }
1079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    void setJunkPath(bool val) { mJunkPath = val; }
1089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    const char* getOutputAPKFile() const { return mOutputAPKFile; }
1099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    void setOutputAPKFile(const char* val) { mOutputAPKFile = val; }
1109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    const char* getManifestPackageNameOverride() const { return mManifestPackageNameOverride; }
1119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    void setManifestPackageNameOverride(const char * val) { mManifestPackageNameOverride = val; }
1129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    const char* getInstrumentationPackageNameOverride() const { return mInstrumentationPackageNameOverride; }
1139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    void setInstrumentationPackageNameOverride(const char * val) { mInstrumentationPackageNameOverride = val; }
1149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    bool getAutoAddOverlay() { return mAutoAddOverlay; }
1159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    void setAutoAddOverlay(bool val) { mAutoAddOverlay = val; }
1169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    bool getGenDependencies() { return mGenDependencies; }
1179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    void setGenDependencies(bool val) { mGenDependencies = val; }
1189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    bool getErrorOnFailedInsert() { return mErrorOnFailedInsert; }
1199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    void setErrorOnFailedInsert(bool val) { mErrorOnFailedInsert = val; }
1209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    bool getUTF16StringsOption() {
1229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block        return mWantUTF16 || !isMinSdkAtLeast(SDK_FROYO);
1239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    }
1249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    /*
1269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block     * Input options.
1279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block     */
1289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    const char* getAssetSourceDir() const { return mAssetSourceDir; }
1299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    void setAssetSourceDir(const char* dir) { mAssetSourceDir = dir; }
1309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    const char* getCrunchedOutputDir() const { return mCrunchedOutputDir; }
1319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    void setCrunchedOutputDir(const char* dir) { mCrunchedOutputDir = dir; }
1329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    const char* getProguardFile() const { return mProguardFile; }
1339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    void setProguardFile(const char* file) { mProguardFile = file; }
1349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    const android::Vector<const char*>& getResourceSourceDirs() const { return mResourceSourceDirs; }
1359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    void addResourceSourceDir(const char* dir) { mResourceSourceDirs.insertAt(dir,0); }
1369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    const char* getAndroidManifestFile() const { return mAndroidManifestFile; }
1379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    void setAndroidManifestFile(const char* file) { mAndroidManifestFile = file; }
1389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    const char* getPublicOutputFile() const { return mPublicOutputFile; }
1399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    void setPublicOutputFile(const char* file) { mPublicOutputFile = file; }
1409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    const char* getRClassDir() const { return mRClassDir; }
1419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    void setRClassDir(const char* dir) { mRClassDir = dir; }
1429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    const char* getConfigurations() const { return mConfigurations.size() > 0 ? mConfigurations.string() : NULL; }
1439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    void addConfigurations(const char* val) { if (mConfigurations.size() > 0) { mConfigurations.append(","); mConfigurations.append(val); } else { mConfigurations = val; } }
1449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    const char* getPreferredConfigurations() const { return mPreferredConfigurations.size() > 0 ? mPreferredConfigurations.string() : NULL; }
1459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    void addPreferredConfigurations(const char* val) { if (mPreferredConfigurations.size() > 0) { mPreferredConfigurations.append(","); mPreferredConfigurations.append(val); } else { mPreferredConfigurations = val; } }
1469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    const char* getResourceIntermediatesDir() const { return mResourceIntermediatesDir; }
1479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    void setResourceIntermediatesDir(const char* dir) { mResourceIntermediatesDir = dir; }
1489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    const android::Vector<const char*>& getPackageIncludes() const { return mPackageIncludes; }
1499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    void addPackageInclude(const char* file) { mPackageIncludes.add(file); }
1509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    const android::Vector<const char*>& getJarFiles() const { return mJarFiles; }
1519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    void addJarFile(const char* file) { mJarFiles.add(file); }
1529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    const android::Vector<const char*>& getNoCompressExtensions() const { return mNoCompressExtensions; }
1539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    void addNoCompressExtension(const char* ext) { mNoCompressExtensions.add(ext); }
1549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    const char*  getManifestMinSdkVersion() const { return mManifestMinSdkVersion; }
1569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    void setManifestMinSdkVersion(const char*  val) { mManifestMinSdkVersion = val; }
1579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    const char*  getMinSdkVersion() const { return mMinSdkVersion; }
1589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    void setMinSdkVersion(const char*  val) { mMinSdkVersion = val; }
1599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    const char*  getTargetSdkVersion() const { return mTargetSdkVersion; }
1609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    void setTargetSdkVersion(const char*  val) { mTargetSdkVersion = val; }
1619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    const char*  getMaxSdkVersion() const { return mMaxSdkVersion; }
1629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    void setMaxSdkVersion(const char*  val) { mMaxSdkVersion = val; }
1639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    const char*  getVersionCode() const { return mVersionCode; }
1649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    void setVersionCode(const char*  val) { mVersionCode = val; }
1659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    const char* getVersionName() const { return mVersionName; }
1669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    void setVersionName(const char* val) { mVersionName = val; }
1679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    const char* getCustomPackage() const { return mCustomPackage; }
1689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    void setCustomPackage(const char* val) { mCustomPackage = val; }
1699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    const char* getExtraPackages() const { return mExtraPackages; }
1709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    void setExtraPackages(const char* val) { mExtraPackages = val; }
1719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    const char* getMaxResVersion() const { return mMaxResVersion; }
1729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    void setMaxResVersion(const char * val) { mMaxResVersion = val; }
1739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    bool getDebugMode() const { return mDebugMode; }
1749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    void setDebugMode(bool val) { mDebugMode = val; }
1759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    bool getNonConstantId() const { return mNonConstantId; }
1769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    void setNonConstantId(bool val) { mNonConstantId = val; }
1779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    const char* getProduct() const { return mProduct; }
1789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    void setProduct(const char * val) { mProduct = val; }
1799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    void setUseCrunchCache(bool val) { mUseCrunchCache = val; }
1809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    bool getUseCrunchCache() const { return mUseCrunchCache; }
1819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    const char* getOutputTextSymbols() const { return mOutputTextSymbols; }
1829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    void setOutputTextSymbols(const char* val) { mOutputTextSymbols = val; }
1839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    const char* getSingleCrunchInputFile() const { return mSingleCrunchInputFile; }
1849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    void setSingleCrunchInputFile(const char* val) { mSingleCrunchInputFile = val; }
1859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    const char* getSingleCrunchOutputFile() const { return mSingleCrunchOutputFile; }
1869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    void setSingleCrunchOutputFile(const char* val) { mSingleCrunchOutputFile = val; }
1879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    /*
1899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block     * Set and get the file specification.
1909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block     *
1919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block     * Note this does NOT make a copy of argv.
1929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block     */
1939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    void setFileSpec(char* const argv[], int argc) {
1949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block        mArgc = argc;
1959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block        mArgv = argv;
1969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    }
1979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    int getFileSpecCount(void) const { return mArgc; }
1989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    const char* getFileSpecEntry(int idx) const { return mArgv[idx]; }
1999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    void eatArgs(int n) {
2009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block        if (n > mArgc) n = mArgc;
2019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block        mArgv += n;
2029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block        mArgc -= n;
2039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    }
2049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if 0
2069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    /*
2079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block     * Package count.  Nothing to do with anything else here; this is
2089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block     * just a convenient place to stuff it so we don't have to pass it
2099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block     * around everywhere.
2109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block     */
2119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    int getPackageCount(void) const { return mPackageCount; }
2129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    void setPackageCount(int val) { mPackageCount = val; }
2139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
2149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    /* Certain features may only be available on a specific SDK level or
2169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block     * above. SDK levels that have a non-numeric identifier are assumed
2179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block     * to be newer than any SDK level that has a number designated.
2189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block     */
2199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    bool isMinSdkAtLeast(int desired) {
2209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block        /* If the application specifies a minSdkVersion in the manifest
2219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block         * then use that. Otherwise, check what the user specified on
2229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block         * the command line. If neither, it's not available since
2239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block         * the minimum SDK version is assumed to be 1.
2249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block         */
2259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block        const char *minVer;
2269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block        if (mManifestMinSdkVersion != NULL) {
2279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block            minVer = mManifestMinSdkVersion;
2289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block        } else if (mMinSdkVersion != NULL) {
2299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block            minVer = mMinSdkVersion;
2309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block        } else {
2319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block            return false;
2329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block        }
2339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block        char *end;
2359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block        int minSdkNum = (int)strtol(minVer, &end, 0);
2369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block        if (*end == '\0') {
2379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block            if (minSdkNum < desired) {
2389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                return false;
2399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block            }
2409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block        }
2419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block        return true;
2429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    }
2439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate:
2459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    /* commands & modifiers */
2469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    Command     mCmd;
2479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    bool        mVerbose;
2489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    bool        mAndroidList;
2499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    bool        mForce;
2509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    int         mGrayscaleTolerance;
2519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    bool        mMakePackageDirs;
2529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    bool        mUpdate;
2539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    bool        mExtending;
2549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    bool        mRequireLocalization;
2559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    bool        mPseudolocalize;
2569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    bool        mWantUTF16;
2579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    bool        mValues;
2589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    bool        mIncludeMetaData;
2599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    int         mCompressionMethod;
2609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    bool        mJunkPath;
2619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    const char* mOutputAPKFile;
2629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    const char* mManifestPackageNameOverride;
2639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    const char* mInstrumentationPackageNameOverride;
2649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    bool        mAutoAddOverlay;
2659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    bool        mGenDependencies;
2669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    const char* mAssetSourceDir;
2679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    const char* mCrunchedOutputDir;
2689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    const char* mProguardFile;
2699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    const char* mAndroidManifestFile;
2709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    const char* mPublicOutputFile;
2719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    const char* mRClassDir;
2729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    const char* mResourceIntermediatesDir;
2739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    android::String8 mConfigurations;
2749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    android::String8 mPreferredConfigurations;
2759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    android::Vector<const char*> mPackageIncludes;
2769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    android::Vector<const char*> mJarFiles;
2779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    android::Vector<const char*> mNoCompressExtensions;
2789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    android::Vector<const char*> mResourceSourceDirs;
2799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    const char* mManifestMinSdkVersion;
2819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    const char* mMinSdkVersion;
2829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    const char* mTargetSdkVersion;
2839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    const char* mMaxSdkVersion;
2849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    const char* mVersionCode;
2859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    const char* mVersionName;
2869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    const char* mCustomPackage;
2879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    const char* mExtraPackages;
288    const char* mMaxResVersion;
289    bool        mDebugMode;
290    bool        mNonConstantId;
291    const char* mProduct;
292    bool        mUseCrunchCache;
293    bool        mErrorOnFailedInsert;
294    const char* mOutputTextSymbols;
295    const char* mSingleCrunchInputFile;
296    const char* mSingleCrunchOutputFile;
297
298    /* file specification */
299    int         mArgc;
300    char* const* mArgv;
301
302#if 0
303    /* misc stuff */
304    int         mPackageCount;
305#endif
306
307};
308
309#endif // __BUNDLE_H
310