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
{
45 * Bundle of goodies, including everything specified on the command line.
50 : mCmd(kCommandUnknown
), mVerbose(false), mAndroidList(false),
51 mForce(false), mGrayscaleTolerance(0), mMakePackageDirs(false),
52 mUpdate(false), mExtending(false),
53 mRequireLocalization(false), mPseudolocalize(false),
54 mWantUTF16(false), mValues(false),
55 mCompressionMethod(0), mJunkPath(false), mOutputAPKFile(NULL
),
56 mManifestPackageNameOverride(NULL
), mInstrumentationPackageNameOverride(NULL
),
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
),
66 mSingleCrunchInputFile(NULL
), mSingleCrunchOutputFile(NULL
),
72 * Set the command value. Returns "false" if it was previously set.
74 Command
getCommand(void) const { return mCmd
; }
75 void setCommand(Command cmd
) { mCmd
= cmd
; }
78 * Command modifiers. Not all modifiers are appropriate for all
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
; }
88 int getGrayscaleTolerance() const { return mGrayscaleTolerance
; }
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
; }
99 void setWantUTF16(bool val
) { mWantUTF16
= val
; }
100 bool getValues(void) const { return mValues
; }
101 void setValues(bool val
) { mValues
= val
; }
102 int getCompressionMethod(void) const { return mCompressionMethod
; }
103 void setCompressionMethod(int val
) { mCompressionMethod
= val
; }
104 bool getJunkPath(void) const { return mJunkPath
; }
105 void setJunkPath(bool val
) { mJunkPath
= val
; }
106 const char* getOutputAPKFile() const { return mOutputAPKFile
; }
107 void setOutputAPKFile(const char* val
) { mOutputAPKFile
= val
; }
108 const char* getManifestPackageNameOverride() const { return mManifestPackageNameOverride
; }
109 void setManifestPackageNameOverride(const char * val
) { mManifestPackageNameOverride
= val
; }
110 const char* getInstrumentationPackageNameOverride() const { return mInstrumentationPackageNameOverride
; }
111 void setInstrumentationPackageNameOverride(const char * val
) { mInstrumentationPackageNameOverride
= val
; }
112 bool getAutoAddOverlay() { return mAutoAddOverlay
; }
113 void setAutoAddOverlay(bool val
) { mAutoAddOverlay
= val
; }
114 bool getGenDependencies() { return mGenDependencies
; }
115 void setGenDependencies(bool val
) { mGenDependencies
= val
; }
116 bool getErrorOnFailedInsert() { return mErrorOnFailedInsert
; }
117 void setErrorOnFailedInsert(bool val
) { mErrorOnFailedInsert
= val
; }
119 bool getUTF16StringsOption() {
120 return mWantUTF16
|| !isMinSdkAtLeast(SDK_FROYO
);
126 const char* getAssetSourceDir() const { return mAssetSourceDir
; }
127 void setAssetSourceDir(const char* dir
) { mAssetSourceDir
= dir
; }
128 const char* getCrunchedOutputDir() const { return mCrunchedOutputDir
; }
129 void setCrunchedOutputDir(const char* dir
) { mCrunchedOutputDir
= dir
; }
130 const char* getProguardFile() const { return mProguardFile
; }
131 void setProguardFile(const char* file
) { mProguardFile
= file
; }
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
; } }
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
; } }
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
); }
153 const char* getManifestMinSdkVersion() const { return mManifestMinSdkVersion
; }
154 void setManifestMinSdkVersion(const char* val
) { mManifestMinSdkVersion
= val
; }
155 const char* getMinSdkVersion() const { return mMinSdkVersion
; }
156 void setMinSdkVersion(const char* val
) { mMinSdkVersion
= val
; }
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
; }
165 const char* getCustomPackage() const { return mCustomPackage
; }
166 void setCustomPackage(const char* val
) { mCustomPackage
= val
; }
167 const char* getExtraPackages() const { return mExtraPackages
; }
168 void setExtraPackages(const char* val
) { mExtraPackages
= val
; }
169 const char* getMaxResVersion() const { return mMaxResVersion
; }
170 void setMaxResVersion(const char * val
) { mMaxResVersion
= val
; }
171 bool getDebugMode() const { return mDebugMode
; }
172 void setDebugMode(bool val
) { mDebugMode
= val
; }
173 bool getNonConstantId() const { return mNonConstantId
; }
174 void setNonConstantId(bool val
) { mNonConstantId
= val
; }
175 const char* getProduct() const { return mProduct
; }
176 void setProduct(const char * val
) { mProduct
= val
; }
177 void setUseCrunchCache(bool val
) { mUseCrunchCache
= val
; }
178 bool getUseCrunchCache() const { return mUseCrunchCache
; }
179 const char* getOutputTextSymbols() const { return mOutputTextSymbols
; }
180 void setOutputTextSymbols(const char* val
) { mOutputTextSymbols
= val
; }
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
; }
187 * Set and get the file specification.
189 * Note this does NOT make a copy of argv.
191 void setFileSpec(char* const argv
[], int argc
) {
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
;
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
209 int getPackageCount(void) const { return mPackageCount
; }
210 void setPackageCount(int val
) { mPackageCount
= val
; }
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.
217 bool isMinSdkAtLeast(int desired
) {
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.
224 if (mManifestMinSdkVersion
!= NULL
) {
225 minVer
= mManifestMinSdkVersion
;
226 } else if (mMinSdkVersion
!= NULL
) {
227 minVer
= mMinSdkVersion
;
233 int minSdkNum
= (int)strtol(minVer
, &end
, 0);
235 if (minSdkNum
< desired
) {
243 /* commands & modifiers */
248 int mGrayscaleTolerance
;
249 bool mMakePackageDirs
;
252 bool mRequireLocalization
;
253 bool mPseudolocalize
;
256 int mCompressionMethod
;
258 const char* mOutputAPKFile
;
259 const char* mManifestPackageNameOverride
;
260 const char* mInstrumentationPackageNameOverride
;
261 bool mAutoAddOverlay
;
262 bool mGenDependencies
;
263 const char* mAssetSourceDir
;
264 const char* mCrunchedOutputDir
;
265 const char* mProguardFile
;
266 const char* mAndroidManifestFile
;
267 const char* mPublicOutputFile
;
268 const char* mRClassDir
;
269 const char* mResourceIntermediatesDir
;
270 android::String8 mConfigurations
;
271 android::String8 mPreferredConfigurations
;
272 android::Vector
<const char*> mPackageIncludes
;
273 android::Vector
<const char*> mJarFiles
;
274 android::Vector
<const char*> mNoCompressExtensions
;
275 android::Vector
<const char*> mResourceSourceDirs
;
277 const char* mManifestMinSdkVersion
;
278 const char* mMinSdkVersion
;
279 const char* mTargetSdkVersion
;
280 const char* mMaxSdkVersion
;
281 const char* mVersionCode
;
282 const char* mVersionName
;
283 const char* mCustomPackage
;
284 const char* mExtraPackages
;
285 const char* mMaxResVersion
;
288 const char* mProduct
;
289 bool mUseCrunchCache
;
290 bool mErrorOnFailedInsert
;
291 const char* mOutputTextSymbols
;
292 const char* mSingleCrunchInputFile
;
293 const char* mSingleCrunchOutputFile
;
295 /* file specification */