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), mJunkPath(false), mOutputAPKFile(NULL
),
55 mManifestPackageNameOverride(NULL
), mInstrumentationPackageNameOverride(NULL
),
56 mAutoAddOverlay(false), mGenDependencies(false),
57 mAssetSourceDir(NULL
),
58 mCrunchedOutputDir(NULL
), mProguardFile(NULL
),
59 mAndroidManifestFile(NULL
), mPublicOutputFile(NULL
),
60 mRClassDir(NULL
), mResourceIntermediatesDir(NULL
), mManifestMinSdkVersion(NULL
),
61 mMinSdkVersion(NULL
), mTargetSdkVersion(NULL
), mMaxSdkVersion(NULL
),
62 mVersionCode(NULL
), mVersionName(NULL
), mCustomPackage(NULL
), mExtraPackages(NULL
),
63 mMaxResVersion(NULL
), mDebugMode(false), mNonConstantId(false), mProduct(NULL
),
64 mUseCrunchCache(false), mErrorOnFailedInsert(false), mOutputTextSymbols(NULL
),
70 * Set the command value. Returns "false" if it was previously set.
72 Command
getCommand(void) const { return mCmd
; }
73 void setCommand(Command cmd
) { mCmd
= cmd
; }
76 * Command modifiers. Not all modifiers are appropriate for all
79 bool getVerbose(void) const { return mVerbose
; }
80 void setVerbose(bool val
) { mVerbose
= val
; }
81 bool getAndroidList(void) const { return mAndroidList
; }
82 void setAndroidList(bool val
) { mAndroidList
= val
; }
83 bool getForce(void) const { return mForce
; }
84 void setForce(bool val
) { mForce
= val
; }
85 void setGrayscaleTolerance(int val
) { mGrayscaleTolerance
= val
; }
86 int getGrayscaleTolerance() const { return mGrayscaleTolerance
; }
87 bool getMakePackageDirs(void) const { return mMakePackageDirs
; }
88 void setMakePackageDirs(bool val
) { mMakePackageDirs
= val
; }
89 bool getUpdate(void) const { return mUpdate
; }
90 void setUpdate(bool val
) { mUpdate
= val
; }
91 bool getExtending(void) const { return mExtending
; }
92 void setExtending(bool val
) { mExtending
= val
; }
93 bool getRequireLocalization(void) const { return mRequireLocalization
; }
94 void setRequireLocalization(bool val
) { mRequireLocalization
= val
; }
95 bool getPseudolocalize(void) const { return mPseudolocalize
; }
96 void setPseudolocalize(bool val
) { mPseudolocalize
= val
; }
97 void setWantUTF16(bool val
) { mWantUTF16
= val
; }
98 bool getValues(void) const { return mValues
; }
99 void setValues(bool val
) { mValues
= val
; }
100 int getCompressionMethod(void) const { return mCompressionMethod
; }
101 void setCompressionMethod(int val
) { mCompressionMethod
= val
; }
102 bool getJunkPath(void) const { return mJunkPath
; }
103 void setJunkPath(bool val
) { mJunkPath
= val
; }
104 const char* getOutputAPKFile() const { return mOutputAPKFile
; }
105 void setOutputAPKFile(const char* val
) { mOutputAPKFile
= val
; }
106 const char* getManifestPackageNameOverride() const { return mManifestPackageNameOverride
; }
107 void setManifestPackageNameOverride(const char * val
) { mManifestPackageNameOverride
= val
; }
108 const char* getInstrumentationPackageNameOverride() const { return mInstrumentationPackageNameOverride
; }
109 void setInstrumentationPackageNameOverride(const char * val
) { mInstrumentationPackageNameOverride
= val
; }
110 bool getAutoAddOverlay() { return mAutoAddOverlay
; }
111 void setAutoAddOverlay(bool val
) { mAutoAddOverlay
= val
; }
112 bool getGenDependencies() { return mGenDependencies
; }
113 void setGenDependencies(bool val
) { mGenDependencies
= val
; }
114 bool getErrorOnFailedInsert() { return mErrorOnFailedInsert
; }
115 void setErrorOnFailedInsert(bool val
) { mErrorOnFailedInsert
= val
; }
117 bool getUTF16StringsOption() {
118 return mWantUTF16
|| !isMinSdkAtLeast(SDK_FROYO
);
124 const char* getAssetSourceDir() const { return mAssetSourceDir
; }
125 void setAssetSourceDir(const char* dir
) { mAssetSourceDir
= dir
; }
126 const char* getCrunchedOutputDir() const { return mCrunchedOutputDir
; }
127 void setCrunchedOutputDir(const char* dir
) { mCrunchedOutputDir
= dir
; }
128 const char* getProguardFile() const { return mProguardFile
; }
129 void setProguardFile(const char* file
) { mProguardFile
= file
; }
130 const android::Vector
<const char*>& getResourceSourceDirs() const { return mResourceSourceDirs
; }
131 void addResourceSourceDir(const char* dir
) { mResourceSourceDirs
.insertAt(dir
,0); }
132 const char* getAndroidManifestFile() const { return mAndroidManifestFile
; }
133 void setAndroidManifestFile(const char* file
) { mAndroidManifestFile
= file
; }
134 const char* getPublicOutputFile() const { return mPublicOutputFile
; }
135 void setPublicOutputFile(const char* file
) { mPublicOutputFile
= file
; }
136 const char* getRClassDir() const { return mRClassDir
; }
137 void setRClassDir(const char* dir
) { mRClassDir
= dir
; }
138 const char* getConfigurations() const { return mConfigurations
.size() > 0 ? mConfigurations
.string() : NULL
; }
139 void addConfigurations(const char* val
) { if (mConfigurations
.size() > 0) { mConfigurations
.append(","); mConfigurations
.append(val
); } else { mConfigurations
= val
; } }
140 const char* getPreferredConfigurations() const { return mPreferredConfigurations
.size() > 0 ? mPreferredConfigurations
.string() : NULL
; }
141 void addPreferredConfigurations(const char* val
) { if (mPreferredConfigurations
.size() > 0) { mPreferredConfigurations
.append(","); mPreferredConfigurations
.append(val
); } else { mPreferredConfigurations
= val
; } }
142 const char* getResourceIntermediatesDir() const { return mResourceIntermediatesDir
; }
143 void setResourceIntermediatesDir(const char* dir
) { mResourceIntermediatesDir
= dir
; }
144 const android::Vector
<const char*>& getPackageIncludes() const { return mPackageIncludes
; }
145 void addPackageInclude(const char* file
) { mPackageIncludes
.add(file
); }
146 const android::Vector
<const char*>& getJarFiles() const { return mJarFiles
; }
147 void addJarFile(const char* file
) { mJarFiles
.add(file
); }
148 const android::Vector
<const char*>& getNoCompressExtensions() const { return mNoCompressExtensions
; }
149 void addNoCompressExtension(const char* ext
) { mNoCompressExtensions
.add(ext
); }
151 const char* getManifestMinSdkVersion() const { return mManifestMinSdkVersion
; }
152 void setManifestMinSdkVersion(const char* val
) { mManifestMinSdkVersion
= val
; }
153 const char* getMinSdkVersion() const { return mMinSdkVersion
; }
154 void setMinSdkVersion(const char* val
) { mMinSdkVersion
= val
; }
155 const char* getTargetSdkVersion() const { return mTargetSdkVersion
; }
156 void setTargetSdkVersion(const char* val
) { mTargetSdkVersion
= val
; }
157 const char* getMaxSdkVersion() const { return mMaxSdkVersion
; }
158 void setMaxSdkVersion(const char* val
) { mMaxSdkVersion
= val
; }
159 const char* getVersionCode() const { return mVersionCode
; }
160 void setVersionCode(const char* val
) { mVersionCode
= val
; }
161 const char* getVersionName() const { return mVersionName
; }
162 void setVersionName(const char* val
) { mVersionName
= val
; }
163 const char* getCustomPackage() const { return mCustomPackage
; }
164 void setCustomPackage(const char* val
) { mCustomPackage
= val
; }
165 const char* getExtraPackages() const { return mExtraPackages
; }
166 void setExtraPackages(const char* val
) { mExtraPackages
= val
; }
167 const char* getMaxResVersion() const { return mMaxResVersion
; }
168 void setMaxResVersion(const char * val
) { mMaxResVersion
= val
; }
169 bool getDebugMode() const { return mDebugMode
; }
170 void setDebugMode(bool val
) { mDebugMode
= val
; }
171 bool getNonConstantId() const { return mNonConstantId
; }
172 void setNonConstantId(bool val
) { mNonConstantId
= val
; }
173 const char* getProduct() const { return mProduct
; }
174 void setProduct(const char * val
) { mProduct
= val
; }
175 void setUseCrunchCache(bool val
) { mUseCrunchCache
= val
; }
176 bool getUseCrunchCache() const { return mUseCrunchCache
; }
177 const char* getOutputTextSymbols() const { return mOutputTextSymbols
; }
178 void setOutputTextSymbols(const char* val
) { mOutputTextSymbols
= val
; }
181 * Set and get the file specification.
183 * Note this does NOT make a copy of argv.
185 void setFileSpec(char* const argv
[], int argc
) {
189 int getFileSpecCount(void) const { return mArgc
; }
190 const char* getFileSpecEntry(int idx
) const { return mArgv
[idx
]; }
191 void eatArgs(int n
) {
192 if (n
> mArgc
) n
= mArgc
;
199 * Package count. Nothing to do with anything else here; this is
200 * just a convenient place to stuff it so we don't have to pass it
203 int getPackageCount(void) const { return mPackageCount
; }
204 void setPackageCount(int val
) { mPackageCount
= val
; }
207 /* Certain features may only be available on a specific SDK level or
208 * above. SDK levels that have a non-numeric identifier are assumed
209 * to be newer than any SDK level that has a number designated.
211 bool isMinSdkAtLeast(int desired
) {
212 /* If the application specifies a minSdkVersion in the manifest
213 * then use that. Otherwise, check what the user specified on
214 * the command line. If neither, it's not available since
215 * the minimum SDK version is assumed to be 1.
218 if (mManifestMinSdkVersion
!= NULL
) {
219 minVer
= mManifestMinSdkVersion
;
220 } else if (mMinSdkVersion
!= NULL
) {
221 minVer
= mMinSdkVersion
;
227 int minSdkNum
= (int)strtol(minVer
, &end
, 0);
229 if (minSdkNum
< desired
) {
237 /* commands & modifiers */
242 int mGrayscaleTolerance
;
243 bool mMakePackageDirs
;
246 bool mRequireLocalization
;
247 bool mPseudolocalize
;
250 int mCompressionMethod
;
252 const char* mOutputAPKFile
;
253 const char* mManifestPackageNameOverride
;
254 const char* mInstrumentationPackageNameOverride
;
255 bool mAutoAddOverlay
;
256 bool mGenDependencies
;
257 const char* mAssetSourceDir
;
258 const char* mCrunchedOutputDir
;
259 const char* mProguardFile
;
260 const char* mAndroidManifestFile
;
261 const char* mPublicOutputFile
;
262 const char* mRClassDir
;
263 const char* mResourceIntermediatesDir
;
264 android::String8 mConfigurations
;
265 android::String8 mPreferredConfigurations
;
266 android::Vector
<const char*> mPackageIncludes
;
267 android::Vector
<const char*> mJarFiles
;
268 android::Vector
<const char*> mNoCompressExtensions
;
269 android::Vector
<const char*> mResourceSourceDirs
;
271 const char* mManifestMinSdkVersion
;
272 const char* mMinSdkVersion
;
273 const char* mTargetSdkVersion
;
274 const char* mMaxSdkVersion
;
275 const char* mVersionCode
;
276 const char* mVersionName
;
277 const char* mCustomPackage
;
278 const char* mExtraPackages
;
279 const char* mMaxResVersion
;
282 const char* mProduct
;
283 bool mUseCrunchCache
;
284 bool mErrorOnFailedInsert
;
285 const char* mOutputTextSymbols
;
287 /* file specification */