Bundle.h revision de898ff42912bd7ca1bfb099cd439562496765a4
19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project//
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// Copyright 2006 The Android Open Source Project
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project//
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// State bundle.  Used to pass around stuff like command-line args.
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project//
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#ifndef __BUNDLE_H
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define __BUNDLE_H
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <stdlib.h>
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <utils/Log.h>
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <utils/threads.h>
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <utils/List.h>
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <utils/Errors.h>
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <utils/String8.h>
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <utils/Vector.h>
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectenum {
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    SDK_CUPCAKE = 3,
199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    SDK_DONUT = 4,
209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    SDK_ECLAIR = 5,
219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    SDK_ECLAIR_0_1 = 6,
229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    SDK_MR1 = 7,
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    SDK_FROYO = 8,
249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    SDK_HONEYCOMB_MR2 = 13,
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    SDK_ICE_CREAM_SANDWICH = 14,
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    SDK_ICE_CREAM_SANDWICH_MR1 = 15,
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project};
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Things we can do.
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projecttypedef enum Command {
339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    kCommandUnknown = 0,
349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    kCommandVersion,
359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    kCommandList,
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    kCommandDump,
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    kCommandAdd,
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    kCommandRemove,
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    kCommandPackage,
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    kCommandCrunch,
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    kCommandSingleCrunch,
429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} Command;
439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Bundle of goodies, including everything specified on the command line.
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass Bundle {
489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic:
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    Bundle(void)
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        : mCmd(kCommandUnknown), mVerbose(false), mAndroidList(false),
519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project          mForce(false), mGrayscaleTolerance(0), mMakePackageDirs(false),
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project          mUpdate(false), mExtending(false),
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project          mRequireLocalization(false), mPseudolocalize(false),
549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project          mWantUTF16(false), mValues(false), mIncludeMetaData(false),
559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project          mCompressionMethod(0), mJunkPath(false), mOutputAPKFile(NULL),
569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project          mManifestPackageNameOverride(NULL), mInstrumentationPackageNameOverride(NULL),
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project          mAutoAddOverlay(false), mGenDependencies(false),
589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project          mCrunchedOutputDir(NULL), mProguardFile(NULL),
599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project          mAndroidManifestFile(NULL), mPublicOutputFile(NULL),
609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project          mRClassDir(NULL), mResourceIntermediatesDir(NULL), mManifestMinSdkVersion(NULL),
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project          mMinSdkVersion(NULL), mTargetSdkVersion(NULL), mMaxSdkVersion(NULL),
629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project          mVersionCode(NULL), mVersionName(NULL), mReplaceVersion(false), mCustomPackage(NULL),
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project          mExtraPackages(NULL), mMaxResVersion(NULL), mDebugMode(false), mNonConstantId(false),
649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project          mProduct(NULL), mUseCrunchCache(false), mErrorOnFailedInsert(false),
659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project          mErrorOnMissingConfigEntry(false), mOutputTextSymbols(NULL),
669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project          mSingleCrunchInputFile(NULL), mSingleCrunchOutputFile(NULL),
679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project          mBuildSharedLibrary(false),
689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project          mArgc(0), mArgv(NULL)
699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        {}
709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ~Bundle(void) {}
719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /*
739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Set the command value.  Returns "false" if it was previously set.
749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    Command getCommand(void) const { return mCmd; }
769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void setCommand(Command cmd) { mCmd = cmd; }
779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /*
799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Command modifiers.  Not all modifiers are appropriate for all
809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * commands.
819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    bool getVerbose(void) const { return mVerbose; }
839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void setVerbose(bool val) { mVerbose = val; }
849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    bool getAndroidList(void) const { return mAndroidList; }
859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void setAndroidList(bool val) { mAndroidList = val; }
869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    bool getForce(void) const { return mForce; }
879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void setForce(bool val) { mForce = val; }
889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void setGrayscaleTolerance(int val) { mGrayscaleTolerance = val; }
899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int  getGrayscaleTolerance() const { return mGrayscaleTolerance; }
909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    bool getMakePackageDirs(void) const { return mMakePackageDirs; }
919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void setMakePackageDirs(bool val) { mMakePackageDirs = val; }
929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    bool getUpdate(void) const { return mUpdate; }
939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void setUpdate(bool val) { mUpdate = val; }
949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    bool getExtending(void) const { return mExtending; }
959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void setExtending(bool val) { mExtending = val; }
969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    bool getRequireLocalization(void) const { return mRequireLocalization; }
979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void setRequireLocalization(bool val) { mRequireLocalization = val; }
989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    bool getPseudolocalize(void) const { return mPseudolocalize; }
999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void setPseudolocalize(bool val) { mPseudolocalize = val; }
1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void setWantUTF16(bool val) { mWantUTF16 = val; }
1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    bool getValues(void) const { return mValues; }
1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void setValues(bool val) { mValues = val; }
1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    bool getIncludeMetaData(void) const { return mIncludeMetaData; }
1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void setIncludeMetaData(bool val) { mIncludeMetaData = val; }
1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int getCompressionMethod(void) const { return mCompressionMethod; }
1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void setCompressionMethod(int val) { mCompressionMethod = val; }
1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    bool getJunkPath(void) const { return mJunkPath; }
1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void setJunkPath(bool val) { mJunkPath = val; }
1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    const char* getOutputAPKFile() const { return mOutputAPKFile; }
1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void setOutputAPKFile(const char* val) { mOutputAPKFile = val; }
1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    const char* getManifestPackageNameOverride() const { return mManifestPackageNameOverride; }
1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void setManifestPackageNameOverride(const char * val) { mManifestPackageNameOverride = val; }
1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    const char* getInstrumentationPackageNameOverride() const { return mInstrumentationPackageNameOverride; }
1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void setInstrumentationPackageNameOverride(const char * val) { mInstrumentationPackageNameOverride = val; }
1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    bool getAutoAddOverlay() { return mAutoAddOverlay; }
1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void setAutoAddOverlay(bool val) { mAutoAddOverlay = val; }
1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    bool getGenDependencies() { return mGenDependencies; }
1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void setGenDependencies(bool val) { mGenDependencies = val; }
1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    bool getErrorOnFailedInsert() { return mErrorOnFailedInsert; }
1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void setErrorOnFailedInsert(bool val) { mErrorOnFailedInsert = val; }
1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    bool getErrorOnMissingConfigEntry() { return mErrorOnMissingConfigEntry; }
1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void setErrorOnMissingConfigEntry(bool val) { mErrorOnMissingConfigEntry = val; }
1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    bool getUTF16StringsOption() {
1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mWantUTF16 || !isMinSdkAtLeast(SDK_FROYO);
1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /*
1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Input options.
1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    const android::Vector<const char*>& getAssetSourceDirs() const { return mAssetSourceDirs; }
1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void addAssetSourceDir(const char* dir) { mAssetSourceDirs.insertAt(dir,0); }
133    const char* getCrunchedOutputDir() const { return mCrunchedOutputDir; }
134    void setCrunchedOutputDir(const char* dir) { mCrunchedOutputDir = dir; }
135    const char* getProguardFile() const { return mProguardFile; }
136    void setProguardFile(const char* file) { mProguardFile = file; }
137    const android::Vector<const char*>& getResourceSourceDirs() const { return mResourceSourceDirs; }
138    void addResourceSourceDir(const char* dir) { mResourceSourceDirs.insertAt(dir,0); }
139    const char* getAndroidManifestFile() const { return mAndroidManifestFile; }
140    void setAndroidManifestFile(const char* file) { mAndroidManifestFile = file; }
141    const char* getPublicOutputFile() const { return mPublicOutputFile; }
142    void setPublicOutputFile(const char* file) { mPublicOutputFile = file; }
143    const char* getRClassDir() const { return mRClassDir; }
144    void setRClassDir(const char* dir) { mRClassDir = dir; }
145    const char* getConfigurations() const { return mConfigurations.size() > 0 ? mConfigurations.string() : NULL; }
146    void addConfigurations(const char* val) { if (mConfigurations.size() > 0) { mConfigurations.append(","); mConfigurations.append(val); } else { mConfigurations = val; } }
147    const char* getPreferredConfigurations() const { return mPreferredConfigurations.size() > 0 ? mPreferredConfigurations.string() : NULL; }
148    void addPreferredConfigurations(const char* val) { if (mPreferredConfigurations.size() > 0) { mPreferredConfigurations.append(","); mPreferredConfigurations.append(val); } else { mPreferredConfigurations = val; } }
149    const char* getResourceIntermediatesDir() const { return mResourceIntermediatesDir; }
150    void setResourceIntermediatesDir(const char* dir) { mResourceIntermediatesDir = dir; }
151    const android::Vector<const char*>& getPackageIncludes() const { return mPackageIncludes; }
152    void addPackageInclude(const char* file) { mPackageIncludes.add(file); }
153    const android::Vector<const char*>& getJarFiles() const { return mJarFiles; }
154    void addJarFile(const char* file) { mJarFiles.add(file); }
155    const android::Vector<const char*>& getNoCompressExtensions() const { return mNoCompressExtensions; }
156    void addNoCompressExtension(const char* ext) { mNoCompressExtensions.add(ext); }
157
158    const char*  getManifestMinSdkVersion() const { return mManifestMinSdkVersion; }
159    void setManifestMinSdkVersion(const char*  val) { mManifestMinSdkVersion = val; }
160    const char*  getMinSdkVersion() const { return mMinSdkVersion; }
161    void setMinSdkVersion(const char*  val) { mMinSdkVersion = val; }
162    const char*  getTargetSdkVersion() const { return mTargetSdkVersion; }
163    void setTargetSdkVersion(const char*  val) { mTargetSdkVersion = val; }
164    const char*  getMaxSdkVersion() const { return mMaxSdkVersion; }
165    void setMaxSdkVersion(const char*  val) { mMaxSdkVersion = val; }
166    const char*  getVersionCode() const { return mVersionCode; }
167    void setVersionCode(const char*  val) { mVersionCode = val; }
168    const char* getVersionName() const { return mVersionName; }
169    void setVersionName(const char* val) { mVersionName = val; }
170    bool getReplaceVersion() { return mReplaceVersion; }
171    void setReplaceVersion(bool val) { mReplaceVersion = val; }
172    const char* getCustomPackage() const { return mCustomPackage; }
173    void setCustomPackage(const char* val) { mCustomPackage = val; }
174    const char* getExtraPackages() const { return mExtraPackages; }
175    void setExtraPackages(const char* val) { mExtraPackages = val; }
176    const char* getMaxResVersion() const { return mMaxResVersion; }
177    void setMaxResVersion(const char * val) { mMaxResVersion = val; }
178    bool getDebugMode() const { return mDebugMode; }
179    void setDebugMode(bool val) { mDebugMode = val; }
180    bool getNonConstantId() const { return mNonConstantId; }
181    void setNonConstantId(bool val) { mNonConstantId = val; }
182    const char* getProduct() const { return mProduct; }
183    void setProduct(const char * val) { mProduct = val; }
184    void setUseCrunchCache(bool val) { mUseCrunchCache = val; }
185    bool getUseCrunchCache() const { return mUseCrunchCache; }
186    const char* getOutputTextSymbols() const { return mOutputTextSymbols; }
187    void setOutputTextSymbols(const char* val) { mOutputTextSymbols = val; }
188    const char* getSingleCrunchInputFile() const { return mSingleCrunchInputFile; }
189    void setSingleCrunchInputFile(const char* val) { mSingleCrunchInputFile = val; }
190    const char* getSingleCrunchOutputFile() const { return mSingleCrunchOutputFile; }
191    void setSingleCrunchOutputFile(const char* val) { mSingleCrunchOutputFile = val; }
192    bool getBuildSharedLibrary() const { return mBuildSharedLibrary; }
193    void setBuildSharedLibrary(bool val) { mBuildSharedLibrary = val; }
194
195    /*
196     * Set and get the file specification.
197     *
198     * Note this does NOT make a copy of argv.
199     */
200    void setFileSpec(char* const argv[], int argc) {
201        mArgc = argc;
202        mArgv = argv;
203    }
204    int getFileSpecCount(void) const { return mArgc; }
205    const char* getFileSpecEntry(int idx) const { return mArgv[idx]; }
206    void eatArgs(int n) {
207        if (n > mArgc) n = mArgc;
208        mArgv += n;
209        mArgc -= n;
210    }
211
212#if 0
213    /*
214     * Package count.  Nothing to do with anything else here; this is
215     * just a convenient place to stuff it so we don't have to pass it
216     * around everywhere.
217     */
218    int getPackageCount(void) const { return mPackageCount; }
219    void setPackageCount(int val) { mPackageCount = val; }
220#endif
221
222    /* Certain features may only be available on a specific SDK level or
223     * above. SDK levels that have a non-numeric identifier are assumed
224     * to be newer than any SDK level that has a number designated.
225     */
226    bool isMinSdkAtLeast(int desired) {
227        /* If the application specifies a minSdkVersion in the manifest
228         * then use that. Otherwise, check what the user specified on
229         * the command line. If neither, it's not available since
230         * the minimum SDK version is assumed to be 1.
231         */
232        const char *minVer;
233        if (mManifestMinSdkVersion != NULL) {
234            minVer = mManifestMinSdkVersion;
235        } else if (mMinSdkVersion != NULL) {
236            minVer = mMinSdkVersion;
237        } else {
238            return false;
239        }
240
241        char *end;
242        int minSdkNum = (int)strtol(minVer, &end, 0);
243        if (*end == '\0') {
244            if (minSdkNum < desired) {
245                return false;
246            }
247        }
248        return true;
249    }
250
251private:
252    /* commands & modifiers */
253    Command     mCmd;
254    bool        mVerbose;
255    bool        mAndroidList;
256    bool        mForce;
257    int         mGrayscaleTolerance;
258    bool        mMakePackageDirs;
259    bool        mUpdate;
260    bool        mExtending;
261    bool        mRequireLocalization;
262    bool        mPseudolocalize;
263    bool        mWantUTF16;
264    bool        mValues;
265    bool        mIncludeMetaData;
266    int         mCompressionMethod;
267    bool        mJunkPath;
268    const char* mOutputAPKFile;
269    const char* mManifestPackageNameOverride;
270    const char* mInstrumentationPackageNameOverride;
271    bool        mAutoAddOverlay;
272    bool        mGenDependencies;
273    const char* mCrunchedOutputDir;
274    const char* mProguardFile;
275    const char* mAndroidManifestFile;
276    const char* mPublicOutputFile;
277    const char* mRClassDir;
278    const char* mResourceIntermediatesDir;
279    android::String8 mConfigurations;
280    android::String8 mPreferredConfigurations;
281    android::Vector<const char*> mPackageIncludes;
282    android::Vector<const char*> mJarFiles;
283    android::Vector<const char*> mNoCompressExtensions;
284    android::Vector<const char*> mAssetSourceDirs;
285    android::Vector<const char*> mResourceSourceDirs;
286
287    const char* mManifestMinSdkVersion;
288    const char* mMinSdkVersion;
289    const char* mTargetSdkVersion;
290    const char* mMaxSdkVersion;
291    const char* mVersionCode;
292    const char* mVersionName;
293    bool        mReplaceVersion;
294    const char* mCustomPackage;
295    const char* mExtraPackages;
296    const char* mMaxResVersion;
297    bool        mDebugMode;
298    bool        mNonConstantId;
299    const char* mProduct;
300    bool        mUseCrunchCache;
301    bool        mErrorOnFailedInsert;
302    bool        mErrorOnMissingConfigEntry;
303    const char* mOutputTextSymbols;
304    const char* mSingleCrunchInputFile;
305    const char* mSingleCrunchOutputFile;
306    bool        mBuildSharedLibrary;
307
308    /* file specification */
309    int         mArgc;
310    char* const* mArgv;
311
312#if 0
313    /* misc stuff */
314    int         mPackageCount;
315#endif
316
317};
318
319#endif // __BUNDLE_H
320