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),
7111be9317efffafcac52cd2dc5cce1d951c966dd1Alan Viverette          mCompileSdkVersion(0),
72282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski          mArgc(0), mArgv(NULL)
73282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        {}
74282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    ~Bundle(void) {}
75282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
76282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    /*
77282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     * Set the command value.  Returns "false" if it was previously set.
78282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     */
79282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    Command getCommand(void) const { return mCmd; }
80282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void setCommand(Command cmd) { mCmd = cmd; }
81282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
82282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    /*
83282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     * Command modifiers.  Not all modifiers are appropriate for all
84282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     * commands.
85282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     */
86282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    bool getVerbose(void) const { return mVerbose; }
87282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void setVerbose(bool val) { mVerbose = val; }
88282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    bool getAndroidList(void) const { return mAndroidList; }
89282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void setAndroidList(bool val) { mAndroidList = val; }
90282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    bool getForce(void) const { return mForce; }
91282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void setForce(bool val) { mForce = val; }
92282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void setGrayscaleTolerance(int val) { mGrayscaleTolerance = val; }
93282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    int  getGrayscaleTolerance() const { return mGrayscaleTolerance; }
94282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    bool getMakePackageDirs(void) const { return mMakePackageDirs; }
95282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void setMakePackageDirs(bool val) { mMakePackageDirs = val; }
96282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    bool getUpdate(void) const { return mUpdate; }
97282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void setUpdate(bool val) { mUpdate = val; }
98282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    bool getExtending(void) const { return mExtending; }
99282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void setExtending(bool val) { mExtending = val; }
100282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    bool getRequireLocalization(void) const { return mRequireLocalization; }
101282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void setRequireLocalization(bool val) { mRequireLocalization = val; }
102a2ef5c0d4fb863c0382e77ae00f986a019b11cbeAnton Krumin    short getPseudolocalize(void) const { return mPseudolocalize; }
103a2ef5c0d4fb863c0382e77ae00f986a019b11cbeAnton Krumin    void setPseudolocalize(short val) { mPseudolocalize = val; }
104282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void setWantUTF16(bool val) { mWantUTF16 = val; }
105282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    bool getValues(void) const { return mValues; }
106282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void setValues(bool val) { mValues = val; }
107282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    bool getIncludeMetaData(void) const { return mIncludeMetaData; }
108282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void setIncludeMetaData(bool val) { mIncludeMetaData = val; }
109282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    int getCompressionMethod(void) const { return mCompressionMethod; }
110282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void setCompressionMethod(int val) { mCompressionMethod = val; }
111282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    bool getJunkPath(void) const { return mJunkPath; }
112282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void setJunkPath(bool val) { mJunkPath = val; }
113282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char* getOutputAPKFile() const { return mOutputAPKFile; }
114282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void setOutputAPKFile(const char* val) { mOutputAPKFile = val; }
115282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char* getManifestPackageNameOverride() const { return mManifestPackageNameOverride; }
116282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void setManifestPackageNameOverride(const char * val) { mManifestPackageNameOverride = val; }
117282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char* getInstrumentationPackageNameOverride() const { return mInstrumentationPackageNameOverride; }
118282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void setInstrumentationPackageNameOverride(const char * val) { mInstrumentationPackageNameOverride = val; }
119282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    bool getAutoAddOverlay() { return mAutoAddOverlay; }
120282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void setAutoAddOverlay(bool val) { mAutoAddOverlay = val; }
121282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    bool getGenDependencies() { return mGenDependencies; }
122282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void setGenDependencies(bool val) { mGenDependencies = val; }
123282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    bool getErrorOnFailedInsert() { return mErrorOnFailedInsert; }
124282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void setErrorOnFailedInsert(bool val) { mErrorOnFailedInsert = val; }
125cd28bd37ea2d88dd72930f032ca73daaad5744b4Ying Wang    bool getErrorOnMissingConfigEntry() { return mErrorOnMissingConfigEntry; }
126cd28bd37ea2d88dd72930f032ca73daaad5744b4Ying Wang    void setErrorOnMissingConfigEntry(bool val) { mErrorOnMissingConfigEntry = val; }
12711be9317efffafcac52cd2dc5cce1d951c966dd1Alan Viverette    const android::String8& getCompileSdkVersionCodename() { return mCompileSdkVersionCodename; }
12811be9317efffafcac52cd2dc5cce1d951c966dd1Alan Viverette    void setCompileSdkVersionCodename(const android::String8& codename) { mCompileSdkVersionCodename = codename; }
12911be9317efffafcac52cd2dc5cce1d951c966dd1Alan Viverette    int getCompileSdkVersion() { return mCompileSdkVersion; }
13011be9317efffafcac52cd2dc5cce1d951c966dd1Alan Viverette    void setCompileSdkVersion(int version) { mCompileSdkVersion = version; }
131ad2d07d2d98a46babb2a9472413fe9ce5080ca76Adam Lesinski    const android::String8& getPlatformBuildVersionCode() { return mPlatformVersionCode; }
132ad2d07d2d98a46babb2a9472413fe9ce5080ca76Adam Lesinski    void setPlatformBuildVersionCode(const android::String8& code) { mPlatformVersionCode = code; }
133ad2d07d2d98a46babb2a9472413fe9ce5080ca76Adam Lesinski    const android::String8& getPlatformBuildVersionName() { return mPlatformVersionName; }
134ad2d07d2d98a46babb2a9472413fe9ce5080ca76Adam Lesinski    void setPlatformBuildVersionName(const android::String8& name) { mPlatformVersionName = name; }
135282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
13678713998f94a2cc2562aa0ae7761bbc563d8eafaAdam Lesinski    const android::String8& getPrivateSymbolsPackage() const { return mPrivateSymbolsPackage; }
13778713998f94a2cc2562aa0ae7761bbc563d8eafaAdam Lesinski
13878713998f94a2cc2562aa0ae7761bbc563d8eafaAdam Lesinski    void setPrivateSymbolsPackage(const android::String8& package) {
13978713998f94a2cc2562aa0ae7761bbc563d8eafaAdam Lesinski        mPrivateSymbolsPackage = package;
14078713998f94a2cc2562aa0ae7761bbc563d8eafaAdam Lesinski    }
14178713998f94a2cc2562aa0ae7761bbc563d8eafaAdam Lesinski
142282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    bool getUTF16StringsOption() {
143282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        return mWantUTF16 || !isMinSdkAtLeast(SDK_FROYO);
144282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    }
145282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
146282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    /*
147282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     * Input options.
148282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     */
14909384303dea4f3f01d5682918d7bab9bf83a02b1Adam Lesinski    const android::Vector<const char*>& getAssetSourceDirs() const { return mAssetSourceDirs; }
15009384303dea4f3f01d5682918d7bab9bf83a02b1Adam Lesinski    void addAssetSourceDir(const char* dir) { mAssetSourceDirs.insertAt(dir,0); }
151282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char* getCrunchedOutputDir() const { return mCrunchedOutputDir; }
152282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void setCrunchedOutputDir(const char* dir) { mCrunchedOutputDir = dir; }
153282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char* getProguardFile() const { return mProguardFile; }
154282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void setProguardFile(const char* file) { mProguardFile = file; }
15586229cb622fccde8ab8cbe85eead91a34313a708Rohit Agrawal    const char* getMainDexProguardFile() const { return mMainDexProguardFile; }
15686229cb622fccde8ab8cbe85eead91a34313a708Rohit Agrawal    void setMainDexProguardFile(const char* file) { mMainDexProguardFile = file; }
157282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const android::Vector<const char*>& getResourceSourceDirs() const { return mResourceSourceDirs; }
158282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void addResourceSourceDir(const char* dir) { mResourceSourceDirs.insertAt(dir,0); }
159282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char* getAndroidManifestFile() const { return mAndroidManifestFile; }
160282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void setAndroidManifestFile(const char* file) { mAndroidManifestFile = file; }
161282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char* getPublicOutputFile() const { return mPublicOutputFile; }
162282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void setPublicOutputFile(const char* file) { mPublicOutputFile = file; }
163282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char* getRClassDir() const { return mRClassDir; }
164282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void setRClassDir(const char* dir) { mRClassDir = dir; }
165fab50875b98e8274ac8ee44b38ba42521bbbf1f9Adam Lesinski    const android::String8& getConfigurations() const { return mConfigurations; }
166282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void addConfigurations(const char* val) { if (mConfigurations.size() > 0) { mConfigurations.append(","); mConfigurations.append(val); } else { mConfigurations = val; } }
167fab50875b98e8274ac8ee44b38ba42521bbbf1f9Adam Lesinski    const android::String8& getPreferredDensity() const { return mPreferredDensity; }
168fab50875b98e8274ac8ee44b38ba42521bbbf1f9Adam Lesinski    void setPreferredDensity(const char* val) { mPreferredDensity = val; }
169fab50875b98e8274ac8ee44b38ba42521bbbf1f9Adam Lesinski    void addSplitConfigurations(const char* val) { mPartialConfigurations.add(android::String8(val)); }
170fab50875b98e8274ac8ee44b38ba42521bbbf1f9Adam Lesinski    const android::Vector<android::String8>& getSplitConfigurations() const { return mPartialConfigurations; }
171282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char* getResourceIntermediatesDir() const { return mResourceIntermediatesDir; }
172282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void setResourceIntermediatesDir(const char* dir) { mResourceIntermediatesDir = dir; }
173833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski    const android::Vector<android::String8>& getPackageIncludes() const { return mPackageIncludes; }
174833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski    void addPackageInclude(const char* file) { mPackageIncludes.add(android::String8(file)); }
175282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const android::Vector<const char*>& getJarFiles() const { return mJarFiles; }
176282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void addJarFile(const char* file) { mJarFiles.add(file); }
177282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const android::Vector<const char*>& getNoCompressExtensions() const { return mNoCompressExtensions; }
178282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void addNoCompressExtension(const char* ext) { mNoCompressExtensions.add(ext); }
179833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski    void setFeatureOfPackage(const char* str) { mFeatureOfPackage = str; }
180833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski    const android::String8& getFeatureOfPackage() const { return mFeatureOfPackage; }
181833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski    void setFeatureAfterPackage(const char* str) { mFeatureAfterPackage = str; }
182833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski    const android::String8& getFeatureAfterPackage() const { return mFeatureAfterPackage; }
183282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
184282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char*  getManifestMinSdkVersion() const { return mManifestMinSdkVersion; }
185282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void setManifestMinSdkVersion(const char*  val) { mManifestMinSdkVersion = val; }
186282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char*  getMinSdkVersion() const { return mMinSdkVersion; }
187282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void setMinSdkVersion(const char*  val) { mMinSdkVersion = val; }
188282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char*  getTargetSdkVersion() const { return mTargetSdkVersion; }
189282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void setTargetSdkVersion(const char*  val) { mTargetSdkVersion = val; }
190282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char*  getMaxSdkVersion() const { return mMaxSdkVersion; }
191282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void setMaxSdkVersion(const char*  val) { mMaxSdkVersion = val; }
192282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char*  getVersionCode() const { return mVersionCode; }
193282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void setVersionCode(const char*  val) { mVersionCode = val; }
194282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char* getVersionName() const { return mVersionName; }
195282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void setVersionName(const char* val) { mVersionName = val; }
196df08d1c24dbbc242978ee33416d1e54998f88915Jeff Davidson    bool getReplaceVersion() { return mReplaceVersion; }
197df08d1c24dbbc242978ee33416d1e54998f88915Jeff Davidson    void setReplaceVersion(bool val) { mReplaceVersion = val; }
19854de298c01ad79fe7f5850eb7aefc2542dd8d5daAdam Lesinski    const android::String8& getRevisionCode() { return mRevisionCode; }
19954de298c01ad79fe7f5850eb7aefc2542dd8d5daAdam Lesinski    void setRevisionCode(const char* val) { mRevisionCode = android::String8(val); }
200282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char* getCustomPackage() const { return mCustomPackage; }
201282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void setCustomPackage(const char* val) { mCustomPackage = val; }
202282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char* getExtraPackages() const { return mExtraPackages; }
203282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void setExtraPackages(const char* val) { mExtraPackages = val; }
204282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char* getMaxResVersion() const { return mMaxResVersion; }
205282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void setMaxResVersion(const char * val) { mMaxResVersion = val; }
206282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    bool getDebugMode() const { return mDebugMode; }
207282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void setDebugMode(bool val) { mDebugMode = val; }
208282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    bool getNonConstantId() const { return mNonConstantId; }
209282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void setNonConstantId(bool val) { mNonConstantId = val; }
2105892248580859620db90d5ef2e3c2f48531933faAdrian Roos    bool getSkipSymbolsWithoutDefaultLocalization() const { return mSkipSymbolsWithoutDefaultLocalization; }
2115892248580859620db90d5ef2e3c2f48531933faAdrian Roos    void setSkipSymbolsWithoutDefaultLocalization(bool val) { mSkipSymbolsWithoutDefaultLocalization = val; }
212282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char* getProduct() const { return mProduct; }
213282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void setProduct(const char * val) { mProduct = val; }
214282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void setUseCrunchCache(bool val) { mUseCrunchCache = val; }
215282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    bool getUseCrunchCache() const { return mUseCrunchCache; }
216282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char* getOutputTextSymbols() const { return mOutputTextSymbols; }
217282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void setOutputTextSymbols(const char* val) { mOutputTextSymbols = val; }
218282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char* getSingleCrunchInputFile() const { return mSingleCrunchInputFile; }
219282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void setSingleCrunchInputFile(const char* val) { mSingleCrunchInputFile = val; }
220282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char* getSingleCrunchOutputFile() const { return mSingleCrunchOutputFile; }
221282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void setSingleCrunchOutputFile(const char* val) { mSingleCrunchOutputFile = val; }
222de898ff42912bd7ca1bfb099cd439562496765a4Adam Lesinski    bool getBuildSharedLibrary() const { return mBuildSharedLibrary; }
223de898ff42912bd7ca1bfb099cd439562496765a4Adam Lesinski    void setBuildSharedLibrary(bool val) { mBuildSharedLibrary = val; }
224a6d7e3fb9c9233b9ae46b702d17433854c43d6a0Tao Bai    bool getBuildAppAsSharedLibrary() const { return mBuildAppAsSharedLibrary; }
225a6d7e3fb9c9233b9ae46b702d17433854c43d6a0Tao Bai    void setBuildAppAsSharedLibrary(bool val) { mBuildAppAsSharedLibrary = val; }
2266e46056abc1c2803ed7f195bab169bbb1cacec6bAdam Lesinski    void setNoVersionVectors(bool val) { mNoVersionVectors = val; }
2276e46056abc1c2803ed7f195bab169bbb1cacec6bAdam Lesinski    bool getNoVersionVectors() const { return mNoVersionVectors; }
2284d35cca96ce55eb29d1948086214f91ae94e9adbYuichi Araki    void setNoVersionTransitions(bool val) { mNoVersionTransitions = val; }
2294d35cca96ce55eb29d1948086214f91ae94e9adbYuichi Araki    bool getNoVersionTransitions() const { return mNoVersionTransitions; }
230282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
231282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    /*
232282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     * Set and get the file specification.
233282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     *
234282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     * Note this does NOT make a copy of argv.
235282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     */
236282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void setFileSpec(char* const argv[], int argc) {
237282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        mArgc = argc;
238282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        mArgv = argv;
239282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    }
240282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    int getFileSpecCount(void) const { return mArgc; }
241282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char* getFileSpecEntry(int idx) const { return mArgv[idx]; }
242282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void eatArgs(int n) {
243282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        if (n > mArgc) n = mArgc;
244282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        mArgv += n;
245282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        mArgc -= n;
246282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    }
247282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
248282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski#if 0
249282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    /*
250282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     * Package count.  Nothing to do with anything else here; this is
251282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     * just a convenient place to stuff it so we don't have to pass it
252282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     * around everywhere.
253282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     */
254282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    int getPackageCount(void) const { return mPackageCount; }
255282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    void setPackageCount(int val) { mPackageCount = val; }
256282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski#endif
257282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
258282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    /* Certain features may only be available on a specific SDK level or
259282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     * above. SDK levels that have a non-numeric identifier are assumed
260282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     * to be newer than any SDK level that has a number designated.
261282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     */
26248efde4fb14cfe160747a8148b8e1a810c8f1c6eMatt Sarett    bool isMinSdkAtLeast(int desired) const {
263282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        /* If the application specifies a minSdkVersion in the manifest
264282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski         * then use that. Otherwise, check what the user specified on
265282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski         * the command line. If neither, it's not available since
266282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski         * the minimum SDK version is assumed to be 1.
267282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski         */
268282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        const char *minVer;
269282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        if (mManifestMinSdkVersion != NULL) {
270282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            minVer = mManifestMinSdkVersion;
271282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        } else if (mMinSdkVersion != NULL) {
272282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            minVer = mMinSdkVersion;
273282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        } else {
274282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            return false;
275282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        }
276282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
277282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        char *end;
278282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        int minSdkNum = (int)strtol(minVer, &end, 0);
279282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        if (*end == '\0') {
280282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            if (minSdkNum < desired) {
281282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski                return false;
282282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            }
283282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        }
284282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        return true;
285282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    }
286282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
287282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiprivate:
288282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    /* commands & modifiers */
289282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    Command     mCmd;
290282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    bool        mVerbose;
291282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    bool        mAndroidList;
292282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    bool        mForce;
293282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    int         mGrayscaleTolerance;
294282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    bool        mMakePackageDirs;
295282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    bool        mUpdate;
296282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    bool        mExtending;
297282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    bool        mRequireLocalization;
298a2ef5c0d4fb863c0382e77ae00f986a019b11cbeAnton Krumin    short       mPseudolocalize;
299282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    bool        mWantUTF16;
300282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    bool        mValues;
301282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    bool        mIncludeMetaData;
302282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    int         mCompressionMethod;
303282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    bool        mJunkPath;
304282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char* mOutputAPKFile;
305282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char* mManifestPackageNameOverride;
306282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char* mInstrumentationPackageNameOverride;
307282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    bool        mAutoAddOverlay;
308282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    bool        mGenDependencies;
3096e46056abc1c2803ed7f195bab169bbb1cacec6bAdam Lesinski    bool        mNoVersionVectors;
3104d35cca96ce55eb29d1948086214f91ae94e9adbYuichi Araki    bool        mNoVersionTransitions;
311282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char* mCrunchedOutputDir;
312282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char* mProguardFile;
31386229cb622fccde8ab8cbe85eead91a34313a708Rohit Agrawal    const char* mMainDexProguardFile;
314282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char* mAndroidManifestFile;
315282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char* mPublicOutputFile;
316282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char* mRClassDir;
317282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char* mResourceIntermediatesDir;
318282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    android::String8 mConfigurations;
319fab50875b98e8274ac8ee44b38ba42521bbbf1f9Adam Lesinski    android::String8 mPreferredDensity;
320fab50875b98e8274ac8ee44b38ba42521bbbf1f9Adam Lesinski    android::Vector<android::String8> mPartialConfigurations;
321833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski    android::Vector<android::String8> mPackageIncludes;
322282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    android::Vector<const char*> mJarFiles;
323282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    android::Vector<const char*> mNoCompressExtensions;
32409384303dea4f3f01d5682918d7bab9bf83a02b1Adam Lesinski    android::Vector<const char*> mAssetSourceDirs;
325282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    android::Vector<const char*> mResourceSourceDirs;
326282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
327833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski    android::String8 mFeatureOfPackage;
328833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski    android::String8 mFeatureAfterPackage;
32954de298c01ad79fe7f5850eb7aefc2542dd8d5daAdam Lesinski    android::String8 mRevisionCode;
330282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char* mManifestMinSdkVersion;
331282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char* mMinSdkVersion;
332282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char* mTargetSdkVersion;
333282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char* mMaxSdkVersion;
334282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char* mVersionCode;
335282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char* mVersionName;
336df08d1c24dbbc242978ee33416d1e54998f88915Jeff Davidson    bool        mReplaceVersion;
337282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char* mCustomPackage;
338282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char* mExtraPackages;
339282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char* mMaxResVersion;
340282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    bool        mDebugMode;
341282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    bool        mNonConstantId;
3425892248580859620db90d5ef2e3c2f48531933faAdrian Roos    bool        mSkipSymbolsWithoutDefaultLocalization;
343282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char* mProduct;
344282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    bool        mUseCrunchCache;
345282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    bool        mErrorOnFailedInsert;
346cd28bd37ea2d88dd72930f032ca73daaad5744b4Ying Wang    bool        mErrorOnMissingConfigEntry;
347282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char* mOutputTextSymbols;
348282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char* mSingleCrunchInputFile;
349282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    const char* mSingleCrunchOutputFile;
350de898ff42912bd7ca1bfb099cd439562496765a4Adam Lesinski    bool        mBuildSharedLibrary;
351a6d7e3fb9c9233b9ae46b702d17433854c43d6a0Tao Bai    bool        mBuildAppAsSharedLibrary;
35211be9317efffafcac52cd2dc5cce1d951c966dd1Alan Viverette    int         mCompileSdkVersion;
35311be9317efffafcac52cd2dc5cce1d951c966dd1Alan Viverette    android::String8 mCompileSdkVersionCodename;
354ad2d07d2d98a46babb2a9472413fe9ce5080ca76Adam Lesinski    android::String8 mPlatformVersionCode;
355ad2d07d2d98a46babb2a9472413fe9ce5080ca76Adam Lesinski    android::String8 mPlatformVersionName;
35678713998f94a2cc2562aa0ae7761bbc563d8eafaAdam Lesinski    android::String8 mPrivateSymbolsPackage;
357282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
358282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    /* file specification */
359282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    int         mArgc;
360282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    char* const* mArgv;
361282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
362282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski#if 0
363282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    /* misc stuff */
364282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    int         mPackageCount;
365282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski#endif
366282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
367282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski};
368282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
369282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski#endif // __BUNDLE_H
370