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