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), 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
; }
118 bool getUTF16StringsOption() {
119 return mWantUTF16
|| !isMinSdkAtLeast(SDK_FROYO
);
125 const char* getAssetSourceDir() const { return mAssetSourceDir
; }
126 void setAssetSourceDir(const char* dir
) { mAssetSourceDir
= dir
; }
127 const char* getCrunchedOutputDir() const { return mCrunchedOutputDir
; }
128 void setCrunchedOutputDir(const char* dir
) { mCrunchedOutputDir
= dir
; }
129 const char* getProguardFile() const { return mProguardFile
; }
130 void setProguardFile(const char* file
) { mProguardFile
= file
; }
131 const android::Vector
<const char*>& getResourceSourceDirs() const { return mResourceSourceDirs
; }
132 void addResourceSourceDir(const char* dir
) { mResourceSourceDirs
.insertAt(dir
,0); }
133 const char* getAndroidManifestFile() const { return mAndroidManifestFile
; }
134 void setAndroidManifestFile(const char* file
) { mAndroidManifestFile
= file
; }
135 const char* getPublicOutputFile() const { return mPublicOutputFile
; }
136 void setPublicOutputFile(const char* file
) { mPublicOutputFile
= file
; }
137 const char* getRClassDir() const { return mRClassDir
; }
138 void setRClassDir(const char* dir
) { mRClassDir
= dir
; }
139 const char* getConfigurations() const { return mConfigurations
.size() > 0 ? mConfigurations
.string() : NULL
; }
140 void addConfigurations(const char* val
) { if (mConfigurations
.size() > 0) { mConfigurations
.append(","); mConfigurations
.append(val
); } else { mConfigurations
= val
; } }
141 const char* getPreferredConfigurations() const { return mPreferredConfigurations
.size() > 0 ? mPreferredConfigurations
.string() : NULL
; }
142 void addPreferredConfigurations(const char* val
) { if (mPreferredConfigurations
.size() > 0) { mPreferredConfigurations
.append(","); mPreferredConfigurations
.append(val
); } else { mPreferredConfigurations
= val
; } }
143 const char* getResourceIntermediatesDir() const { return mResourceIntermediatesDir
; }
144 void setResourceIntermediatesDir(const char* dir
) { mResourceIntermediatesDir
= dir
; }
145 const android::Vector
<const char*>& getPackageIncludes() const { return mPackageIncludes
; }
146 void addPackageInclude(const char* file
) { mPackageIncludes
.add(file
); }
147 const android::Vector
<const char*>& getJarFiles() const { return mJarFiles
; }
148 void addJarFile(const char* file
) { mJarFiles
.add(file
); }
149 const android::Vector
<const char*>& getNoCompressExtensions() const { return mNoCompressExtensions
; }
150 void addNoCompressExtension(const char* ext
) { mNoCompressExtensions
.add(ext
); }
152 const char* getManifestMinSdkVersion() const { return mManifestMinSdkVersion
; }
153 void setManifestMinSdkVersion(const char* val
) { mManifestMinSdkVersion
= val
; }
154 const char* getMinSdkVersion() const { return mMinSdkVersion
; }
155 void setMinSdkVersion(const char* val
) { mMinSdkVersion
= val
; }
156 const char* getTargetSdkVersion() const { return mTargetSdkVersion
; }
157 void setTargetSdkVersion(const char* val
) { mTargetSdkVersion
= val
; }
158 const char* getMaxSdkVersion() const { return mMaxSdkVersion
; }
159 void setMaxSdkVersion(const char* val
) { mMaxSdkVersion
= val
; }
160 const char* getVersionCode() const { return mVersionCode
; }
161 void setVersionCode(const char* val
) { mVersionCode
= val
; }
162 const char* getVersionName() const { return mVersionName
; }
163 void setVersionName(const char* val
) { mVersionName
= val
; }
164 const char* getCustomPackage() const { return mCustomPackage
; }
165 void setCustomPackage(const char* val
) { mCustomPackage
= val
; }
166 const char* getExtraPackages() const { return mExtraPackages
; }
167 void setExtraPackages(const char* val
) { mExtraPackages
= val
; }
168 const char* getMaxResVersion() const { return mMaxResVersion
; }
169 void setMaxResVersion(const char * val
) { mMaxResVersion
= val
; }
170 bool getDebugMode() const { return mDebugMode
; }
171 void setDebugMode(bool val
) { mDebugMode
= val
; }
172 bool getNonConstantId() const { return mNonConstantId
; }
173 void setNonConstantId(bool val
) { mNonConstantId
= val
; }
174 const char* getProduct() const { return mProduct
; }
175 void setProduct(const char * val
) { mProduct
= val
; }
176 void setUseCrunchCache(bool val
) { mUseCrunchCache
= val
; }
177 bool getUseCrunchCache() const { return mUseCrunchCache
; }
178 const char* getOutputTextSymbols() const { return mOutputTextSymbols
; }
179 void setOutputTextSymbols(const char* val
) { mOutputTextSymbols
= val
; }
182 * Set and get the file specification.
184 * Note this does NOT make a copy of argv.
186 void setFileSpec(char* const argv
[], int argc
) {
190 int getFileSpecCount(void) const { return mArgc
; }
191 const char* getFileSpecEntry(int idx
) const { return mArgv
[idx
]; }
192 void eatArgs(int n
) {
193 if (n
> mArgc
) n
= mArgc
;
200 * Package count. Nothing to do with anything else here; this is
201 * just a convenient place to stuff it so we don't have to pass it
204 int getPackageCount(void) const { return mPackageCount
; }
205 void setPackageCount(int val
) { mPackageCount
= val
; }
208 /* Certain features may only be available on a specific SDK level or
209 * above. SDK levels that have a non-numeric identifier are assumed
210 * to be newer than any SDK level that has a number designated.
212 bool isMinSdkAtLeast(int desired
) {
213 /* If the application specifies a minSdkVersion in the manifest
214 * then use that. Otherwise, check what the user specified on
215 * the command line. If neither, it's not available since
216 * the minimum SDK version is assumed to be 1.
219 if (mManifestMinSdkVersion
!= NULL
) {
220 minVer
= mManifestMinSdkVersion
;
221 } else if (mMinSdkVersion
!= NULL
) {
222 minVer
= mMinSdkVersion
;
228 int minSdkNum
= (int)strtol(minVer
, &end
, 0);
230 if (minSdkNum
< desired
) {
238 /* commands & modifiers */
243 int mGrayscaleTolerance
;
244 bool mMakePackageDirs
;
247 bool mRequireLocalization
;
248 bool mPseudolocalize
;
251 int mCompressionMethod
;
253 const char* mOutputAPKFile
;
254 const char* mManifestPackageNameOverride
;
255 const char* mInstrumentationPackageNameOverride
;
256 bool mIsOverlayPackage
;
257 bool mAutoAddOverlay
;
258 bool mGenDependencies
;
259 const char* mAssetSourceDir
;
260 const char* mCrunchedOutputDir
;
261 const char* mProguardFile
;
262 const char* mAndroidManifestFile
;
263 const char* mPublicOutputFile
;
264 const char* mRClassDir
;
265 const char* mResourceIntermediatesDir
;
266 android::String8 mConfigurations
;
267 android::String8 mPreferredConfigurations
;
268 android::Vector
<const char*> mPackageIncludes
;
269 android::Vector
<const char*> mJarFiles
;
270 android::Vector
<const char*> mNoCompressExtensions
;
271 android::Vector
<const char*> mResourceSourceDirs
;
273 const char* mManifestMinSdkVersion
;
274 const char* mMinSdkVersion
;
275 const char* mTargetSdkVersion
;
276 const char* mMaxSdkVersion
;
277 const char* mVersionCode
;
278 const char* mVersionName
;
279 const char* mCustomPackage
;
280 const char* mExtraPackages
;
281 const char* mMaxResVersion
;
284 const char* mProduct
;
285 bool mUseCrunchCache
;
286 const char* mOutputTextSymbols
;
288 /* file specification */