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
179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Things we can do.
199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projecttypedef enum Command {
219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    kCommandUnknown = 0,
229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    kCommandVersion,
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    kCommandList,
249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    kCommandDump,
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    kCommandAdd,
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    kCommandRemove,
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    kCommandPackage,
288a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin    kCommandCrunch,
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} Command;
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Bundle of goodies, including everything specified on the command line.
339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass Bundle {
359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic:
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    Bundle(void)
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        : mCmd(kCommandUnknown), mVerbose(false), mAndroidList(false),
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project          mForce(false), mGrayscaleTolerance(0), mMakePackageDirs(false),
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project          mUpdate(false), mExtending(false),
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project          mRequireLocalization(false), mPseudolocalize(false),
411741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root          mWantUTF16(false), mValues(false),
42ef05e076ced1a32c5c0aaee28403779834adb2baDianne Hackborn          mCompressionMethod(0), mOutputAPKFile(NULL),
43ef05e076ced1a32c5c0aaee28403779834adb2baDianne Hackborn          mManifestPackageNameOverride(NULL), mInstrumentationPackageNameOverride(NULL),
4457f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad          mIsOverlayPackage(false),
459bf34ca6f85309c65b0ebdf614cb8266401b49baJosiah Gaskin          mAutoAddOverlay(false), mGenDependencies(false),
468a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin          mAssetSourceDir(NULL),
478a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin          mCrunchedOutputDir(NULL), mProguardFile(NULL),
489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project          mAndroidManifestFile(NULL), mPublicOutputFile(NULL),
491741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root          mRClassDir(NULL), mResourceIntermediatesDir(NULL), mManifestMinSdkVersion(NULL),
50fa6baa259d8b1af768e5c1d7ceb27184391f8fb1Dianne Hackborn          mMinSdkVersion(NULL), mTargetSdkVersion(NULL), mMaxSdkVersion(NULL),
51ce89f1531ed8b96b8b790b3f8b18dd4cf483f7f0Josiah Gaskin          mVersionCode(NULL), mVersionName(NULL), mCustomPackage(NULL), mExtraPackages(NULL),
52d06c1afbb920111d6bb77381560faa1fac5f2d69Xavier Ducrohet          mMaxResVersion(NULL), mDebugMode(false), mNonConstantId(false), mProduct(NULL),
538a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin          mUseCrunchCache(false), mArgc(0), mArgv(NULL)
549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        {}
559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ~Bundle(void) {}
569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /*
589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Set the command value.  Returns "false" if it was previously set.
599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    Command getCommand(void) const { return mCmd; }
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void setCommand(Command cmd) { mCmd = cmd; }
629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /*
649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Command modifiers.  Not all modifiers are appropriate for all
659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * commands.
669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    bool getVerbose(void) const { return mVerbose; }
689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void setVerbose(bool val) { mVerbose = val; }
699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    bool getAndroidList(void) const { return mAndroidList; }
709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void setAndroidList(bool val) { mAndroidList = val; }
719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    bool getForce(void) const { return mForce; }
729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void setForce(bool val) { mForce = val; }
739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void setGrayscaleTolerance(int val) { mGrayscaleTolerance = val; }
749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int  getGrayscaleTolerance() { return mGrayscaleTolerance; }
759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    bool getMakePackageDirs(void) const { return mMakePackageDirs; }
769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void setMakePackageDirs(bool val) { mMakePackageDirs = val; }
779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    bool getUpdate(void) const { return mUpdate; }
789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void setUpdate(bool val) { mUpdate = val; }
799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    bool getExtending(void) const { return mExtending; }
809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void setExtending(bool val) { mExtending = val; }
819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    bool getRequireLocalization(void) const { return mRequireLocalization; }
829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void setRequireLocalization(bool val) { mRequireLocalization = val; }
839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    bool getPseudolocalize(void) const { return mPseudolocalize; }
849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void setPseudolocalize(bool val) { mPseudolocalize = val; }
851741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root    bool getWantUTF16(void) const { return mWantUTF16; }
861741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root    void setWantUTF16(bool val) { mWantUTF16 = val; }
87e17086ba346009a26cc2299b133a0fe602acb6ecDianne Hackborn    bool getValues(void) const { return mValues; }
88e17086ba346009a26cc2299b133a0fe602acb6ecDianne Hackborn    void setValues(bool val) { mValues = val; }
899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int getCompressionMethod(void) const { return mCompressionMethod; }
909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void setCompressionMethod(int val) { mCompressionMethod = val; }
91dbe7a68cc13ae135b33769918932838d2d447169Doug Zongker    bool getJunkPath(void) const { return mJunkPath; }
92dbe7a68cc13ae135b33769918932838d2d447169Doug Zongker    void setJunkPath(bool val) { mJunkPath = val; }
939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    const char* getOutputAPKFile() const { return mOutputAPKFile; }
949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void setOutputAPKFile(const char* val) { mOutputAPKFile = val; }
952fee0ed6eb99b211efa06f095a41268a2021214aJeff Hamilton    const char* getManifestPackageNameOverride() const { return mManifestPackageNameOverride; }
962fee0ed6eb99b211efa06f095a41268a2021214aJeff Hamilton    void setManifestPackageNameOverride(const char * val) { mManifestPackageNameOverride = val; }
97ef05e076ced1a32c5c0aaee28403779834adb2baDianne Hackborn    const char* getInstrumentationPackageNameOverride() const { return mInstrumentationPackageNameOverride; }
98ef05e076ced1a32c5c0aaee28403779834adb2baDianne Hackborn    void setInstrumentationPackageNameOverride(const char * val) { mInstrumentationPackageNameOverride = val; }
9957f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad    bool getIsOverlayPackage() const { return mIsOverlayPackage; }
10057f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad    void setIsOverlayPackage(bool val) { mIsOverlayPackage = val; }
10199080c7d9ad9e5ccfec70dd10e4c24468a960c45Xavier Ducrohet    bool getAutoAddOverlay() { return mAutoAddOverlay; }
10299080c7d9ad9e5ccfec70dd10e4c24468a960c45Xavier Ducrohet    void setAutoAddOverlay(bool val) { mAutoAddOverlay = val; }
1039bf34ca6f85309c65b0ebdf614cb8266401b49baJosiah Gaskin    bool getGenDependencies() { return mGenDependencies; }
1049bf34ca6f85309c65b0ebdf614cb8266401b49baJosiah Gaskin    void setGenDependencies(bool val) { mGenDependencies = val; }
1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
106dbe7a68cc13ae135b33769918932838d2d447169Doug Zongker    /*
107dbe7a68cc13ae135b33769918932838d2d447169Doug Zongker     * Input options.
1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    const char* getAssetSourceDir() const { return mAssetSourceDir; }
1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void setAssetSourceDir(const char* dir) { mAssetSourceDir = dir; }
1118a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin    const char* getCrunchedOutputDir() const { return mCrunchedOutputDir; }
1128a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin    void setCrunchedOutputDir(const char* dir) { mCrunchedOutputDir = dir; }
1131553c82e084ac5763fb393857224145506771b99Joe Onorato    const char* getProguardFile() const { return mProguardFile; }
1141553c82e084ac5763fb393857224145506771b99Joe Onorato    void setProguardFile(const char* file) { mProguardFile = file; }
1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    const android::Vector<const char*>& getResourceSourceDirs() const { return mResourceSourceDirs; }
1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void addResourceSourceDir(const char* dir) { mResourceSourceDirs.insertAt(dir,0); }
1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    const char* getAndroidManifestFile() const { return mAndroidManifestFile; }
1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void setAndroidManifestFile(const char* file) { mAndroidManifestFile = file; }
1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    const char* getPublicOutputFile() const { return mPublicOutputFile; }
1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void setPublicOutputFile(const char* file) { mPublicOutputFile = file; }
1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    const char* getRClassDir() const { return mRClassDir; }
1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void setRClassDir(const char* dir) { mRClassDir = dir; }
1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    const char* getConfigurations() const { return mConfigurations.size() > 0 ? mConfigurations.string() : NULL; }
1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void addConfigurations(const char* val) { if (mConfigurations.size() > 0) { mConfigurations.append(","); mConfigurations.append(val); } else { mConfigurations = val; } }
125e6b680364dd992907a8d2037685a2e500d188dfbDianne Hackborn    const char* getPreferredConfigurations() const { return mPreferredConfigurations.size() > 0 ? mPreferredConfigurations.string() : NULL; }
126e6b680364dd992907a8d2037685a2e500d188dfbDianne Hackborn    void addPreferredConfigurations(const char* val) { if (mPreferredConfigurations.size() > 0) { mPreferredConfigurations.append(","); mPreferredConfigurations.append(val); } else { mPreferredConfigurations = val; } }
1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    const char* getResourceIntermediatesDir() const { return mResourceIntermediatesDir; }
1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void setResourceIntermediatesDir(const char* dir) { mResourceIntermediatesDir = dir; }
1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    const android::Vector<const char*>& getPackageIncludes() const { return mPackageIncludes; }
1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void addPackageInclude(const char* file) { mPackageIncludes.add(file); }
1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    const android::Vector<const char*>& getJarFiles() const { return mJarFiles; }
1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void addJarFile(const char* file) { mJarFiles.add(file); }
1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    const android::Vector<const char*>& getNoCompressExtensions() const { return mNoCompressExtensions; }
1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void addNoCompressExtension(const char* ext) { mNoCompressExtensions.add(ext); }
1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1361741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root    const char*  getManifestMinSdkVersion() const { return mManifestMinSdkVersion; }
1371741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root    void setManifestMinSdkVersion(const char*  val) { mManifestMinSdkVersion = val; }
138a96cbb435d7b2197ab2b61fd98d14cbd6e0c5c3dDianne Hackborn    const char*  getMinSdkVersion() const { return mMinSdkVersion; }
1391741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root    void setMinSdkVersion(const char*  val) { mMinSdkVersion = val; }
140a96cbb435d7b2197ab2b61fd98d14cbd6e0c5c3dDianne Hackborn    const char*  getTargetSdkVersion() const { return mTargetSdkVersion; }
141a96cbb435d7b2197ab2b61fd98d14cbd6e0c5c3dDianne Hackborn    void setTargetSdkVersion(const char*  val) { mTargetSdkVersion = val; }
142a96cbb435d7b2197ab2b61fd98d14cbd6e0c5c3dDianne Hackborn    const char*  getMaxSdkVersion() const { return mMaxSdkVersion; }
143a96cbb435d7b2197ab2b61fd98d14cbd6e0c5c3dDianne Hackborn    void setMaxSdkVersion(const char*  val) { mMaxSdkVersion = val; }
144a96cbb435d7b2197ab2b61fd98d14cbd6e0c5c3dDianne Hackborn    const char*  getVersionCode() const { return mVersionCode; }
145a96cbb435d7b2197ab2b61fd98d14cbd6e0c5c3dDianne Hackborn    void setVersionCode(const char*  val) { mVersionCode = val; }
146a96cbb435d7b2197ab2b61fd98d14cbd6e0c5c3dDianne Hackborn    const char* getVersionName() const { return mVersionName; }
147a96cbb435d7b2197ab2b61fd98d14cbd6e0c5c3dDianne Hackborn    void setVersionName(const char* val) { mVersionName = val; }
14863459ad555c10de1f316d6de01fc3cd0c0aaa457Xavier Ducrohet    const char* getCustomPackage() const { return mCustomPackage; }
14963459ad555c10de1f316d6de01fc3cd0c0aaa457Xavier Ducrohet    void setCustomPackage(const char* val) { mCustomPackage = val; }
150ce89f1531ed8b96b8b790b3f8b18dd4cf483f7f0Josiah Gaskin    const char* getExtraPackages() const { return mExtraPackages; }
151ce89f1531ed8b96b8b790b3f8b18dd4cf483f7f0Josiah Gaskin    void setExtraPackages(const char* val) { mExtraPackages = val; }
152588f228d6a3e3b254fbc1f13f29ee47e13a669c1Ficus Kirkpatrick    const char* getMaxResVersion() const { return mMaxResVersion; }
153588f228d6a3e3b254fbc1f13f29ee47e13a669c1Ficus Kirkpatrick    void setMaxResVersion(const char * val) { mMaxResVersion = val; }
1546487b099231b1e5d36ae37a921399b028b3b3ad9Xavier Ducrohet    bool getDebugMode() { return mDebugMode; }
1556487b099231b1e5d36ae37a921399b028b3b3ad9Xavier Ducrohet    void setDebugMode(bool val) { mDebugMode = val; }
156d06c1afbb920111d6bb77381560faa1fac5f2d69Xavier Ducrohet    bool getNonConstantId() { return mNonConstantId; }
157d06c1afbb920111d6bb77381560faa1fac5f2d69Xavier Ducrohet    void setNonConstantId(bool val) { mNonConstantId = val; }
15890964040cabfc67f92a7c3322a02401bb6f8ae82Eric Fischer    const char* getProduct() const { return mProduct; }
15990964040cabfc67f92a7c3322a02401bb6f8ae82Eric Fischer    void setProduct(const char * val) { mProduct = val; }
1608a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin    void setUseCrunchCache(bool val) { mUseCrunchCache = val; }
1618a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin    bool getUseCrunchCache() { return mUseCrunchCache; }
162dbe7a68cc13ae135b33769918932838d2d447169Doug Zongker
1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /*
1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Set and get the file specification.
1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Note this does NOT make a copy of argv.
1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void setFileSpec(char* const argv[], int argc) {
1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mArgc = argc;
1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mArgv = argv;
1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int getFileSpecCount(void) const { return mArgc; }
1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    const char* getFileSpecEntry(int idx) const { return mArgv[idx]; }
1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void eatArgs(int n) {
1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (n > mArgc) n = mArgc;
1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mArgv += n;
1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mArgc -= n;
1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#if 0
1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /*
1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Package count.  Nothing to do with anything else here; this is
1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * just a convenient place to stuff it so we don't have to pass it
1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * around everywhere.
1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int getPackageCount(void) const { return mPackageCount; }
1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void setPackageCount(int val) { mPackageCount = val; }
1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#endif
1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
190c9f3088036dd7cce6903e307afea3e289a334036Kenny Root    /* Certain features may only be available on a specific SDK level or
191c9f3088036dd7cce6903e307afea3e289a334036Kenny Root     * above. SDK levels that have a non-numeric identifier are assumed
192c9f3088036dd7cce6903e307afea3e289a334036Kenny Root     * to be newer than any SDK level that has a number designated.
1931741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root     */
194c9f3088036dd7cce6903e307afea3e289a334036Kenny Root    bool isMinSdkAtLeast(int desired) {
1951741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root        /* If the application specifies a minSdkVersion in the manifest
1961741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root         * then use that. Otherwise, check what the user specified on
1971741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root         * the command line. If neither, it's not available since
1981741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root         * the minimum SDK version is assumed to be 1.
1991741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root         */
2001741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root        const char *minVer;
2011741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root        if (mManifestMinSdkVersion != NULL) {
2021741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root            minVer = mManifestMinSdkVersion;
2031741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root        } else if (mMinSdkVersion != NULL) {
2041741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root            minVer = mMinSdkVersion;
2051741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root        } else {
2061741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root            return false;
2071741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root        }
2081741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root
2091741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root        char *end;
2101741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root        int minSdkNum = (int)strtol(minVer, &end, 0);
2111741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root        if (*end == '\0') {
212c9f3088036dd7cce6903e307afea3e289a334036Kenny Root            if (minSdkNum < desired) {
2131741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root                return false;
2141741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root            }
2151741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root        }
2161741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root        return true;
2171741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root    }
2181741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root
2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectprivate:
2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /* commands & modifiers */
2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    Command     mCmd;
2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    bool        mVerbose;
2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    bool        mAndroidList;
2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    bool        mForce;
2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int         mGrayscaleTolerance;
2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    bool        mMakePackageDirs;
2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    bool        mUpdate;
2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    bool        mExtending;
2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    bool        mRequireLocalization;
2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    bool        mPseudolocalize;
2311741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root    bool        mWantUTF16;
232e17086ba346009a26cc2299b133a0fe602acb6ecDianne Hackborn    bool        mValues;
2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int         mCompressionMethod;
234dbe7a68cc13ae135b33769918932838d2d447169Doug Zongker    bool        mJunkPath;
2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    const char* mOutputAPKFile;
2362fee0ed6eb99b211efa06f095a41268a2021214aJeff Hamilton    const char* mManifestPackageNameOverride;
237ef05e076ced1a32c5c0aaee28403779834adb2baDianne Hackborn    const char* mInstrumentationPackageNameOverride;
23857f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad    bool        mIsOverlayPackage;
23999080c7d9ad9e5ccfec70dd10e4c24468a960c45Xavier Ducrohet    bool        mAutoAddOverlay;
2409bf34ca6f85309c65b0ebdf614cb8266401b49baJosiah Gaskin    bool        mGenDependencies;
2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    const char* mAssetSourceDir;
2428a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin    const char* mCrunchedOutputDir;
2431553c82e084ac5763fb393857224145506771b99Joe Onorato    const char* mProguardFile;
2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    const char* mAndroidManifestFile;
2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    const char* mPublicOutputFile;
2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    const char* mRClassDir;
2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    const char* mResourceIntermediatesDir;
2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    android::String8 mConfigurations;
249e6b680364dd992907a8d2037685a2e500d188dfbDianne Hackborn    android::String8 mPreferredConfigurations;
2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    android::Vector<const char*> mPackageIncludes;
2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    android::Vector<const char*> mJarFiles;
2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    android::Vector<const char*> mNoCompressExtensions;
2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    android::Vector<const char*> mResourceSourceDirs;
254dbe7a68cc13ae135b33769918932838d2d447169Doug Zongker
2551741cd4904414b5b4e768953a8f1abb3f0ef0a0aKenny Root    const char* mManifestMinSdkVersion;
256a96cbb435d7b2197ab2b61fd98d14cbd6e0c5c3dDianne Hackborn    const char* mMinSdkVersion;
257a96cbb435d7b2197ab2b61fd98d14cbd6e0c5c3dDianne Hackborn    const char* mTargetSdkVersion;
258a96cbb435d7b2197ab2b61fd98d14cbd6e0c5c3dDianne Hackborn    const char* mMaxSdkVersion;
259a96cbb435d7b2197ab2b61fd98d14cbd6e0c5c3dDianne Hackborn    const char* mVersionCode;
260a96cbb435d7b2197ab2b61fd98d14cbd6e0c5c3dDianne Hackborn    const char* mVersionName;
26163459ad555c10de1f316d6de01fc3cd0c0aaa457Xavier Ducrohet    const char* mCustomPackage;
262ce89f1531ed8b96b8b790b3f8b18dd4cf483f7f0Josiah Gaskin    const char* mExtraPackages;
263588f228d6a3e3b254fbc1f13f29ee47e13a669c1Ficus Kirkpatrick    const char* mMaxResVersion;
2646487b099231b1e5d36ae37a921399b028b3b3ad9Xavier Ducrohet    bool        mDebugMode;
265d06c1afbb920111d6bb77381560faa1fac5f2d69Xavier Ducrohet    bool        mNonConstantId;
26690964040cabfc67f92a7c3322a02401bb6f8ae82Eric Fischer    const char* mProduct;
2678a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin    bool        mUseCrunchCache;
268dbe7a68cc13ae135b33769918932838d2d447169Doug Zongker
2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /* file specification */
2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int         mArgc;
2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    char* const* mArgv;
2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#if 0
2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /* misc stuff */
2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int         mPackageCount;
2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#endif
277b5ef7ee1644b099498ddd29c1d051e7ee26ccfd3Kenny Root
2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project};
2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#endif // __BUNDLE_H
281