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>
103b4062eeb01be33951ba214e027da523cf09f8b1Mathias Agopian#include <utils/Log.h>
113b4062eeb01be33951ba214e027da523cf09f8b1Mathias Agopian#include <utils/threads.h>
123b4062eeb01be33951ba214e027da523cf09f8b1Mathias Agopian#include <utils/List.h>
133b4062eeb01be33951ba214e027da523cf09f8b1Mathias Agopian#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
176c997a9e880e08c354ffd809bd62df9e25e9c4d4Dianne Hackbornenum {
186c997a9e880e08c354ffd809bd62df9e25e9c4d4Dianne Hackborn    SDK_CUPCAKE = 3,
196c997a9e880e08c354ffd809bd62df9e25e9c4d4Dianne Hackborn    SDK_DONUT = 4,
206c997a9e880e08c354ffd809bd62df9e25e9c4d4Dianne Hackborn    SDK_ECLAIR = 5,
216c997a9e880e08c354ffd809bd62df9e25e9c4d4Dianne Hackborn    SDK_ECLAIR_0_1 = 6,
226c997a9e880e08c354ffd809bd62df9e25e9c4d4Dianne Hackborn    SDK_MR1 = 7,
236c997a9e880e08c354ffd809bd62df9e25e9c4d4Dianne Hackborn    SDK_FROYO = 8,
246c997a9e880e08c354ffd809bd62df9e25e9c4d4Dianne Hackborn    SDK_HONEYCOMB_MR2 = 13,
256c997a9e880e08c354ffd809bd62df9e25e9c4d4Dianne Hackborn    SDK_ICE_CREAM_SANDWICH = 14,
266c997a9e880e08c354ffd809bd62df9e25e9c4d4Dianne Hackborn    SDK_ICE_CREAM_SANDWICH_MR1 = 15,
276c997a9e880e08c354ffd809bd62df9e25e9c4d4Dianne Hackborn};
286c997a9e880e08c354ffd809bd62df9e25e9c4d4Dianne Hackborn
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,
408a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin    kCommandCrunch,
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} Command;
429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Bundle of goodies, including everything specified on the command line.
459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass Bundle {
479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic:
489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    Bundle(void)
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        : mCmd(kCommandUnknown), mVerbose(false), mAndroidList(false),
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project          mForce(false), mGrayscaleTolerance(0), mMakePackageDirs(false),
519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project          mUpdate(false), mExtending(false),
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project          mRequireLocalization(false), mPseudolocalize(false),
531741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root          mWantUTF16(false), mValues(false),
54dbcfed9e2cad3175109aca4b55bbe41da7238a4fHaitao Feng          mCompressionMethod(0), mJunkPath(false), mOutputAPKFile(NULL),
55ef05e076ced1a32c5c0aaee28403779834adb2baDianne Hackborn          mManifestPackageNameOverride(NULL), mInstrumentationPackageNameOverride(NULL),
569bf34ca6f85309c65b0ebdf614cb8266401b49baJosiah Gaskin          mAutoAddOverlay(false), mGenDependencies(false),
578a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin          mAssetSourceDir(NULL),
588a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin          mCrunchedOutputDir(NULL), mProguardFile(NULL),
599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project          mAndroidManifestFile(NULL), mPublicOutputFile(NULL),
601741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root          mRClassDir(NULL), mResourceIntermediatesDir(NULL), mManifestMinSdkVersion(NULL),
61fa6baa259d8b1af768e5c1d7ceb27184391f8fb1Dianne Hackborn          mMinSdkVersion(NULL), mTargetSdkVersion(NULL), mMaxSdkVersion(NULL),
62ce89f1531ed8b96b8b790b3f8b18dd4cf483f7f0Josiah Gaskin          mVersionCode(NULL), mVersionName(NULL), mCustomPackage(NULL), mExtraPackages(NULL),
63d06c1afbb920111d6bb77381560faa1fac5f2d69Xavier Ducrohet          mMaxResVersion(NULL), mDebugMode(false), mNonConstantId(false), mProduct(NULL),
64f5de650ff1e161ea135c828e43515895343d2c0fXavier Ducrohet          mUseCrunchCache(false), mErrorOnFailedInsert(false), mOutputTextSymbols(NULL),
65f5de650ff1e161ea135c828e43515895343d2c0fXavier Ducrohet          mArgc(0), mArgv(NULL)
669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        {}
679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ~Bundle(void) {}
689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /*
709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Set the command value.  Returns "false" if it was previously set.
719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    Command getCommand(void) const { return mCmd; }
739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void setCommand(Command cmd) { mCmd = cmd; }
749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /*
769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Command modifiers.  Not all modifiers are appropriate for all
779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * commands.
789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    bool getVerbose(void) const { return mVerbose; }
809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void setVerbose(bool val) { mVerbose = val; }
819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    bool getAndroidList(void) const { return mAndroidList; }
829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void setAndroidList(bool val) { mAndroidList = val; }
839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    bool getForce(void) const { return mForce; }
849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void setForce(bool val) { mForce = val; }
859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void setGrayscaleTolerance(int val) { mGrayscaleTolerance = val; }
86c0f7366a15655c6973ea21029f1997f24c006ccaJeff Brown    int  getGrayscaleTolerance() const { return mGrayscaleTolerance; }
879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    bool getMakePackageDirs(void) const { return mMakePackageDirs; }
889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void setMakePackageDirs(bool val) { mMakePackageDirs = val; }
899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    bool getUpdate(void) const { return mUpdate; }
909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void setUpdate(bool val) { mUpdate = val; }
919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    bool getExtending(void) const { return mExtending; }
929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void setExtending(bool val) { mExtending = val; }
939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    bool getRequireLocalization(void) const { return mRequireLocalization; }
949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void setRequireLocalization(bool val) { mRequireLocalization = val; }
959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    bool getPseudolocalize(void) const { return mPseudolocalize; }
969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void setPseudolocalize(bool val) { mPseudolocalize = val; }
971741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root    void setWantUTF16(bool val) { mWantUTF16 = val; }
98e17086ba346009a26cc2299b133a0fe602acb6ecDianne Hackborn    bool getValues(void) const { return mValues; }
99e17086ba346009a26cc2299b133a0fe602acb6ecDianne Hackborn    void setValues(bool val) { mValues = val; }
1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int getCompressionMethod(void) const { return mCompressionMethod; }
1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void setCompressionMethod(int val) { mCompressionMethod = val; }
102dbe7a68cc13ae135b33769918932838d2d447169Doug Zongker    bool getJunkPath(void) const { return mJunkPath; }
103dbe7a68cc13ae135b33769918932838d2d447169Doug Zongker    void setJunkPath(bool val) { mJunkPath = val; }
1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    const char* getOutputAPKFile() const { return mOutputAPKFile; }
1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void setOutputAPKFile(const char* val) { mOutputAPKFile = val; }
1062fee0ed6eb99b211efa06f095a41268a2021214aJeff Hamilton    const char* getManifestPackageNameOverride() const { return mManifestPackageNameOverride; }
1072fee0ed6eb99b211efa06f095a41268a2021214aJeff Hamilton    void setManifestPackageNameOverride(const char * val) { mManifestPackageNameOverride = val; }
108ef05e076ced1a32c5c0aaee28403779834adb2baDianne Hackborn    const char* getInstrumentationPackageNameOverride() const { return mInstrumentationPackageNameOverride; }
109ef05e076ced1a32c5c0aaee28403779834adb2baDianne Hackborn    void setInstrumentationPackageNameOverride(const char * val) { mInstrumentationPackageNameOverride = val; }
11099080c7d9ad9e5ccfec70dd10e4c24468a960c45Xavier Ducrohet    bool getAutoAddOverlay() { return mAutoAddOverlay; }
11199080c7d9ad9e5ccfec70dd10e4c24468a960c45Xavier Ducrohet    void setAutoAddOverlay(bool val) { mAutoAddOverlay = val; }
1129bf34ca6f85309c65b0ebdf614cb8266401b49baJosiah Gaskin    bool getGenDependencies() { return mGenDependencies; }
1139bf34ca6f85309c65b0ebdf614cb8266401b49baJosiah Gaskin    void setGenDependencies(bool val) { mGenDependencies = val; }
1147714a2429b192c88e134ff67b969121bbaeb5457Xavier Ducrohet    bool getErrorOnFailedInsert() { return mErrorOnFailedInsert; }
1157714a2429b192c88e134ff67b969121bbaeb5457Xavier Ducrohet    void setErrorOnFailedInsert(bool val) { mErrorOnFailedInsert = val; }
1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1176c997a9e880e08c354ffd809bd62df9e25e9c4d4Dianne Hackborn    bool getUTF16StringsOption() {
1186c997a9e880e08c354ffd809bd62df9e25e9c4d4Dianne Hackborn        return mWantUTF16 || !isMinSdkAtLeast(SDK_FROYO);
1196c997a9e880e08c354ffd809bd62df9e25e9c4d4Dianne Hackborn    }
1206c997a9e880e08c354ffd809bd62df9e25e9c4d4Dianne Hackborn
121dbe7a68cc13ae135b33769918932838d2d447169Doug Zongker    /*
122dbe7a68cc13ae135b33769918932838d2d447169Doug Zongker     * Input options.
1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    const char* getAssetSourceDir() const { return mAssetSourceDir; }
1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void setAssetSourceDir(const char* dir) { mAssetSourceDir = dir; }
1268a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin    const char* getCrunchedOutputDir() const { return mCrunchedOutputDir; }
1278a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin    void setCrunchedOutputDir(const char* dir) { mCrunchedOutputDir = dir; }
1281553c82e084ac5763fb393857224145506771b99Joe Onorato    const char* getProguardFile() const { return mProguardFile; }
1291553c82e084ac5763fb393857224145506771b99Joe Onorato    void setProguardFile(const char* file) { mProguardFile = file; }
1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    const android::Vector<const char*>& getResourceSourceDirs() const { return mResourceSourceDirs; }
1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void addResourceSourceDir(const char* dir) { mResourceSourceDirs.insertAt(dir,0); }
1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    const char* getAndroidManifestFile() const { return mAndroidManifestFile; }
1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void setAndroidManifestFile(const char* file) { mAndroidManifestFile = file; }
1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    const char* getPublicOutputFile() const { return mPublicOutputFile; }
1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void setPublicOutputFile(const char* file) { mPublicOutputFile = file; }
1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    const char* getRClassDir() const { return mRClassDir; }
1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void setRClassDir(const char* dir) { mRClassDir = dir; }
1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    const char* getConfigurations() const { return mConfigurations.size() > 0 ? mConfigurations.string() : NULL; }
1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void addConfigurations(const char* val) { if (mConfigurations.size() > 0) { mConfigurations.append(","); mConfigurations.append(val); } else { mConfigurations = val; } }
140e6b680364dd992907a8d2037685a2e500d188dfbDianne Hackborn    const char* getPreferredConfigurations() const { return mPreferredConfigurations.size() > 0 ? mPreferredConfigurations.string() : NULL; }
141e6b680364dd992907a8d2037685a2e500d188dfbDianne Hackborn    void addPreferredConfigurations(const char* val) { if (mPreferredConfigurations.size() > 0) { mPreferredConfigurations.append(","); mPreferredConfigurations.append(val); } else { mPreferredConfigurations = val; } }
1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    const char* getResourceIntermediatesDir() const { return mResourceIntermediatesDir; }
1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void setResourceIntermediatesDir(const char* dir) { mResourceIntermediatesDir = dir; }
1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    const android::Vector<const char*>& getPackageIncludes() const { return mPackageIncludes; }
1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void addPackageInclude(const char* file) { mPackageIncludes.add(file); }
1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    const android::Vector<const char*>& getJarFiles() const { return mJarFiles; }
1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void addJarFile(const char* file) { mJarFiles.add(file); }
1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    const android::Vector<const char*>& getNoCompressExtensions() const { return mNoCompressExtensions; }
1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void addNoCompressExtension(const char* ext) { mNoCompressExtensions.add(ext); }
1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1511741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root    const char*  getManifestMinSdkVersion() const { return mManifestMinSdkVersion; }
1521741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root    void setManifestMinSdkVersion(const char*  val) { mManifestMinSdkVersion = val; }
153a96cbb435d7b2197ab2b61fd98d14cbd6e0c5c3dDianne Hackborn    const char*  getMinSdkVersion() const { return mMinSdkVersion; }
1541741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root    void setMinSdkVersion(const char*  val) { mMinSdkVersion = val; }
155a96cbb435d7b2197ab2b61fd98d14cbd6e0c5c3dDianne Hackborn    const char*  getTargetSdkVersion() const { return mTargetSdkVersion; }
156a96cbb435d7b2197ab2b61fd98d14cbd6e0c5c3dDianne Hackborn    void setTargetSdkVersion(const char*  val) { mTargetSdkVersion = val; }
157a96cbb435d7b2197ab2b61fd98d14cbd6e0c5c3dDianne Hackborn    const char*  getMaxSdkVersion() const { return mMaxSdkVersion; }
158a96cbb435d7b2197ab2b61fd98d14cbd6e0c5c3dDianne Hackborn    void setMaxSdkVersion(const char*  val) { mMaxSdkVersion = val; }
159a96cbb435d7b2197ab2b61fd98d14cbd6e0c5c3dDianne Hackborn    const char*  getVersionCode() const { return mVersionCode; }
160a96cbb435d7b2197ab2b61fd98d14cbd6e0c5c3dDianne Hackborn    void setVersionCode(const char*  val) { mVersionCode = val; }
161a96cbb435d7b2197ab2b61fd98d14cbd6e0c5c3dDianne Hackborn    const char* getVersionName() const { return mVersionName; }
162a96cbb435d7b2197ab2b61fd98d14cbd6e0c5c3dDianne Hackborn    void setVersionName(const char* val) { mVersionName = val; }
16363459ad555c10de1f316d6de01fc3cd0c0aaa457Xavier Ducrohet    const char* getCustomPackage() const { return mCustomPackage; }
16463459ad555c10de1f316d6de01fc3cd0c0aaa457Xavier Ducrohet    void setCustomPackage(const char* val) { mCustomPackage = val; }
165ce89f1531ed8b96b8b790b3f8b18dd4cf483f7f0Josiah Gaskin    const char* getExtraPackages() const { return mExtraPackages; }
166ce89f1531ed8b96b8b790b3f8b18dd4cf483f7f0Josiah Gaskin    void setExtraPackages(const char* val) { mExtraPackages = val; }
167588f228d6a3e3b254fbc1f13f29ee47e13a669c1Ficus Kirkpatrick    const char* getMaxResVersion() const { return mMaxResVersion; }
168588f228d6a3e3b254fbc1f13f29ee47e13a669c1Ficus Kirkpatrick    void setMaxResVersion(const char * val) { mMaxResVersion = val; }
169c0f7366a15655c6973ea21029f1997f24c006ccaJeff Brown    bool getDebugMode() const { return mDebugMode; }
1706487b099231b1e5d36ae37a921399b028b3b3ad9Xavier Ducrohet    void setDebugMode(bool val) { mDebugMode = val; }
171c0f7366a15655c6973ea21029f1997f24c006ccaJeff Brown    bool getNonConstantId() const { return mNonConstantId; }
172d06c1afbb920111d6bb77381560faa1fac5f2d69Xavier Ducrohet    void setNonConstantId(bool val) { mNonConstantId = val; }
17390964040cabfc67f92a7c3322a02401bb6f8ae82Eric Fischer    const char* getProduct() const { return mProduct; }
17490964040cabfc67f92a7c3322a02401bb6f8ae82Eric Fischer    void setProduct(const char * val) { mProduct = val; }
1758a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin    void setUseCrunchCache(bool val) { mUseCrunchCache = val; }
176c0f7366a15655c6973ea21029f1997f24c006ccaJeff Brown    bool getUseCrunchCache() const { return mUseCrunchCache; }
177f5de650ff1e161ea135c828e43515895343d2c0fXavier Ducrohet    const char* getOutputTextSymbols() const { return mOutputTextSymbols; }
178f5de650ff1e161ea135c828e43515895343d2c0fXavier Ducrohet    void setOutputTextSymbols(const char* val) { mOutputTextSymbols = val; }
179dbe7a68cc13ae135b33769918932838d2d447169Doug Zongker
1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /*
1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Set and get the file specification.
1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Note this does NOT make a copy of argv.
1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void setFileSpec(char* const argv[], int argc) {
1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mArgc = argc;
1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mArgv = argv;
1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int getFileSpecCount(void) const { return mArgc; }
1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    const char* getFileSpecEntry(int idx) const { return mArgv[idx]; }
1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void eatArgs(int n) {
1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (n > mArgc) n = mArgc;
1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mArgv += n;
1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mArgc -= n;
1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#if 0
1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /*
1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Package count.  Nothing to do with anything else here; this is
2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * just a convenient place to stuff it so we don't have to pass it
2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * around everywhere.
2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int getPackageCount(void) const { return mPackageCount; }
2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void setPackageCount(int val) { mPackageCount = val; }
2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#endif
2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
207c9f3088036dd7cce6903e307afea3e289a334036Kenny Root    /* Certain features may only be available on a specific SDK level or
208c9f3088036dd7cce6903e307afea3e289a334036Kenny Root     * above. SDK levels that have a non-numeric identifier are assumed
209c9f3088036dd7cce6903e307afea3e289a334036Kenny Root     * to be newer than any SDK level that has a number designated.
2101741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root     */
211c9f3088036dd7cce6903e307afea3e289a334036Kenny Root    bool isMinSdkAtLeast(int desired) {
2121741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root        /* If the application specifies a minSdkVersion in the manifest
2131741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root         * then use that. Otherwise, check what the user specified on
2141741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root         * the command line. If neither, it's not available since
2151741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root         * the minimum SDK version is assumed to be 1.
2161741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root         */
2171741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root        const char *minVer;
2181741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root        if (mManifestMinSdkVersion != NULL) {
2191741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root            minVer = mManifestMinSdkVersion;
2201741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root        } else if (mMinSdkVersion != NULL) {
2211741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root            minVer = mMinSdkVersion;
2221741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root        } else {
2231741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root            return false;
2241741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root        }
2251741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root
2261741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root        char *end;
2271741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root        int minSdkNum = (int)strtol(minVer, &end, 0);
2281741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root        if (*end == '\0') {
229c9f3088036dd7cce6903e307afea3e289a334036Kenny Root            if (minSdkNum < desired) {
2301741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root                return false;
2311741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root            }
2321741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root        }
2331741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root        return true;
2341741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root    }
2351741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root
2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectprivate:
2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /* commands & modifiers */
2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    Command     mCmd;
2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    bool        mVerbose;
2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    bool        mAndroidList;
2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    bool        mForce;
2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int         mGrayscaleTolerance;
2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    bool        mMakePackageDirs;
2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    bool        mUpdate;
2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    bool        mExtending;
2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    bool        mRequireLocalization;
2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    bool        mPseudolocalize;
2481741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root    bool        mWantUTF16;
249e17086ba346009a26cc2299b133a0fe602acb6ecDianne Hackborn    bool        mValues;
2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int         mCompressionMethod;
251dbe7a68cc13ae135b33769918932838d2d447169Doug Zongker    bool        mJunkPath;
2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    const char* mOutputAPKFile;
2532fee0ed6eb99b211efa06f095a41268a2021214aJeff Hamilton    const char* mManifestPackageNameOverride;
254ef05e076ced1a32c5c0aaee28403779834adb2baDianne Hackborn    const char* mInstrumentationPackageNameOverride;
25599080c7d9ad9e5ccfec70dd10e4c24468a960c45Xavier Ducrohet    bool        mAutoAddOverlay;
2569bf34ca6f85309c65b0ebdf614cb8266401b49baJosiah Gaskin    bool        mGenDependencies;
2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    const char* mAssetSourceDir;
2588a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin    const char* mCrunchedOutputDir;
2591553c82e084ac5763fb393857224145506771b99Joe Onorato    const char* mProguardFile;
2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    const char* mAndroidManifestFile;
2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    const char* mPublicOutputFile;
2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    const char* mRClassDir;
2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    const char* mResourceIntermediatesDir;
2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    android::String8 mConfigurations;
265e6b680364dd992907a8d2037685a2e500d188dfbDianne Hackborn    android::String8 mPreferredConfigurations;
2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    android::Vector<const char*> mPackageIncludes;
2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    android::Vector<const char*> mJarFiles;
2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    android::Vector<const char*> mNoCompressExtensions;
2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    android::Vector<const char*> mResourceSourceDirs;
270dbe7a68cc13ae135b33769918932838d2d447169Doug Zongker
2711741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root    const char* mManifestMinSdkVersion;
272a96cbb435d7b2197ab2b61fd98d14cbd6e0c5c3dDianne Hackborn    const char* mMinSdkVersion;
273a96cbb435d7b2197ab2b61fd98d14cbd6e0c5c3dDianne Hackborn    const char* mTargetSdkVersion;
274a96cbb435d7b2197ab2b61fd98d14cbd6e0c5c3dDianne Hackborn    const char* mMaxSdkVersion;
275a96cbb435d7b2197ab2b61fd98d14cbd6e0c5c3dDianne Hackborn    const char* mVersionCode;
276a96cbb435d7b2197ab2b61fd98d14cbd6e0c5c3dDianne Hackborn    const char* mVersionName;
27763459ad555c10de1f316d6de01fc3cd0c0aaa457Xavier Ducrohet    const char* mCustomPackage;
278ce89f1531ed8b96b8b790b3f8b18dd4cf483f7f0Josiah Gaskin    const char* mExtraPackages;
279588f228d6a3e3b254fbc1f13f29ee47e13a669c1Ficus Kirkpatrick    const char* mMaxResVersion;
2806487b099231b1e5d36ae37a921399b028b3b3ad9Xavier Ducrohet    bool        mDebugMode;
281d06c1afbb920111d6bb77381560faa1fac5f2d69Xavier Ducrohet    bool        mNonConstantId;
28290964040cabfc67f92a7c3322a02401bb6f8ae82Eric Fischer    const char* mProduct;
2838a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin    bool        mUseCrunchCache;
2847714a2429b192c88e134ff67b969121bbaeb5457Xavier Ducrohet    bool        mErrorOnFailedInsert;
285f5de650ff1e161ea135c828e43515895343d2c0fXavier Ducrohet    const char* mOutputTextSymbols;
286dbe7a68cc13ae135b33769918932838d2d447169Doug Zongker
2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /* file specification */
2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int         mArgc;
2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    char* const* mArgv;
2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#if 0
2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /* misc stuff */
2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int         mPackageCount;
2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#endif
295b5ef7ee1644b099498ddd29c1d051e7ee26ccfd3Kenny Root
2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project};
2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#endif // __BUNDLE_H
299