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,
41b1f6ad82dd8d1702617a757a88430604b3131facXavier Ducrohet    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),
541741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root          mWantUTF16(false), mValues(false),
55dbcfed9e2cad3175109aca4b55bbe41da7238a4fHaitao Feng          mCompressionMethod(0), mJunkPath(false), mOutputAPKFile(NULL),
56ef05e076ced1a32c5c0aaee28403779834adb2baDianne Hackborn          mManifestPackageNameOverride(NULL), mInstrumentationPackageNameOverride(NULL),
579bf34ca6f85309c65b0ebdf614cb8266401b49baJosiah Gaskin          mAutoAddOverlay(false), mGenDependencies(false),
588a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin          mAssetSourceDir(NULL),
598a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin          mCrunchedOutputDir(NULL), mProguardFile(NULL),
609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project          mAndroidManifestFile(NULL), mPublicOutputFile(NULL),
611741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root          mRClassDir(NULL), mResourceIntermediatesDir(NULL), mManifestMinSdkVersion(NULL),
62fa6baa259d8b1af768e5c1d7ceb27184391f8fb1Dianne Hackborn          mMinSdkVersion(NULL), mTargetSdkVersion(NULL), mMaxSdkVersion(NULL),
63ce89f1531ed8b96b8b790b3f8b18dd4cf483f7f0Josiah Gaskin          mVersionCode(NULL), mVersionName(NULL), mCustomPackage(NULL), mExtraPackages(NULL),
64d06c1afbb920111d6bb77381560faa1fac5f2d69Xavier Ducrohet          mMaxResVersion(NULL), mDebugMode(false), mNonConstantId(false), mProduct(NULL),
65f5de650ff1e161ea135c828e43515895343d2c0fXavier Ducrohet          mUseCrunchCache(false), mErrorOnFailedInsert(false), mOutputTextSymbols(NULL),
66b1f6ad82dd8d1702617a757a88430604b3131facXavier Ducrohet          mSingleCrunchInputFile(NULL), mSingleCrunchOutputFile(NULL),
67f5de650ff1e161ea135c828e43515895343d2c0fXavier Ducrohet          mArgc(0), mArgv(NULL)
689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        {}
699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ~Bundle(void) {}
709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /*
729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Set the command value.  Returns "false" if it was previously set.
739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    Command getCommand(void) const { return mCmd; }
759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void setCommand(Command cmd) { mCmd = cmd; }
769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /*
789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Command modifiers.  Not all modifiers are appropriate for all
799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * commands.
809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    bool getVerbose(void) const { return mVerbose; }
829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void setVerbose(bool val) { mVerbose = val; }
839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    bool getAndroidList(void) const { return mAndroidList; }
849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void setAndroidList(bool val) { mAndroidList = val; }
859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    bool getForce(void) const { return mForce; }
869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void setForce(bool val) { mForce = val; }
879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void setGrayscaleTolerance(int val) { mGrayscaleTolerance = val; }
88c0f7366a15655c6973ea21029f1997f24c006ccaJeff Brown    int  getGrayscaleTolerance() const { return mGrayscaleTolerance; }
899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    bool getMakePackageDirs(void) const { return mMakePackageDirs; }
909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void setMakePackageDirs(bool val) { mMakePackageDirs = val; }
919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    bool getUpdate(void) const { return mUpdate; }
929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void setUpdate(bool val) { mUpdate = val; }
939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    bool getExtending(void) const { return mExtending; }
949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void setExtending(bool val) { mExtending = val; }
959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    bool getRequireLocalization(void) const { return mRequireLocalization; }
969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void setRequireLocalization(bool val) { mRequireLocalization = val; }
979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    bool getPseudolocalize(void) const { return mPseudolocalize; }
989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void setPseudolocalize(bool val) { mPseudolocalize = val; }
991741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root    void setWantUTF16(bool val) { mWantUTF16 = val; }
100e17086ba346009a26cc2299b133a0fe602acb6ecDianne Hackborn    bool getValues(void) const { return mValues; }
101e17086ba346009a26cc2299b133a0fe602acb6ecDianne Hackborn    void setValues(bool val) { mValues = val; }
1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int getCompressionMethod(void) const { return mCompressionMethod; }
1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void setCompressionMethod(int val) { mCompressionMethod = val; }
104dbe7a68cc13ae135b33769918932838d2d447169Doug Zongker    bool getJunkPath(void) const { return mJunkPath; }
105dbe7a68cc13ae135b33769918932838d2d447169Doug Zongker    void setJunkPath(bool val) { mJunkPath = val; }
1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    const char* getOutputAPKFile() const { return mOutputAPKFile; }
1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void setOutputAPKFile(const char* val) { mOutputAPKFile = val; }
1082fee0ed6eb99b211efa06f095a41268a2021214aJeff Hamilton    const char* getManifestPackageNameOverride() const { return mManifestPackageNameOverride; }
1092fee0ed6eb99b211efa06f095a41268a2021214aJeff Hamilton    void setManifestPackageNameOverride(const char * val) { mManifestPackageNameOverride = val; }
110ef05e076ced1a32c5c0aaee28403779834adb2baDianne Hackborn    const char* getInstrumentationPackageNameOverride() const { return mInstrumentationPackageNameOverride; }
111ef05e076ced1a32c5c0aaee28403779834adb2baDianne Hackborn    void setInstrumentationPackageNameOverride(const char * val) { mInstrumentationPackageNameOverride = val; }
11299080c7d9ad9e5ccfec70dd10e4c24468a960c45Xavier Ducrohet    bool getAutoAddOverlay() { return mAutoAddOverlay; }
11399080c7d9ad9e5ccfec70dd10e4c24468a960c45Xavier Ducrohet    void setAutoAddOverlay(bool val) { mAutoAddOverlay = val; }
1149bf34ca6f85309c65b0ebdf614cb8266401b49baJosiah Gaskin    bool getGenDependencies() { return mGenDependencies; }
1159bf34ca6f85309c65b0ebdf614cb8266401b49baJosiah Gaskin    void setGenDependencies(bool val) { mGenDependencies = val; }
1167714a2429b192c88e134ff67b969121bbaeb5457Xavier Ducrohet    bool getErrorOnFailedInsert() { return mErrorOnFailedInsert; }
1177714a2429b192c88e134ff67b969121bbaeb5457Xavier Ducrohet    void setErrorOnFailedInsert(bool val) { mErrorOnFailedInsert = val; }
1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1196c997a9e880e08c354ffd809bd62df9e25e9c4d4Dianne Hackborn    bool getUTF16StringsOption() {
1206c997a9e880e08c354ffd809bd62df9e25e9c4d4Dianne Hackborn        return mWantUTF16 || !isMinSdkAtLeast(SDK_FROYO);
1216c997a9e880e08c354ffd809bd62df9e25e9c4d4Dianne Hackborn    }
1226c997a9e880e08c354ffd809bd62df9e25e9c4d4Dianne Hackborn
123dbe7a68cc13ae135b33769918932838d2d447169Doug Zongker    /*
124dbe7a68cc13ae135b33769918932838d2d447169Doug Zongker     * Input options.
1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    const char* getAssetSourceDir() const { return mAssetSourceDir; }
1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void setAssetSourceDir(const char* dir) { mAssetSourceDir = dir; }
1288a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin    const char* getCrunchedOutputDir() const { return mCrunchedOutputDir; }
1298a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin    void setCrunchedOutputDir(const char* dir) { mCrunchedOutputDir = dir; }
1301553c82e084ac5763fb393857224145506771b99Joe Onorato    const char* getProguardFile() const { return mProguardFile; }
1311553c82e084ac5763fb393857224145506771b99Joe Onorato    void setProguardFile(const char* file) { mProguardFile = file; }
1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    const android::Vector<const char*>& getResourceSourceDirs() const { return mResourceSourceDirs; }
1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void addResourceSourceDir(const char* dir) { mResourceSourceDirs.insertAt(dir,0); }
1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    const char* getAndroidManifestFile() const { return mAndroidManifestFile; }
1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void setAndroidManifestFile(const char* file) { mAndroidManifestFile = file; }
1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    const char* getPublicOutputFile() const { return mPublicOutputFile; }
1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void setPublicOutputFile(const char* file) { mPublicOutputFile = file; }
1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    const char* getRClassDir() const { return mRClassDir; }
1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void setRClassDir(const char* dir) { mRClassDir = dir; }
1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    const char* getConfigurations() const { return mConfigurations.size() > 0 ? mConfigurations.string() : NULL; }
1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void addConfigurations(const char* val) { if (mConfigurations.size() > 0) { mConfigurations.append(","); mConfigurations.append(val); } else { mConfigurations = val; } }
142e6b680364dd992907a8d2037685a2e500d188dfbDianne Hackborn    const char* getPreferredConfigurations() const { return mPreferredConfigurations.size() > 0 ? mPreferredConfigurations.string() : NULL; }
143e6b680364dd992907a8d2037685a2e500d188dfbDianne Hackborn    void addPreferredConfigurations(const char* val) { if (mPreferredConfigurations.size() > 0) { mPreferredConfigurations.append(","); mPreferredConfigurations.append(val); } else { mPreferredConfigurations = val; } }
1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    const char* getResourceIntermediatesDir() const { return mResourceIntermediatesDir; }
1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void setResourceIntermediatesDir(const char* dir) { mResourceIntermediatesDir = dir; }
1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    const android::Vector<const char*>& getPackageIncludes() const { return mPackageIncludes; }
1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void addPackageInclude(const char* file) { mPackageIncludes.add(file); }
1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    const android::Vector<const char*>& getJarFiles() const { return mJarFiles; }
1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void addJarFile(const char* file) { mJarFiles.add(file); }
1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    const android::Vector<const char*>& getNoCompressExtensions() const { return mNoCompressExtensions; }
1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void addNoCompressExtension(const char* ext) { mNoCompressExtensions.add(ext); }
1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1531741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root    const char*  getManifestMinSdkVersion() const { return mManifestMinSdkVersion; }
1541741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root    void setManifestMinSdkVersion(const char*  val) { mManifestMinSdkVersion = val; }
155a96cbb435d7b2197ab2b61fd98d14cbd6e0c5c3dDianne Hackborn    const char*  getMinSdkVersion() const { return mMinSdkVersion; }
1561741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root    void setMinSdkVersion(const char*  val) { mMinSdkVersion = val; }
157a96cbb435d7b2197ab2b61fd98d14cbd6e0c5c3dDianne Hackborn    const char*  getTargetSdkVersion() const { return mTargetSdkVersion; }
158a96cbb435d7b2197ab2b61fd98d14cbd6e0c5c3dDianne Hackborn    void setTargetSdkVersion(const char*  val) { mTargetSdkVersion = val; }
159a96cbb435d7b2197ab2b61fd98d14cbd6e0c5c3dDianne Hackborn    const char*  getMaxSdkVersion() const { return mMaxSdkVersion; }
160a96cbb435d7b2197ab2b61fd98d14cbd6e0c5c3dDianne Hackborn    void setMaxSdkVersion(const char*  val) { mMaxSdkVersion = val; }
161a96cbb435d7b2197ab2b61fd98d14cbd6e0c5c3dDianne Hackborn    const char*  getVersionCode() const { return mVersionCode; }
162a96cbb435d7b2197ab2b61fd98d14cbd6e0c5c3dDianne Hackborn    void setVersionCode(const char*  val) { mVersionCode = val; }
163a96cbb435d7b2197ab2b61fd98d14cbd6e0c5c3dDianne Hackborn    const char* getVersionName() const { return mVersionName; }
164a96cbb435d7b2197ab2b61fd98d14cbd6e0c5c3dDianne Hackborn    void setVersionName(const char* val) { mVersionName = val; }
16563459ad555c10de1f316d6de01fc3cd0c0aaa457Xavier Ducrohet    const char* getCustomPackage() const { return mCustomPackage; }
16663459ad555c10de1f316d6de01fc3cd0c0aaa457Xavier Ducrohet    void setCustomPackage(const char* val) { mCustomPackage = val; }
167ce89f1531ed8b96b8b790b3f8b18dd4cf483f7f0Josiah Gaskin    const char* getExtraPackages() const { return mExtraPackages; }
168ce89f1531ed8b96b8b790b3f8b18dd4cf483f7f0Josiah Gaskin    void setExtraPackages(const char* val) { mExtraPackages = val; }
169588f228d6a3e3b254fbc1f13f29ee47e13a669c1Ficus Kirkpatrick    const char* getMaxResVersion() const { return mMaxResVersion; }
170588f228d6a3e3b254fbc1f13f29ee47e13a669c1Ficus Kirkpatrick    void setMaxResVersion(const char * val) { mMaxResVersion = val; }
171c0f7366a15655c6973ea21029f1997f24c006ccaJeff Brown    bool getDebugMode() const { return mDebugMode; }
1726487b099231b1e5d36ae37a921399b028b3b3ad9Xavier Ducrohet    void setDebugMode(bool val) { mDebugMode = val; }
173c0f7366a15655c6973ea21029f1997f24c006ccaJeff Brown    bool getNonConstantId() const { return mNonConstantId; }
174d06c1afbb920111d6bb77381560faa1fac5f2d69Xavier Ducrohet    void setNonConstantId(bool val) { mNonConstantId = val; }
17590964040cabfc67f92a7c3322a02401bb6f8ae82Eric Fischer    const char* getProduct() const { return mProduct; }
17690964040cabfc67f92a7c3322a02401bb6f8ae82Eric Fischer    void setProduct(const char * val) { mProduct = val; }
1778a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin    void setUseCrunchCache(bool val) { mUseCrunchCache = val; }
178c0f7366a15655c6973ea21029f1997f24c006ccaJeff Brown    bool getUseCrunchCache() const { return mUseCrunchCache; }
179f5de650ff1e161ea135c828e43515895343d2c0fXavier Ducrohet    const char* getOutputTextSymbols() const { return mOutputTextSymbols; }
180f5de650ff1e161ea135c828e43515895343d2c0fXavier Ducrohet    void setOutputTextSymbols(const char* val) { mOutputTextSymbols = val; }
181b1f6ad82dd8d1702617a757a88430604b3131facXavier Ducrohet    const char* getSingleCrunchInputFile() const { return mSingleCrunchInputFile; }
182b1f6ad82dd8d1702617a757a88430604b3131facXavier Ducrohet    void setSingleCrunchInputFile(const char* val) { mSingleCrunchInputFile = val; }
183b1f6ad82dd8d1702617a757a88430604b3131facXavier Ducrohet    const char* getSingleCrunchOutputFile() const { return mSingleCrunchOutputFile; }
184b1f6ad82dd8d1702617a757a88430604b3131facXavier Ducrohet    void setSingleCrunchOutputFile(const char* val) { mSingleCrunchOutputFile = val; }
185dbe7a68cc13ae135b33769918932838d2d447169Doug Zongker
1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /*
1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Set and get the file specification.
1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Note this does NOT make a copy of argv.
1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void setFileSpec(char* const argv[], int argc) {
1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mArgc = argc;
1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mArgv = argv;
1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int getFileSpecCount(void) const { return mArgc; }
1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    const char* getFileSpecEntry(int idx) const { return mArgv[idx]; }
1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void eatArgs(int n) {
1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (n > mArgc) n = mArgc;
1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mArgv += n;
2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mArgc -= n;
2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#if 0
2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /*
2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Package count.  Nothing to do with anything else here; this is
2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * just a convenient place to stuff it so we don't have to pass it
2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * around everywhere.
2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int getPackageCount(void) const { return mPackageCount; }
2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void setPackageCount(int val) { mPackageCount = val; }
2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#endif
2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
213c9f3088036dd7cce6903e307afea3e289a334036Kenny Root    /* Certain features may only be available on a specific SDK level or
214c9f3088036dd7cce6903e307afea3e289a334036Kenny Root     * above. SDK levels that have a non-numeric identifier are assumed
215c9f3088036dd7cce6903e307afea3e289a334036Kenny Root     * to be newer than any SDK level that has a number designated.
2161741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root     */
217c9f3088036dd7cce6903e307afea3e289a334036Kenny Root    bool isMinSdkAtLeast(int desired) {
2181741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root        /* If the application specifies a minSdkVersion in the manifest
2191741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root         * then use that. Otherwise, check what the user specified on
2201741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root         * the command line. If neither, it's not available since
2211741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root         * the minimum SDK version is assumed to be 1.
2221741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root         */
2231741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root        const char *minVer;
2241741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root        if (mManifestMinSdkVersion != NULL) {
2251741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root            minVer = mManifestMinSdkVersion;
2261741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root        } else if (mMinSdkVersion != NULL) {
2271741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root            minVer = mMinSdkVersion;
2281741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root        } else {
2291741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root            return false;
2301741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root        }
2311741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root
2321741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root        char *end;
2331741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root        int minSdkNum = (int)strtol(minVer, &end, 0);
2341741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root        if (*end == '\0') {
235c9f3088036dd7cce6903e307afea3e289a334036Kenny Root            if (minSdkNum < desired) {
2361741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root                return false;
2371741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root            }
2381741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root        }
2391741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root        return true;
2401741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root    }
2411741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root
2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectprivate:
2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /* commands & modifiers */
2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    Command     mCmd;
2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    bool        mVerbose;
2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    bool        mAndroidList;
2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    bool        mForce;
2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int         mGrayscaleTolerance;
2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    bool        mMakePackageDirs;
2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    bool        mUpdate;
2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    bool        mExtending;
2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    bool        mRequireLocalization;
2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    bool        mPseudolocalize;
2541741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root    bool        mWantUTF16;
255e17086ba346009a26cc2299b133a0fe602acb6ecDianne Hackborn    bool        mValues;
2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int         mCompressionMethod;
257dbe7a68cc13ae135b33769918932838d2d447169Doug Zongker    bool        mJunkPath;
2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    const char* mOutputAPKFile;
2592fee0ed6eb99b211efa06f095a41268a2021214aJeff Hamilton    const char* mManifestPackageNameOverride;
260ef05e076ced1a32c5c0aaee28403779834adb2baDianne Hackborn    const char* mInstrumentationPackageNameOverride;
26199080c7d9ad9e5ccfec70dd10e4c24468a960c45Xavier Ducrohet    bool        mAutoAddOverlay;
2629bf34ca6f85309c65b0ebdf614cb8266401b49baJosiah Gaskin    bool        mGenDependencies;
2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    const char* mAssetSourceDir;
2648a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin    const char* mCrunchedOutputDir;
2651553c82e084ac5763fb393857224145506771b99Joe Onorato    const char* mProguardFile;
2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    const char* mAndroidManifestFile;
2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    const char* mPublicOutputFile;
2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    const char* mRClassDir;
2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    const char* mResourceIntermediatesDir;
2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    android::String8 mConfigurations;
271e6b680364dd992907a8d2037685a2e500d188dfbDianne Hackborn    android::String8 mPreferredConfigurations;
2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    android::Vector<const char*> mPackageIncludes;
2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    android::Vector<const char*> mJarFiles;
2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    android::Vector<const char*> mNoCompressExtensions;
2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    android::Vector<const char*> mResourceSourceDirs;
276dbe7a68cc13ae135b33769918932838d2d447169Doug Zongker
2771741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root    const char* mManifestMinSdkVersion;
278a96cbb435d7b2197ab2b61fd98d14cbd6e0c5c3dDianne Hackborn    const char* mMinSdkVersion;
279a96cbb435d7b2197ab2b61fd98d14cbd6e0c5c3dDianne Hackborn    const char* mTargetSdkVersion;
280a96cbb435d7b2197ab2b61fd98d14cbd6e0c5c3dDianne Hackborn    const char* mMaxSdkVersion;
281a96cbb435d7b2197ab2b61fd98d14cbd6e0c5c3dDianne Hackborn    const char* mVersionCode;
282a96cbb435d7b2197ab2b61fd98d14cbd6e0c5c3dDianne Hackborn    const char* mVersionName;
28363459ad555c10de1f316d6de01fc3cd0c0aaa457Xavier Ducrohet    const char* mCustomPackage;
284ce89f1531ed8b96b8b790b3f8b18dd4cf483f7f0Josiah Gaskin    const char* mExtraPackages;
285588f228d6a3e3b254fbc1f13f29ee47e13a669c1Ficus Kirkpatrick    const char* mMaxResVersion;
2866487b099231b1e5d36ae37a921399b028b3b3ad9Xavier Ducrohet    bool        mDebugMode;
287d06c1afbb920111d6bb77381560faa1fac5f2d69Xavier Ducrohet    bool        mNonConstantId;
28890964040cabfc67f92a7c3322a02401bb6f8ae82Eric Fischer    const char* mProduct;
2898a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin    bool        mUseCrunchCache;
2907714a2429b192c88e134ff67b969121bbaeb5457Xavier Ducrohet    bool        mErrorOnFailedInsert;
291f5de650ff1e161ea135c828e43515895343d2c0fXavier Ducrohet    const char* mOutputTextSymbols;
292b1f6ad82dd8d1702617a757a88430604b3131facXavier Ducrohet    const char* mSingleCrunchInputFile;
293b1f6ad82dd8d1702617a757a88430604b3131facXavier Ducrohet    const char* mSingleCrunchOutputFile;
294dbe7a68cc13ae135b33769918932838d2d447169Doug Zongker
2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /* file specification */
2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int         mArgc;
2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    char* const* mArgv;
2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#if 0
3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /* misc stuff */
3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int         mPackageCount;
3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#endif
303b5ef7ee1644b099498ddd29c1d051e7ee26ccfd3Kenny Root
3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project};
3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#endif // __BUNDLE_H
307