2 // Copyright 2006 The Android Open Source Project
4 // State bundle. Used to pass around stuff like command-line args.
10 #include <utils/Log.h>
11 #include <utils/threads.h>
12 #include <utils/List.h>
13 #include <utils/Errors.h>
14 #include <utils/String8.h>
15 #include <utils/Vector.h>
24 SDK_HONEYCOMB_MR2
= 13,
25 SDK_ICE_CREAM_SANDWICH
= 14,
26 SDK_ICE_CREAM_SANDWICH_MR1
= 15,
32 typedef enum Command
{
44 * Bundle of goodies, including everything specified on the command line.
49 : mCmd(kCommandUnknown
), mVerbose(false), mAndroidList(false),
50 mForce(false), mGrayscaleTolerance(0), mMakePackageDirs(false),
51 mUpdate(false), mExtending(false),
52 mRequireLocalization(false), mPseudolocalize(false),
53 mWantUTF16(false), mValues(false),
54 mCompressionMethod(0), mOutputAPKFile(NULL
),
55 mManifestPackageNameOverride(NULL
), mInstrumentationPackageNameOverride(NULL
),
56 mIsOverlayPackage(false),
57 mAutoAddOverlay(false), mGenDependencies(false),
58 mAssetSourceDir(NULL
),
59 mCrunchedOutputDir(NULL
), mProguardFile(NULL
),
60 mAndroidManifestFile(NULL
), mPublicOutputFile(NULL
),
61 mRClassDir(NULL
), mResourceIntermediatesDir(NULL
), mManifestMinSdkVersion(NULL
),
62 mMinSdkVersion(NULL
), mTargetSdkVersion(NULL
), mMaxSdkVersion(NULL
),
63 mVersionCode(NULL
), mVersionName(NULL
), mCustomPackage(NULL
), mExtraPackages(NULL
),
64 mMaxResVersion(NULL
), mDebugMode(false), mNonConstantId(false), mProduct(NULL
),
65 mUseCrunchCache(false), mErrorOnFailedInsert(false), mOutputTextSymbols(NULL
),
71 * Set the command value. Returns "false" if it was previously set.
73 Command
getCommand(void) const { return mCmd
; }
74 void setCommand(Command cmd
) { mCmd
= cmd
; }
77 * Command modifiers. Not all modifiers are appropriate for all
80 bool getVerbose(void) const { return mVerbose
; }
81 void setVerbose(bool val
) { mVerbose
= val
; }
82 bool getAndroidList(void) const { return mAndroidList
; }
83 void setAndroidList(bool val
) { mAndroidList
= val
; }
84 bool getForce(void) const { return mForce
; }
85 void setForce(bool val
) { mForce
= val
; }
86 void setGrayscaleTolerance(int val
) { mGrayscaleTolerance
= val
; }
87 int getGrayscaleTolerance() const { return mGrayscaleTolerance
; }
88 bool getMakePackageDirs(void) const { return mMakePackageDirs
; }
89 void setMakePackageDirs(bool val
) { mMakePackageDirs
= val
; }
90 bool getUpdate(void) const { return mUpdate
; }
91 void setUpdate(bool val
) { mUpdate
= val
; }
92 bool getExtending(void) const { return mExtending
; }
93 void setExtending(bool val
) { mExtending
= val
; }
94 bool getRequireLocalization(void) const { return mRequireLocalization
; }
95 void setRequireLocalization(bool val
) { mRequireLocalization
= val
; }
96 bool getPseudolocalize(void) const { return mPseudolocalize
; }
97 void setPseudolocalize(bool val
) { mPseudolocalize
= val
; }
98 void setWantUTF16(bool val
) { mWantUTF16
= val
; }
99 bool getValues(void) const { return mValues
; }
100 void setValues(bool val
) { mValues
= val
; }
101 int getCompressionMethod(void) const { return mCompressionMethod
; }
102 void setCompressionMethod(int val
) { mCompressionMethod
= val
; }
103 bool getJunkPath(void) const { return mJunkPath
; }
104 void setJunkPath(bool val
) { mJunkPath
= val
; }
105 const char* getOutputAPKFile() const { return mOutputAPKFile
; }
106 void setOutputAPKFile(const char* val
) { mOutputAPKFile
= val
; }
107 const char* getManifestPackageNameOverride() const { return mManifestPackageNameOverride
; }
108 void setManifestPackageNameOverride(const char * val
) { mManifestPackageNameOverride
= val
; }
109 const char* getInstrumentationPackageNameOverride() const { return mInstrumentationPackageNameOverride
; }
110 void setInstrumentationPackageNameOverride(const char * val
) { mInstrumentationPackageNameOverride
= val
; }
111 bool getIsOverlayPackage() const { return mIsOverlayPackage
; }
112 void setIsOverlayPackage(bool val
) { mIsOverlayPackage
= val
; }
113 bool getAutoAddOverlay() { return mAutoAddOverlay
; }
114 void setAutoAddOverlay(bool val
) { mAutoAddOverlay
= val
; }
115 bool getGenDependencies() { return mGenDependencies
; }
116 void setGenDependencies(bool val
) { mGenDependencies
= val
; }
117 bool getErrorOnFailedInsert() { return mErrorOnFailedInsert
; }
118 void setErrorOnFailedInsert(bool val
) { mErrorOnFailedInsert
= val
; }
120 bool getUTF16StringsOption() {
121 return mWantUTF16
|| !isMinSdkAtLeast(SDK_FROYO
);
127 const char* getAssetSourceDir() const { return mAssetSourceDir
; }
128 void setAssetSourceDir(const char* dir
) { mAssetSourceDir
= dir
; }
129 const char* getCrunchedOutputDir() const { return mCrunchedOutputDir
; }
130 void setCrunchedOutputDir(const char* dir
) { mCrunchedOutputDir
= dir
; }
131 const char* getProguardFile() const { return mProguardFile
; }
132 void setProguardFile(const char* file
) { mProguardFile
= file
; }
133 const android::Vector
<const char*>& getResourceSourceDirs() const { return mResourceSourceDirs
; }
134 void addResourceSourceDir(const char* dir
) { mResourceSourceDirs
.insertAt(dir
,0); }
135 const char* getAndroidManifestFile() const { return mAndroidManifestFile
; }
136 void setAndroidManifestFile(const char* file
) { mAndroidManifestFile
= file
; }
137 const char* getPublicOutputFile() const { return mPublicOutputFile
; }
138 void setPublicOutputFile(const char* file
) { mPublicOutputFile
= file
; }
139 const char* getRClassDir() const { return mRClassDir
; }
140 void setRClassDir(const char* dir
) { mRClassDir
= dir
; }
141 const char* getConfigurations() const { return mConfigurations
.size() > 0 ? mConfigurations
.string() : NULL
; }
142 void addConfigurations(const char* val
) { if (mConfigurations
.size() > 0) { mConfigurations
.append(","); mConfigurations
.append(val
); } else { mConfigurations
= val
; } }
143 const char* getPreferredConfigurations() const { return mPreferredConfigurations
.size() > 0 ? mPreferredConfigurations
.string() : NULL
; }
144 void addPreferredConfigurations(const char* val
) { if (mPreferredConfigurations
.size() > 0) { mPreferredConfigurations
.append(","); mPreferredConfigurations
.append(val
); } else { mPreferredConfigurations
= val
; } }
145 const char* getResourceIntermediatesDir() const { return mResourceIntermediatesDir
; }
146 void setResourceIntermediatesDir(const char* dir
) { mResourceIntermediatesDir
= dir
; }
147 const android::Vector
<const char*>& getPackageIncludes() const { return mPackageIncludes
; }
148 void addPackageInclude(const char* file
) { mPackageIncludes
.add(file
); }
149 const android::Vector
<const char*>& getJarFiles() const { return mJarFiles
; }
150 void addJarFile(const char* file
) { mJarFiles
.add(file
); }
151 const android::Vector
<const char*>& getNoCompressExtensions() const { return mNoCompressExtensions
; }
152 void addNoCompressExtension(const char* ext
) { mNoCompressExtensions
.add(ext
); }
154 const char* getManifestMinSdkVersion() const { return mManifestMinSdkVersion
; }
155 void setManifestMinSdkVersion(const char* val
) { mManifestMinSdkVersion
= val
; }
156 const char* getMinSdkVersion() const { return mMinSdkVersion
; }
157 void setMinSdkVersion(const char* val
) { mMinSdkVersion
= val
; }
158 const char* getTargetSdkVersion() const { return mTargetSdkVersion
; }
159 void setTargetSdkVersion(const char* val
) { mTargetSdkVersion
= val
; }
160 const char* getMaxSdkVersion() const { return mMaxSdkVersion
; }
161 void setMaxSdkVersion(const char* val
) { mMaxSdkVersion
= val
; }
162 const char* getVersionCode() const { return mVersionCode
; }
163 void setVersionCode(const char* val
) { mVersionCode
= val
; }
164 const char* getVersionName() const { return mVersionName
; }
165 void setVersionName(const char* val
) { mVersionName
= val
; }
166 const char* getCustomPackage() const { return mCustomPackage
; }
167 void setCustomPackage(const char* val
) { mCustomPackage
= val
; }
168 const char* getExtraPackages() const { return mExtraPackages
; }
169 void setExtraPackages(const char* val
) { mExtraPackages
= val
; }
170 const char* getMaxResVersion() const { return mMaxResVersion
; }
171 void setMaxResVersion(const char * val
) { mMaxResVersion
= val
; }
172 bool getDebugMode() const { return mDebugMode
; }
173 void setDebugMode(bool val
) { mDebugMode
= val
; }
174 bool getNonConstantId() const { return mNonConstantId
; }
175 void setNonConstantId(bool val
) { mNonConstantId
= val
; }
176 const char* getProduct() const { return mProduct
; }
177 void setProduct(const char * val
) { mProduct
= val
; }
178 void setUseCrunchCache(bool val
) { mUseCrunchCache
= val
; }
179 bool getUseCrunchCache() const { return mUseCrunchCache
; }
180 const char* getOutputTextSymbols() const { return mOutputTextSymbols
; }
181 void setOutputTextSymbols(const char* val
) { mOutputTextSymbols
= val
; }
184 * Set and get the file specification.
186 * Note this does NOT make a copy of argv.
188 void setFileSpec(char* const argv
[], int argc
) {
192 int getFileSpecCount(void) const { return mArgc
; }
193 const char* getFileSpecEntry(int idx
) const { return mArgv
[idx
]; }
194 void eatArgs(int n
) {
195 if (n
> mArgc
) n
= mArgc
;
202 * Package count. Nothing to do with anything else here; this is
203 * just a convenient place to stuff it so we don't have to pass it
206 int getPackageCount(void) const { return mPackageCount
; }
207 void setPackageCount(int val
) { mPackageCount
= val
; }
210 /* Certain features may only be available on a specific SDK level or
211 * above. SDK levels that have a non-numeric identifier are assumed
212 * to be newer than any SDK level that has a number designated.
214 bool isMinSdkAtLeast(int desired
) {
215 /* If the application specifies a minSdkVersion in the manifest
216 * then use that. Otherwise, check what the user specified on
217 * the command line. If neither, it's not available since
218 * the minimum SDK version is assumed to be 1.
221 if (mManifestMinSdkVersion
!= NULL
) {
222 minVer
= mManifestMinSdkVersion
;
223 } else if (mMinSdkVersion
!= NULL
) {
224 minVer
= mMinSdkVersion
;
230 int minSdkNum
= (int)strtol(minVer
, &end
, 0);
232 if (minSdkNum
< desired
) {
240 /* commands & modifiers */
245 int mGrayscaleTolerance
;
246 bool mMakePackageDirs
;
249 bool mRequireLocalization
;
250 bool mPseudolocalize
;
253 int mCompressionMethod
;
255 const char* mOutputAPKFile
;
256 const char* mManifestPackageNameOverride
;
257 const char* mInstrumentationPackageNameOverride
;
258 bool mIsOverlayPackage
;
259 bool mAutoAddOverlay
;
260 bool mGenDependencies
;
261 const char* mAssetSourceDir
;
262 const char* mCrunchedOutputDir
;
263 const char* mProguardFile
;
264 const char* mAndroidManifestFile
;
265 const char* mPublicOutputFile
;
266 const char* mRClassDir
;
267 const char* mResourceIntermediatesDir
;
268 android::String8 mConfigurations
;
269 android::String8 mPreferredConfigurations
;
270 android::Vector
<const char*> mPackageIncludes
;
271 android::Vector
<const char*> mJarFiles
;
272 android::Vector
<const char*> mNoCompressExtensions
;
273 android::Vector
<const char*> mResourceSourceDirs
;
275 const char* mManifestMinSdkVersion
;
276 const char* mMinSdkVersion
;
277 const char* mTargetSdkVersion
;
278 const char* mMaxSdkVersion
;
279 const char* mVersionCode
;
280 const char* mVersionName
;
281 const char* mCustomPackage
;
282 const char* mExtraPackages
;
283 const char* mMaxResVersion
;
286 const char* mProduct
;
287 bool mUseCrunchCache
;
288 bool mErrorOnFailedInsert
;
289 const char* mOutputTextSymbols
;
291 /* file specification */