1282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski//
2282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski// Copyright 2006 The Android Open Source Project
3282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski//
4282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski// State bundle.  Used to pass around stuff like command-line args.
5282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski//
6282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski#ifndef __BUNDLE_H
7282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski#define __BUNDLE_H
8282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
9282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski#include <stdlib.h>
10282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski#include <utils/Log.h>
11282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski#include <utils/threads.h>
12282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski#include <utils/List.h>
13282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski#include <utils/Errors.h>
14282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski#include <utils/String8.h>
15282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski#include <utils/Vector.h>
16282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
17dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski#include "SdkConstants.h"
18282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
19282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski/*
20282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * Things we can do.
21282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski */
22282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskitypedef enum Command {
23282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    kCommandUnknown = 0,
24282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    kCommandVersion,
25282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    kCommandList,
26282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    kCommandDump,
27282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    kCommandAdd,
28282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    kCommandRemove,
29282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    kCommandPackage,
30282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    kCommandCrunch,
31282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    kCommandSingleCrunch,
326f1280cf170b358a57ff70341a9f2ad224e5a662Jerome Dochez    kCommandDaemon
33282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski} Command;
34282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
35282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski/*
36a2ef5c0d4fb863c0382e77ae00f986a019b11cbeAnton Krumin * Pseudolocalization methods
37a2ef5c0d4fb863c0382e77ae00f986a019b11cbeAnton Krumin */
38a2ef5c0d4fb863c0382e77ae00f986a019b11cbeAnton Krumintypedef enum PseudolocalizationMethod {
39a2ef5c0d4fb863c0382e77ae00f986a019b11cbeAnton Krumin    NO_PSEUDOLOCALIZATION = 0,
40a2ef5c0d4fb863c0382e77ae00f986a019b11cbeAnton Krumin    PSEUDO_ACCENTED,
41a2ef5c0d4fb863c0382e77ae00f986a019b11cbeAnton Krumin    PSEUDO_BIDI,
42a2ef5c0d4fb863c0382e77ae00f986a019b11cbeAnton Krumin} PseudolocalizationMethod;
43a2ef5c0d4fb863c0382e77ae00f986a019b11cbeAnton Krumin
44a2ef5c0d4fb863c0382e77ae00f986a019b11cbeAnton Krumin/*
45282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * Bundle of goodies, including everything specified on the command line.
46282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski */
47282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiclass Bundle {
48282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskipublic:
49282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    Bundle(void)
50282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        : mCmd(kCommandUnknown), mVerbose(false), mAndroidList(false),
51282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski          mForce(false), mGrayscaleTolerance(0), mMakePackageDirs(false),
52282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski          mUpdate(false), mExtending(false),
53a2ef5c0d4fb863c0382e77ae00f986a019b11cbeAnton Krumin          mRequireLocalization(false), mPseudolocalize(NO_PSEUDOLOCALIZATION),
54282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski          mWantUTF16(false), mValues(false), mIncludeMetaData(false),
55282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski          mCompressionMethod(0), mJunkPath(false), mOutputAPKFile(NULL),
56282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski          mManifestPackageNameOverride(NULL), mInstrumentationPackageNameOverride(NULL),
576e46056abc1c2803ed7f195bab169bbb1cacec6bAdam Lesinski          mAutoAddOverlay(false), mGenDependencies(false), mNoVersionVectors(false),
584d35cca96ce55eb29d1948086214f91ae94e9adbYuichi Araki          mNoVersionTransitions(false),
5986229cb622fccde8ab8cbe85eead91a34313a708Rohit Agrawal          mCrunchedOutputDir(NULL), mProguardFile(NULL), mMainDexProguardFile(NULL),
60282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski          mAndroidManifestFile(NULL), mPublicOutputFile(NULL),
61282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski          mRClassDir(NULL), mResourceIntermediatesDir(NULL), mManifestMinSdkVersion(NULL),
62282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski          mMinSdkVersion(NULL), mTargetSdkVersion(NULL), mMaxSdkVersion(NULL),
63df08d1c24dbbc242978ee33416d1e54998f88915Jeff Davidson          mVersionCode(NULL), mVersionName(NULL), mReplaceVersion(false), mCustomPackage(NULL),
64df08d1c24dbbc242978ee33416d1e54998f88915Jeff Davidson          mExtraPackages(NULL), mMaxResVersion(NULL), mDebugMode(false), mNonConstantId(false),
655892248580859620db90d5ef2e3c2f48531933faAdrian Roos          mSkipSymbolsWithoutDefaultLocalization(false),
66df08d1c24dbbc242978ee33416d1e54998f88915Jeff Davidson          mProduct(NULL), mUseCrunchCache(false), mErrorOnFailedInsert(false),
67df08d1c24dbbc242978ee33416d1e54998f88915Jeff Davidson          mErrorOnMissingConfigEntry(false), mOutputTextSymbols(NULL),
68282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski          mSingleCrunchInputFile(NULL), mSingleCrunchOutputFile(NULL),
69de898ff42912bd7ca1bfb099cd439562496765a4Adam Lesinski          mBuildSharedLibrary(false),
70a6d7e3fb9c9233b9ae46b702d17433854c43d6a0Tao Bai          mBuildAppAsSharedLibrary(false),
71282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski          mArgc(0), mArgv(NULL)
72282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        {}
73282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    ~Bundle(void) {}
74282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
75282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    /*
76282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     * Set the command value.  Returns "false" if it was previously set.
77282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     */
78282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    Command getCommand(void) const { return mCmd; }
79282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void setCommand(Command cmd) { mCmd = cmd; }
80282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
81282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    /*
82282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     * Command modifiers.  Not all modifiers are appropriate for all
83282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     * commands.
84282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     */
85282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    bool getVerbose(void) const { return mVerbose; }
86282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void setVerbose(bool val) { mVerbose = val; }
87282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    bool getAndroidList(void) const { return mAndroidList; }
88282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void setAndroidList(bool val) { mAndroidList = val; }
89282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    bool getForce(void) const { return mForce; }
90282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void setForce(bool val) { mForce = val; }
91282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void setGrayscaleTolerance(int val) { mGrayscaleTolerance = val; }
92282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    int  getGrayscaleTolerance() const { return mGrayscaleTolerance; }
93282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    bool getMakePackageDirs(void) const { return mMakePackageDirs; }
94282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void setMakePackageDirs(bool val) { mMakePackageDirs = val; }
95282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    bool getUpdate(void) const { return mUpdate; }
96282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void setUpdate(bool val) { mUpdate = val; }
97282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    bool getExtending(void) const { return mExtending; }
98282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void setExtending(bool val) { mExtending = val; }
99282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    bool getRequireLocalization(void) const { return mRequireLocalization; }
100282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void setRequireLocalization(bool val) { mRequireLocalization = val; }
101a2ef5c0d4fb863c0382e77ae00f986a019b11cbeAnton Krumin    short getPseudolocalize(void) const { return mPseudolocalize; }
102a2ef5c0d4fb863c0382e77ae00f986a019b11cbeAnton Krumin    void setPseudolocalize(short val) { mPseudolocalize = val; }
103282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void setWantUTF16(bool val) { mWantUTF16 = val; }
104282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    bool getValues(void) const { return mValues; }
105282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void setValues(bool val) { mValues = val; }
106282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    bool getIncludeMetaData(void) const { return mIncludeMetaData; }
107282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void setIncludeMetaData(bool val) { mIncludeMetaData = val; }
108282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    int getCompressionMethod(void) const { return mCompressionMethod; }
109282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void setCompressionMethod(int val) { mCompressionMethod = val; }
110282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    bool getJunkPath(void) const { return mJunkPath; }
111282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void setJunkPath(bool val) { mJunkPath = val; }
112282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char* getOutputAPKFile() const { return mOutputAPKFile; }
113282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void setOutputAPKFile(const char* val) { mOutputAPKFile = val; }
114282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char* getManifestPackageNameOverride() const { return mManifestPackageNameOverride; }
115282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void setManifestPackageNameOverride(const char * val) { mManifestPackageNameOverride = val; }
116282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char* getInstrumentationPackageNameOverride() const { return mInstrumentationPackageNameOverride; }
117282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void setInstrumentationPackageNameOverride(const char * val) { mInstrumentationPackageNameOverride = val; }
118282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    bool getAutoAddOverlay() { return mAutoAddOverlay; }
119282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void setAutoAddOverlay(bool val) { mAutoAddOverlay = val; }
120282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    bool getGenDependencies() { return mGenDependencies; }
121282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void setGenDependencies(bool val) { mGenDependencies = val; }
122282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    bool getErrorOnFailedInsert() { return mErrorOnFailedInsert; }
123282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void setErrorOnFailedInsert(bool val) { mErrorOnFailedInsert = val; }
124cd28bd37ea2d88dd72930f032ca73daaad5744b4Ying Wang    bool getErrorOnMissingConfigEntry() { return mErrorOnMissingConfigEntry; }
125cd28bd37ea2d88dd72930f032ca73daaad5744b4Ying Wang    void setErrorOnMissingConfigEntry(bool val) { mErrorOnMissingConfigEntry = val; }
126ad2d07d2d98a46babb2a9472413fe9ce5080ca76Adam Lesinski    const android::String8& getPlatformBuildVersionCode() { return mPlatformVersionCode; }
127ad2d07d2d98a46babb2a9472413fe9ce5080ca76Adam Lesinski    void setPlatformBuildVersionCode(const android::String8& code) { mPlatformVersionCode = code; }
128ad2d07d2d98a46babb2a9472413fe9ce5080ca76Adam Lesinski    const android::String8& getPlatformBuildVersionName() { return mPlatformVersionName; }
129ad2d07d2d98a46babb2a9472413fe9ce5080ca76Adam Lesinski    void setPlatformBuildVersionName(const android::String8& name) { mPlatformVersionName = name; }
130282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
13178713998f94a2cc2562aa0ae7761bbc563d8eafaAdam Lesinski    const android::String8& getPrivateSymbolsPackage() const { return mPrivateSymbolsPackage; }
13278713998f94a2cc2562aa0ae7761bbc563d8eafaAdam Lesinski
13378713998f94a2cc2562aa0ae7761bbc563d8eafaAdam Lesinski    void setPrivateSymbolsPackage(const android::String8& package) {
13478713998f94a2cc2562aa0ae7761bbc563d8eafaAdam Lesinski        mPrivateSymbolsPackage = package;
13578713998f94a2cc2562aa0ae7761bbc563d8eafaAdam Lesinski    }
13678713998f94a2cc2562aa0ae7761bbc563d8eafaAdam Lesinski
137282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    bool getUTF16StringsOption() {
138282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        return mWantUTF16 || !isMinSdkAtLeast(SDK_FROYO);
139282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    }
140282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
141282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    /*
142282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     * Input options.
143282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     */
14409384303dea4f3f01d5682918d7bab9bf83a02b1Adam Lesinski    const android::Vector<const char*>& getAssetSourceDirs() const { return mAssetSourceDirs; }
14509384303dea4f3f01d5682918d7bab9bf83a02b1Adam Lesinski    void addAssetSourceDir(const char* dir) { mAssetSourceDirs.insertAt(dir,0); }
146282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char* getCrunchedOutputDir() const { return mCrunchedOutputDir; }
147282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void setCrunchedOutputDir(const char* dir) { mCrunchedOutputDir = dir; }
148282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char* getProguardFile() const { return mProguardFile; }
149282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void setProguardFile(const char* file) { mProguardFile = file; }
15086229cb622fccde8ab8cbe85eead91a34313a708Rohit Agrawal    const char* getMainDexProguardFile() const { return mMainDexProguardFile; }
15186229cb622fccde8ab8cbe85eead91a34313a708Rohit Agrawal    void setMainDexProguardFile(const char* file) { mMainDexProguardFile = file; }
152282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const android::Vector<const char*>& getResourceSourceDirs() const { return mResourceSourceDirs; }
153282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void addResourceSourceDir(const char* dir) { mResourceSourceDirs.insertAt(dir,0); }
154282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char* getAndroidManifestFile() const { return mAndroidManifestFile; }
155282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void setAndroidManifestFile(const char* file) { mAndroidManifestFile = file; }
156282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char* getPublicOutputFile() const { return mPublicOutputFile; }
157282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void setPublicOutputFile(const char* file) { mPublicOutputFile = file; }
158282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char* getRClassDir() const { return mRClassDir; }
159282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void setRClassDir(const char* dir) { mRClassDir = dir; }
160fab50875b98e8274ac8ee44b38ba42521bbbf1f9Adam Lesinski    const android::String8& getConfigurations() const { return mConfigurations; }
161282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void addConfigurations(const char* val) { if (mConfigurations.size() > 0) { mConfigurations.append(","); mConfigurations.append(val); } else { mConfigurations = val; } }
162fab50875b98e8274ac8ee44b38ba42521bbbf1f9Adam Lesinski    const android::String8& getPreferredDensity() const { return mPreferredDensity; }
163fab50875b98e8274ac8ee44b38ba42521bbbf1f9Adam Lesinski    void setPreferredDensity(const char* val) { mPreferredDensity = val; }
164fab50875b98e8274ac8ee44b38ba42521bbbf1f9Adam Lesinski    void addSplitConfigurations(const char* val) { mPartialConfigurations.add(android::String8(val)); }
165fab50875b98e8274ac8ee44b38ba42521bbbf1f9Adam Lesinski    const android::Vector<android::String8>& getSplitConfigurations() const { return mPartialConfigurations; }
166282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char* getResourceIntermediatesDir() const { return mResourceIntermediatesDir; }
167282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void setResourceIntermediatesDir(const char* dir) { mResourceIntermediatesDir = dir; }
168833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski    const android::Vector<android::String8>& getPackageIncludes() const { return mPackageIncludes; }
169833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski    void addPackageInclude(const char* file) { mPackageIncludes.add(android::String8(file)); }
170282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const android::Vector<const char*>& getJarFiles() const { return mJarFiles; }
171282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void addJarFile(const char* file) { mJarFiles.add(file); }
172282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const android::Vector<const char*>& getNoCompressExtensions() const { return mNoCompressExtensions; }
173282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void addNoCompressExtension(const char* ext) { mNoCompressExtensions.add(ext); }
174833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski    void setFeatureOfPackage(const char* str) { mFeatureOfPackage = str; }
175833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski    const android::String8& getFeatureOfPackage() const { return mFeatureOfPackage; }
176833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski    void setFeatureAfterPackage(const char* str) { mFeatureAfterPackage = str; }
177833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski    const android::String8& getFeatureAfterPackage() const { return mFeatureAfterPackage; }
178282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
179282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char*  getManifestMinSdkVersion() const { return mManifestMinSdkVersion; }
180282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void setManifestMinSdkVersion(const char*  val) { mManifestMinSdkVersion = val; }
181282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char*  getMinSdkVersion() const { return mMinSdkVersion; }
182282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void setMinSdkVersion(const char*  val) { mMinSdkVersion = val; }
183282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char*  getTargetSdkVersion() const { return mTargetSdkVersion; }
184282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void setTargetSdkVersion(const char*  val) { mTargetSdkVersion = val; }
185282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char*  getMaxSdkVersion() const { return mMaxSdkVersion; }
186282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void setMaxSdkVersion(const char*  val) { mMaxSdkVersion = val; }
187282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char*  getVersionCode() const { return mVersionCode; }
188282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void setVersionCode(const char*  val) { mVersionCode = val; }
189282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char* getVersionName() const { return mVersionName; }
190282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void setVersionName(const char* val) { mVersionName = val; }
191df08d1c24dbbc242978ee33416d1e54998f88915Jeff Davidson    bool getReplaceVersion() { return mReplaceVersion; }
192df08d1c24dbbc242978ee33416d1e54998f88915Jeff Davidson    void setReplaceVersion(bool val) { mReplaceVersion = val; }
19354de298c01ad79fe7f5850eb7aefc2542dd8d5daAdam Lesinski    const android::String8& getRevisionCode() { return mRevisionCode; }
19454de298c01ad79fe7f5850eb7aefc2542dd8d5daAdam Lesinski    void setRevisionCode(const char* val) { mRevisionCode = android::String8(val); }
195282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char* getCustomPackage() const { return mCustomPackage; }
196282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void setCustomPackage(const char* val) { mCustomPackage = val; }
197282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char* getExtraPackages() const { return mExtraPackages; }
198282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void setExtraPackages(const char* val) { mExtraPackages = val; }
199282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char* getMaxResVersion() const { return mMaxResVersion; }
200282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void setMaxResVersion(const char * val) { mMaxResVersion = val; }
201282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    bool getDebugMode() const { return mDebugMode; }
202282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void setDebugMode(bool val) { mDebugMode = val; }
203282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    bool getNonConstantId() const { return mNonConstantId; }
204282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void setNonConstantId(bool val) { mNonConstantId = val; }
2055892248580859620db90d5ef2e3c2f48531933faAdrian Roos    bool getSkipSymbolsWithoutDefaultLocalization() const { return mSkipSymbolsWithoutDefaultLocalization; }
2065892248580859620db90d5ef2e3c2f48531933faAdrian Roos    void setSkipSymbolsWithoutDefaultLocalization(bool val) { mSkipSymbolsWithoutDefaultLocalization = val; }
207282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char* getProduct() const { return mProduct; }
208282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void setProduct(const char * val) { mProduct = val; }
209282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void setUseCrunchCache(bool val) { mUseCrunchCache = val; }
210282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    bool getUseCrunchCache() const { return mUseCrunchCache; }
211282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char* getOutputTextSymbols() const { return mOutputTextSymbols; }
212282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void setOutputTextSymbols(const char* val) { mOutputTextSymbols = val; }
213282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char* getSingleCrunchInputFile() const { return mSingleCrunchInputFile; }
214282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void setSingleCrunchInputFile(const char* val) { mSingleCrunchInputFile = val; }
215282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char* getSingleCrunchOutputFile() const { return mSingleCrunchOutputFile; }
216282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void setSingleCrunchOutputFile(const char* val) { mSingleCrunchOutputFile = val; }
217de898ff42912bd7ca1bfb099cd439562496765a4Adam Lesinski    bool getBuildSharedLibrary() const { return mBuildSharedLibrary; }
218de898ff42912bd7ca1bfb099cd439562496765a4Adam Lesinski    void setBuildSharedLibrary(bool val) { mBuildSharedLibrary = val; }
219a6d7e3fb9c9233b9ae46b702d17433854c43d6a0Tao Bai    bool getBuildAppAsSharedLibrary() const { return mBuildAppAsSharedLibrary; }
220a6d7e3fb9c9233b9ae46b702d17433854c43d6a0Tao Bai    void setBuildAppAsSharedLibrary(bool val) { mBuildAppAsSharedLibrary = val; }
2216e46056abc1c2803ed7f195bab169bbb1cacec6bAdam Lesinski    void setNoVersionVectors(bool val) { mNoVersionVectors = val; }
2226e46056abc1c2803ed7f195bab169bbb1cacec6bAdam Lesinski    bool getNoVersionVectors() const { return mNoVersionVectors; }
2234d35cca96ce55eb29d1948086214f91ae94e9adbYuichi Araki    void setNoVersionTransitions(bool val) { mNoVersionTransitions = val; }
2244d35cca96ce55eb29d1948086214f91ae94e9adbYuichi Araki    bool getNoVersionTransitions() const { return mNoVersionTransitions; }
225282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
226282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    /*
227282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     * Set and get the file specification.
228282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     *
229282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     * Note this does NOT make a copy of argv.
230282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     */
231282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void setFileSpec(char* const argv[], int argc) {
232282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        mArgc = argc;
233282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        mArgv = argv;
234282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    }
235282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    int getFileSpecCount(void) const { return mArgc; }
236282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char* getFileSpecEntry(int idx) const { return mArgv[idx]; }
237282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void eatArgs(int n) {
238282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        if (n > mArgc) n = mArgc;
239282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        mArgv += n;
240282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        mArgc -= n;
241282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    }
242282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
243282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski#if 0
244282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    /*
245282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     * Package count.  Nothing to do with anything else here; this is
246282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     * just a convenient place to stuff it so we don't have to pass it
247282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     * around everywhere.
248282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     */
249282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    int getPackageCount(void) const { return mPackageCount; }
250282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void setPackageCount(int val) { mPackageCount = val; }
251282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski#endif
252282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
253282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    /* Certain features may only be available on a specific SDK level or
254282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     * above. SDK levels that have a non-numeric identifier are assumed
255282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     * to be newer than any SDK level that has a number designated.
256282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     */
25748efde4fb14cfe160747a8148b8e1a810c8f1c6eMatt Sarett    bool isMinSdkAtLeast(int desired) const {
258282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        /* If the application specifies a minSdkVersion in the manifest
259282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski         * then use that. Otherwise, check what the user specified on
260282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski         * the command line. If neither, it's not available since
261282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski         * the minimum SDK version is assumed to be 1.
262282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski         */
263282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        const char *minVer;
264282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        if (mManifestMinSdkVersion != NULL) {
265282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            minVer = mManifestMinSdkVersion;
266282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        } else if (mMinSdkVersion != NULL) {
267282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            minVer = mMinSdkVersion;
268282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        } else {
269282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            return false;
270282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        }
271282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
272282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        char *end;
273282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        int minSdkNum = (int)strtol(minVer, &end, 0);
274282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        if (*end == '\0') {
275282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            if (minSdkNum < desired) {
276282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski                return false;
277282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            }
278282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        }
279282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        return true;
280282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    }
281282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
282282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiprivate:
283282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    /* commands & modifiers */
284282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    Command     mCmd;
285282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    bool        mVerbose;
286282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    bool        mAndroidList;
287282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    bool        mForce;
288282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    int         mGrayscaleTolerance;
289282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    bool        mMakePackageDirs;
290282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    bool        mUpdate;
291282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    bool        mExtending;
292282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    bool        mRequireLocalization;
293a2ef5c0d4fb863c0382e77ae00f986a019b11cbeAnton Krumin    short       mPseudolocalize;
294282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    bool        mWantUTF16;
295282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    bool        mValues;
296282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    bool        mIncludeMetaData;
297282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    int         mCompressionMethod;
298282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    bool        mJunkPath;
299282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char* mOutputAPKFile;
300282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char* mManifestPackageNameOverride;
301282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char* mInstrumentationPackageNameOverride;
302282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    bool        mAutoAddOverlay;
303282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    bool        mGenDependencies;
3046e46056abc1c2803ed7f195bab169bbb1cacec6bAdam Lesinski    bool        mNoVersionVectors;
3054d35cca96ce55eb29d1948086214f91ae94e9adbYuichi Araki    bool        mNoVersionTransitions;
306282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char* mCrunchedOutputDir;
307282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char* mProguardFile;
30886229cb622fccde8ab8cbe85eead91a34313a708Rohit Agrawal    const char* mMainDexProguardFile;
309282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char* mAndroidManifestFile;
310282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char* mPublicOutputFile;
311282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char* mRClassDir;
312282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char* mResourceIntermediatesDir;
313282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    android::String8 mConfigurations;
314fab50875b98e8274ac8ee44b38ba42521bbbf1f9Adam Lesinski    android::String8 mPreferredDensity;
315fab50875b98e8274ac8ee44b38ba42521bbbf1f9Adam Lesinski    android::Vector<android::String8> mPartialConfigurations;
316833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski    android::Vector<android::String8> mPackageIncludes;
317282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    android::Vector<const char*> mJarFiles;
318282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    android::Vector<const char*> mNoCompressExtensions;
31909384303dea4f3f01d5682918d7bab9bf83a02b1Adam Lesinski    android::Vector<const char*> mAssetSourceDirs;
320282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    android::Vector<const char*> mResourceSourceDirs;
321282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
322833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski    android::String8 mFeatureOfPackage;
323833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski    android::String8 mFeatureAfterPackage;
32454de298c01ad79fe7f5850eb7aefc2542dd8d5daAdam Lesinski    android::String8 mRevisionCode;
325282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char* mManifestMinSdkVersion;
326282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char* mMinSdkVersion;
327282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char* mTargetSdkVersion;
328282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char* mMaxSdkVersion;
329282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char* mVersionCode;
330282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char* mVersionName;
331df08d1c24dbbc242978ee33416d1e54998f88915Jeff Davidson    bool        mReplaceVersion;
332282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char* mCustomPackage;
333282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char* mExtraPackages;
334282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char* mMaxResVersion;
335282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    bool        mDebugMode;
336282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    bool        mNonConstantId;
3375892248580859620db90d5ef2e3c2f48531933faAdrian Roos    bool        mSkipSymbolsWithoutDefaultLocalization;
338282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char* mProduct;
339282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    bool        mUseCrunchCache;
340282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    bool        mErrorOnFailedInsert;
341cd28bd37ea2d88dd72930f032ca73daaad5744b4Ying Wang    bool        mErrorOnMissingConfigEntry;
342282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char* mOutputTextSymbols;
343282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char* mSingleCrunchInputFile;
344282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char* mSingleCrunchOutputFile;
345de898ff42912bd7ca1bfb099cd439562496765a4Adam Lesinski    bool        mBuildSharedLibrary;
346a6d7e3fb9c9233b9ae46b702d17433854c43d6a0Tao Bai    bool        mBuildAppAsSharedLibrary;
347ad2d07d2d98a46babb2a9472413fe9ce5080ca76Adam Lesinski    android::String8 mPlatformVersionCode;
348ad2d07d2d98a46babb2a9472413fe9ce5080ca76Adam Lesinski    android::String8 mPlatformVersionName;
34978713998f94a2cc2562aa0ae7761bbc563d8eafaAdam Lesinski    android::String8 mPrivateSymbolsPackage;
350282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
351282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    /* file specification */
352282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    int         mArgc;
353282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    char* const* mArgv;
354282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
355282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski#if 0
356282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    /* misc stuff */
357282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    int         mPackageCount;
358282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski#endif
359282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
360282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski};
361282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
362282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski#endif // __BUNDLE_H
363