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>
20 typedef enum Command
{
32 * Bundle of goodies, including everything specified on the command line.
37 : mCmd(kCommandUnknown
), mVerbose(false), mAndroidList(false),
38 mForce(false), mGrayscaleTolerance(0), mMakePackageDirs(false),
39 mUpdate(false), mExtending(false),
40 mRequireLocalization(false), mPseudolocalize(false),
41 mWantUTF16(false), mValues(false),
42 mCompressionMethod(0), mOutputAPKFile(NULL
),
43 mManifestPackageNameOverride(NULL
), mInstrumentationPackageNameOverride(NULL
),
44 mIsOverlayPackage(false),
45 mAutoAddOverlay(false), mGenDependencies(false),
46 mAssetSourceDir(NULL
),
47 mCrunchedOutputDir(NULL
), mProguardFile(NULL
),
48 mAndroidManifestFile(NULL
), mPublicOutputFile(NULL
),
49 mRClassDir(NULL
), mResourceIntermediatesDir(NULL
), mManifestMinSdkVersion(NULL
),
50 mMinSdkVersion(NULL
), mTargetSdkVersion(NULL
), mMaxSdkVersion(NULL
),
51 mVersionCode(NULL
), mVersionName(NULL
), mCustomPackage(NULL
), mExtraPackages(NULL
),
52 mMaxResVersion(NULL
), mDebugMode(false), mNonConstantId(false), mProduct(NULL
),
53 mUseCrunchCache(false), mArgc(0), mArgv(NULL
)
58 * Set the command value. Returns "false" if it was previously set.
60 Command
getCommand(void) const { return mCmd
; }
61 void setCommand(Command cmd
) { mCmd
= cmd
; }
64 * Command modifiers. Not all modifiers are appropriate for all
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
; }
85 bool getWantUTF16(void) const { return mWantUTF16
; }
86 void setWantUTF16(bool val
) { mWantUTF16
= val
; }
87 bool getValues(void) const { return mValues
; }
88 void setValues(bool val
) { mValues
= val
; }
89 int getCompressionMethod(void) const { return mCompressionMethod
; }
90 void setCompressionMethod(int val
) { mCompressionMethod
= val
; }
91 bool getJunkPath(void) const { return mJunkPath
; }
92 void setJunkPath(bool val
) { mJunkPath
= val
; }
93 const char* getOutputAPKFile() const { return mOutputAPKFile
; }
94 void setOutputAPKFile(const char* val
) { mOutputAPKFile
= val
; }
95 const char* getManifestPackageNameOverride() const { return mManifestPackageNameOverride
; }
96 void setManifestPackageNameOverride(const char * val
) { mManifestPackageNameOverride
= val
; }
97 const char* getInstrumentationPackageNameOverride() const { return mInstrumentationPackageNameOverride
; }
98 void setInstrumentationPackageNameOverride(const char * val
) { mInstrumentationPackageNameOverride
= val
; }
99 bool getIsOverlayPackage() const { return mIsOverlayPackage
; }
100 void setIsOverlayPackage(bool val
) { mIsOverlayPackage
= val
; }
101 bool getAutoAddOverlay() { return mAutoAddOverlay
; }
102 void setAutoAddOverlay(bool val
) { mAutoAddOverlay
= val
; }
103 bool getGenDependencies() { return mGenDependencies
; }
104 void setGenDependencies(bool val
) { mGenDependencies
= val
; }
109 const char* getAssetSourceDir() const { return mAssetSourceDir
; }
110 void setAssetSourceDir(const char* dir
) { mAssetSourceDir
= dir
; }
111 const char* getCrunchedOutputDir() const { return mCrunchedOutputDir
; }
112 void setCrunchedOutputDir(const char* dir
) { mCrunchedOutputDir
= dir
; }
113 const char* getProguardFile() const { return mProguardFile
; }
114 void setProguardFile(const char* file
) { mProguardFile
= file
; }
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
; } }
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
; } }
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
); }
136 const char* getManifestMinSdkVersion() const { return mManifestMinSdkVersion
; }
137 void setManifestMinSdkVersion(const char* val
) { mManifestMinSdkVersion
= val
; }
138 const char* getMinSdkVersion() const { return mMinSdkVersion
; }
139 void setMinSdkVersion(const char* val
) { mMinSdkVersion
= val
; }
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
; }
148 const char* getCustomPackage() const { return mCustomPackage
; }
149 void setCustomPackage(const char* val
) { mCustomPackage
= val
; }
150 const char* getExtraPackages() const { return mExtraPackages
; }
151 void setExtraPackages(const char* val
) { mExtraPackages
= val
; }
152 const char* getMaxResVersion() const { return mMaxResVersion
; }
153 void setMaxResVersion(const char * val
) { mMaxResVersion
= val
; }
154 bool getDebugMode() { return mDebugMode
; }
155 void setDebugMode(bool val
) { mDebugMode
= val
; }
156 bool getNonConstantId() { return mNonConstantId
; }
157 void setNonConstantId(bool val
) { mNonConstantId
= val
; }
158 const char* getProduct() const { return mProduct
; }
159 void setProduct(const char * val
) { mProduct
= val
; }
160 void setUseCrunchCache(bool val
) { mUseCrunchCache
= val
; }
161 bool getUseCrunchCache() { return mUseCrunchCache
; }
164 * Set and get the file specification.
166 * Note this does NOT make a copy of argv.
168 void setFileSpec(char* const argv
[], int argc
) {
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
;
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
186 int getPackageCount(void) const { return mPackageCount
; }
187 void setPackageCount(int val
) { mPackageCount
= val
; }
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.
194 bool isMinSdkAtLeast(int desired
) {
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.
201 if (mManifestMinSdkVersion
!= NULL
) {
202 minVer
= mManifestMinSdkVersion
;
203 } else if (mMinSdkVersion
!= NULL
) {
204 minVer
= mMinSdkVersion
;
210 int minSdkNum
= (int)strtol(minVer
, &end
, 0);
212 if (minSdkNum
< desired
) {
220 /* commands & modifiers */
225 int mGrayscaleTolerance
;
226 bool mMakePackageDirs
;
229 bool mRequireLocalization
;
230 bool mPseudolocalize
;
233 int mCompressionMethod
;
235 const char* mOutputAPKFile
;
236 const char* mManifestPackageNameOverride
;
237 const char* mInstrumentationPackageNameOverride
;
238 bool mIsOverlayPackage
;
239 bool mAutoAddOverlay
;
240 bool mGenDependencies
;
241 const char* mAssetSourceDir
;
242 const char* mCrunchedOutputDir
;
243 const char* mProguardFile
;
244 const char* mAndroidManifestFile
;
245 const char* mPublicOutputFile
;
246 const char* mRClassDir
;
247 const char* mResourceIntermediatesDir
;
248 android::String8 mConfigurations
;
249 android::String8 mPreferredConfigurations
;
250 android::Vector
<const char*> mPackageIncludes
;
251 android::Vector
<const char*> mJarFiles
;
252 android::Vector
<const char*> mNoCompressExtensions
;
253 android::Vector
<const char*> mResourceSourceDirs
;
255 const char* mManifestMinSdkVersion
;
256 const char* mMinSdkVersion
;
257 const char* mTargetSdkVersion
;
258 const char* mMaxSdkVersion
;
259 const char* mVersionCode
;
260 const char* mVersionName
;
261 const char* mCustomPackage
;
262 const char* mExtraPackages
;
263 const char* mMaxResVersion
;
266 const char* mProduct
;
267 bool mUseCrunchCache
;
269 /* file specification */