]> git.saurik.com Git - android/aapt.git/blame - Bundle.h
Fix the single crunch command to return the right error code.
[android/aapt.git] / Bundle.h
CommitLineData
a534180c
TAOSP
1//
2// Copyright 2006 The Android Open Source Project
3//
4// State bundle. Used to pass around stuff like command-line args.
5//
6#ifndef __BUNDLE_H
7#define __BUNDLE_H
8
9#include <stdlib.h>
79e5d372
MA
10#include <utils/Log.h>
11#include <utils/threads.h>
12#include <utils/List.h>
13#include <utils/Errors.h>
a534180c
TAOSP
14#include <utils/String8.h>
15#include <utils/Vector.h>
16
4f41c7f7
DH
17enum {
18 SDK_CUPCAKE = 3,
19 SDK_DONUT = 4,
20 SDK_ECLAIR = 5,
21 SDK_ECLAIR_0_1 = 6,
22 SDK_MR1 = 7,
23 SDK_FROYO = 8,
24 SDK_HONEYCOMB_MR2 = 13,
25 SDK_ICE_CREAM_SANDWICH = 14,
26 SDK_ICE_CREAM_SANDWICH_MR1 = 15,
27};
28
a534180c
TAOSP
29/*
30 * Things we can do.
31 */
32typedef enum Command {
33 kCommandUnknown = 0,
34 kCommandVersion,
35 kCommandList,
36 kCommandDump,
37 kCommandAdd,
38 kCommandRemove,
39 kCommandPackage,
dddb1fc7 40 kCommandCrunch,
853cbd58 41 kCommandSingleCrunch,
a534180c
TAOSP
42} Command;
43
44/*
45 * Bundle of goodies, including everything specified on the command line.
46 */
47class Bundle {
48public:
49 Bundle(void)
50 : mCmd(kCommandUnknown), mVerbose(false), mAndroidList(false),
51 mForce(false), mGrayscaleTolerance(0), mMakePackageDirs(false),
52 mUpdate(false), mExtending(false),
53 mRequireLocalization(false), mPseudolocalize(false),
5af43148 54 mWantUTF16(false), mValues(false),
e64a6a7a 55 mCompressionMethod(0), mJunkPath(false), mOutputAPKFile(NULL),
af945cf3 56 mManifestPackageNameOverride(NULL), mInstrumentationPackageNameOverride(NULL),
52ffc169 57 mAutoAddOverlay(false), mGenDependencies(false),
dddb1fc7
JG
58 mAssetSourceDir(NULL),
59 mCrunchedOutputDir(NULL), mProguardFile(NULL),
a534180c 60 mAndroidManifestFile(NULL), mPublicOutputFile(NULL),
5af43148 61 mRClassDir(NULL), mResourceIntermediatesDir(NULL), mManifestMinSdkVersion(NULL),
53288885 62 mMinSdkVersion(NULL), mTargetSdkVersion(NULL), mMaxSdkVersion(NULL),
bc7b4f40 63 mVersionCode(NULL), mVersionName(NULL), mCustomPackage(NULL), mExtraPackages(NULL),
54f200b0 64 mMaxResVersion(NULL), mDebugMode(false), mNonConstantId(false), mProduct(NULL),
232580c6 65 mUseCrunchCache(false), mErrorOnFailedInsert(false), mOutputTextSymbols(NULL),
853cbd58 66 mSingleCrunchInputFile(NULL), mSingleCrunchOutputFile(NULL),
232580c6 67 mArgc(0), mArgv(NULL)
a534180c
TAOSP
68 {}
69 ~Bundle(void) {}
70
71 /*
72 * Set the command value. Returns "false" if it was previously set.
73 */
74 Command getCommand(void) const { return mCmd; }
75 void setCommand(Command cmd) { mCmd = cmd; }
76
77 /*
78 * Command modifiers. Not all modifiers are appropriate for all
79 * commands.
80 */
81 bool getVerbose(void) const { return mVerbose; }
82 void setVerbose(bool val) { mVerbose = val; }
83 bool getAndroidList(void) const { return mAndroidList; }
84 void setAndroidList(bool val) { mAndroidList = val; }
85 bool getForce(void) const { return mForce; }
86 void setForce(bool val) { mForce = val; }
87 void setGrayscaleTolerance(int val) { mGrayscaleTolerance = val; }
c5d0eefd 88 int getGrayscaleTolerance() const { return mGrayscaleTolerance; }
a534180c
TAOSP
89 bool getMakePackageDirs(void) const { return mMakePackageDirs; }
90 void setMakePackageDirs(bool val) { mMakePackageDirs = val; }
91 bool getUpdate(void) const { return mUpdate; }
92 void setUpdate(bool val) { mUpdate = val; }
93 bool getExtending(void) const { return mExtending; }
94 void setExtending(bool val) { mExtending = val; }
95 bool getRequireLocalization(void) const { return mRequireLocalization; }
96 void setRequireLocalization(bool val) { mRequireLocalization = val; }
97 bool getPseudolocalize(void) const { return mPseudolocalize; }
98 void setPseudolocalize(bool val) { mPseudolocalize = val; }
5af43148 99 void setWantUTF16(bool val) { mWantUTF16 = val; }
7751daa4
DH
100 bool getValues(void) const { return mValues; }
101 void setValues(bool val) { mValues = val; }
a534180c
TAOSP
102 int getCompressionMethod(void) const { return mCompressionMethod; }
103 void setCompressionMethod(int val) { mCompressionMethod = val; }
1e8883fc
DZ
104 bool getJunkPath(void) const { return mJunkPath; }
105 void setJunkPath(bool val) { mJunkPath = val; }
a534180c
TAOSP
106 const char* getOutputAPKFile() const { return mOutputAPKFile; }
107 void setOutputAPKFile(const char* val) { mOutputAPKFile = val; }
094e8965
JH
108 const char* getManifestPackageNameOverride() const { return mManifestPackageNameOverride; }
109 void setManifestPackageNameOverride(const char * val) { mManifestPackageNameOverride = val; }
af945cf3
DH
110 const char* getInstrumentationPackageNameOverride() const { return mInstrumentationPackageNameOverride; }
111 void setInstrumentationPackageNameOverride(const char * val) { mInstrumentationPackageNameOverride = val; }
636d3b70
XD
112 bool getAutoAddOverlay() { return mAutoAddOverlay; }
113 void setAutoAddOverlay(bool val) { mAutoAddOverlay = val; }
52ffc169
JG
114 bool getGenDependencies() { return mGenDependencies; }
115 void setGenDependencies(bool val) { mGenDependencies = val; }
3b8c05ce
XD
116 bool getErrorOnFailedInsert() { return mErrorOnFailedInsert; }
117 void setErrorOnFailedInsert(bool val) { mErrorOnFailedInsert = val; }
a534180c 118
4f41c7f7
DH
119 bool getUTF16StringsOption() {
120 return mWantUTF16 || !isMinSdkAtLeast(SDK_FROYO);
121 }
122
1e8883fc
DZ
123 /*
124 * Input options.
a534180c
TAOSP
125 */
126 const char* getAssetSourceDir() const { return mAssetSourceDir; }
127 void setAssetSourceDir(const char* dir) { mAssetSourceDir = dir; }
dddb1fc7
JG
128 const char* getCrunchedOutputDir() const { return mCrunchedOutputDir; }
129 void setCrunchedOutputDir(const char* dir) { mCrunchedOutputDir = dir; }
6648ff78
JO
130 const char* getProguardFile() const { return mProguardFile; }
131 void setProguardFile(const char* file) { mProguardFile = file; }
a534180c
TAOSP
132 const android::Vector<const char*>& getResourceSourceDirs() const { return mResourceSourceDirs; }
133 void addResourceSourceDir(const char* dir) { mResourceSourceDirs.insertAt(dir,0); }
134 const char* getAndroidManifestFile() const { return mAndroidManifestFile; }
135 void setAndroidManifestFile(const char* file) { mAndroidManifestFile = file; }
136 const char* getPublicOutputFile() const { return mPublicOutputFile; }
137 void setPublicOutputFile(const char* file) { mPublicOutputFile = file; }
138 const char* getRClassDir() const { return mRClassDir; }
139 void setRClassDir(const char* dir) { mRClassDir = dir; }
140 const char* getConfigurations() const { return mConfigurations.size() > 0 ? mConfigurations.string() : NULL; }
141 void addConfigurations(const char* val) { if (mConfigurations.size() > 0) { mConfigurations.append(","); mConfigurations.append(val); } else { mConfigurations = val; } }
e29f4ada
DH
142 const char* getPreferredConfigurations() const { return mPreferredConfigurations.size() > 0 ? mPreferredConfigurations.string() : NULL; }
143 void addPreferredConfigurations(const char* val) { if (mPreferredConfigurations.size() > 0) { mPreferredConfigurations.append(","); mPreferredConfigurations.append(val); } else { mPreferredConfigurations = val; } }
a534180c
TAOSP
144 const char* getResourceIntermediatesDir() const { return mResourceIntermediatesDir; }
145 void setResourceIntermediatesDir(const char* dir) { mResourceIntermediatesDir = dir; }
146 const android::Vector<const char*>& getPackageIncludes() const { return mPackageIncludes; }
147 void addPackageInclude(const char* file) { mPackageIncludes.add(file); }
148 const android::Vector<const char*>& getJarFiles() const { return mJarFiles; }
149 void addJarFile(const char* file) { mJarFiles.add(file); }
150 const android::Vector<const char*>& getNoCompressExtensions() const { return mNoCompressExtensions; }
151 void addNoCompressExtension(const char* ext) { mNoCompressExtensions.add(ext); }
152
5af43148
KR
153 const char* getManifestMinSdkVersion() const { return mManifestMinSdkVersion; }
154 void setManifestMinSdkVersion(const char* val) { mManifestMinSdkVersion = val; }
7e486e33 155 const char* getMinSdkVersion() const { return mMinSdkVersion; }
5af43148 156 void setMinSdkVersion(const char* val) { mMinSdkVersion = val; }
7e486e33
DH
157 const char* getTargetSdkVersion() const { return mTargetSdkVersion; }
158 void setTargetSdkVersion(const char* val) { mTargetSdkVersion = val; }
159 const char* getMaxSdkVersion() const { return mMaxSdkVersion; }
160 void setMaxSdkVersion(const char* val) { mMaxSdkVersion = val; }
161 const char* getVersionCode() const { return mVersionCode; }
162 void setVersionCode(const char* val) { mVersionCode = val; }
163 const char* getVersionName() const { return mVersionName; }
164 void setVersionName(const char* val) { mVersionName = val; }
fa19db5e
XD
165 const char* getCustomPackage() const { return mCustomPackage; }
166 void setCustomPackage(const char* val) { mCustomPackage = val; }
bc7b4f40
JG
167 const char* getExtraPackages() const { return mExtraPackages; }
168 void setExtraPackages(const char* val) { mExtraPackages = val; }
73412e58
FK
169 const char* getMaxResVersion() const { return mMaxResVersion; }
170 void setMaxResVersion(const char * val) { mMaxResVersion = val; }
c5d0eefd 171 bool getDebugMode() const { return mDebugMode; }
f04c74b7 172 void setDebugMode(bool val) { mDebugMode = val; }
c5d0eefd 173 bool getNonConstantId() const { return mNonConstantId; }
54f200b0 174 void setNonConstantId(bool val) { mNonConstantId = val; }
b8ea3a3f
EF
175 const char* getProduct() const { return mProduct; }
176 void setProduct(const char * val) { mProduct = val; }
dddb1fc7 177 void setUseCrunchCache(bool val) { mUseCrunchCache = val; }
c5d0eefd 178 bool getUseCrunchCache() const { return mUseCrunchCache; }
232580c6
XD
179 const char* getOutputTextSymbols() const { return mOutputTextSymbols; }
180 void setOutputTextSymbols(const char* val) { mOutputTextSymbols = val; }
853cbd58
XD
181 const char* getSingleCrunchInputFile() const { return mSingleCrunchInputFile; }
182 void setSingleCrunchInputFile(const char* val) { mSingleCrunchInputFile = val; }
183 const char* getSingleCrunchOutputFile() const { return mSingleCrunchOutputFile; }
184 void setSingleCrunchOutputFile(const char* val) { mSingleCrunchOutputFile = val; }
1e8883fc 185
a534180c
TAOSP
186 /*
187 * Set and get the file specification.
188 *
189 * Note this does NOT make a copy of argv.
190 */
191 void setFileSpec(char* const argv[], int argc) {
192 mArgc = argc;
193 mArgv = argv;
194 }
195 int getFileSpecCount(void) const { return mArgc; }
196 const char* getFileSpecEntry(int idx) const { return mArgv[idx]; }
197 void eatArgs(int n) {
198 if (n > mArgc) n = mArgc;
199 mArgv += n;
200 mArgc -= n;
201 }
202
203#if 0
204 /*
205 * Package count. Nothing to do with anything else here; this is
206 * just a convenient place to stuff it so we don't have to pass it
207 * around everywhere.
208 */
209 int getPackageCount(void) const { return mPackageCount; }
210 void setPackageCount(int val) { mPackageCount = val; }
211#endif
212
1bad9d29
KR
213 /* Certain features may only be available on a specific SDK level or
214 * above. SDK levels that have a non-numeric identifier are assumed
215 * to be newer than any SDK level that has a number designated.
5af43148 216 */
1bad9d29 217 bool isMinSdkAtLeast(int desired) {
5af43148
KR
218 /* If the application specifies a minSdkVersion in the manifest
219 * then use that. Otherwise, check what the user specified on
220 * the command line. If neither, it's not available since
221 * the minimum SDK version is assumed to be 1.
222 */
223 const char *minVer;
224 if (mManifestMinSdkVersion != NULL) {
225 minVer = mManifestMinSdkVersion;
226 } else if (mMinSdkVersion != NULL) {
227 minVer = mMinSdkVersion;
228 } else {
229 return false;
230 }
231
232 char *end;
233 int minSdkNum = (int)strtol(minVer, &end, 0);
234 if (*end == '\0') {
1bad9d29 235 if (minSdkNum < desired) {
5af43148
KR
236 return false;
237 }
238 }
239 return true;
240 }
241
a534180c
TAOSP
242private:
243 /* commands & modifiers */
244 Command mCmd;
245 bool mVerbose;
246 bool mAndroidList;
247 bool mForce;
248 int mGrayscaleTolerance;
249 bool mMakePackageDirs;
250 bool mUpdate;
251 bool mExtending;
252 bool mRequireLocalization;
253 bool mPseudolocalize;
5af43148 254 bool mWantUTF16;
7751daa4 255 bool mValues;
a534180c 256 int mCompressionMethod;
1e8883fc 257 bool mJunkPath;
a534180c 258 const char* mOutputAPKFile;
094e8965 259 const char* mManifestPackageNameOverride;
af945cf3 260 const char* mInstrumentationPackageNameOverride;
636d3b70 261 bool mAutoAddOverlay;
52ffc169 262 bool mGenDependencies;
a534180c 263 const char* mAssetSourceDir;
dddb1fc7 264 const char* mCrunchedOutputDir;
6648ff78 265 const char* mProguardFile;
a534180c
TAOSP
266 const char* mAndroidManifestFile;
267 const char* mPublicOutputFile;
268 const char* mRClassDir;
269 const char* mResourceIntermediatesDir;
270 android::String8 mConfigurations;
e29f4ada 271 android::String8 mPreferredConfigurations;
a534180c
TAOSP
272 android::Vector<const char*> mPackageIncludes;
273 android::Vector<const char*> mJarFiles;
274 android::Vector<const char*> mNoCompressExtensions;
275 android::Vector<const char*> mResourceSourceDirs;
1e8883fc 276
5af43148 277 const char* mManifestMinSdkVersion;
7e486e33
DH
278 const char* mMinSdkVersion;
279 const char* mTargetSdkVersion;
280 const char* mMaxSdkVersion;
281 const char* mVersionCode;
282 const char* mVersionName;
fa19db5e 283 const char* mCustomPackage;
bc7b4f40 284 const char* mExtraPackages;
73412e58 285 const char* mMaxResVersion;
f04c74b7 286 bool mDebugMode;
54f200b0 287 bool mNonConstantId;
b8ea3a3f 288 const char* mProduct;
dddb1fc7 289 bool mUseCrunchCache;
3b8c05ce 290 bool mErrorOnFailedInsert;
232580c6 291 const char* mOutputTextSymbols;
853cbd58
XD
292 const char* mSingleCrunchInputFile;
293 const char* mSingleCrunchOutputFile;
1e8883fc 294
a534180c
TAOSP
295 /* file specification */
296 int mArgc;
297 char* const* mArgv;
298
299#if 0
300 /* misc stuff */
301 int mPackageCount;
302#endif
7dc0cd41 303
a534180c
TAOSP
304};
305
306#endif // __BUNDLE_H