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* getResourceIntermediatesDir() const { return mResourceIntermediatesDir
; }
126 void setResourceIntermediatesDir(const char* dir
) { mResourceIntermediatesDir
= dir
; }
127 const android::Vector
<const char*>& getPackageIncludes() const { return mPackageIncludes
; }
128 void addPackageInclude(const char* file
) { mPackageIncludes
.add(file
); }
129 const android::Vector
<const char*>& getJarFiles() const { return mJarFiles
; }
130 void addJarFile(const char* file
) { mJarFiles
.add(file
); }
131 const android::Vector
<const char*>& getNoCompressExtensions() const { return mNoCompressExtensions
; }
132 void addNoCompressExtension(const char* ext
) { mNoCompressExtensions
.add(ext
); }
134 const char* getManifestMinSdkVersion() const { return mManifestMinSdkVersion
; }
135 void setManifestMinSdkVersion(const char* val
) { mManifestMinSdkVersion
= val
; }
136 const char* getMinSdkVersion() const { return mMinSdkVersion
; }
137 void setMinSdkVersion(const char* val
) { mMinSdkVersion
= val
; }
138 const char* getTargetSdkVersion() const { return mTargetSdkVersion
; }
139 void setTargetSdkVersion(const char* val
) { mTargetSdkVersion
= val
; }
140 const char* getMaxSdkVersion() const { return mMaxSdkVersion
; }
141 void setMaxSdkVersion(const char* val
) { mMaxSdkVersion
= val
; }
142 const char* getVersionCode() const { return mVersionCode
; }
143 void setVersionCode(const char* val
) { mVersionCode
= val
; }
144 const char* getVersionName() const { return mVersionName
; }
145 void setVersionName(const char* val
) { mVersionName
= val
; }
146 const char* getCustomPackage() const { return mCustomPackage
; }
147 void setCustomPackage(const char* val
) { mCustomPackage
= val
; }
148 const char* getExtraPackages() const { return mExtraPackages
; }
149 void setExtraPackages(const char* val
) { mExtraPackages
= val
; }
150 const char* getMaxResVersion() const { return mMaxResVersion
; }
151 void setMaxResVersion(const char * val
) { mMaxResVersion
= val
; }
152 bool getDebugMode() { return mDebugMode
; }
153 void setDebugMode(bool val
) { mDebugMode
= val
; }
154 bool getNonConstantId() { return mNonConstantId
; }
155 void setNonConstantId(bool val
) { mNonConstantId
= val
; }
156 const char* getProduct() const { return mProduct
; }
157 void setProduct(const char * val
) { mProduct
= val
; }
158 void setUseCrunchCache(bool val
) { mUseCrunchCache
= val
; }
159 bool getUseCrunchCache() { return mUseCrunchCache
; }
162 * Set and get the file specification.
164 * Note this does NOT make a copy of argv.
166 void setFileSpec(char* const argv
[], int argc
) {
170 int getFileSpecCount(void) const { return mArgc
; }
171 const char* getFileSpecEntry(int idx
) const { return mArgv
[idx
]; }
172 void eatArgs(int n
) {
173 if (n
> mArgc
) n
= mArgc
;
180 * Package count. Nothing to do with anything else here; this is
181 * just a convenient place to stuff it so we don't have to pass it
184 int getPackageCount(void) const { return mPackageCount
; }
185 void setPackageCount(int val
) { mPackageCount
= val
; }
188 /* Certain features may only be available on a specific SDK level or
189 * above. SDK levels that have a non-numeric identifier are assumed
190 * to be newer than any SDK level that has a number designated.
192 bool isMinSdkAtLeast(int desired
) {
193 /* If the application specifies a minSdkVersion in the manifest
194 * then use that. Otherwise, check what the user specified on
195 * the command line. If neither, it's not available since
196 * the minimum SDK version is assumed to be 1.
199 if (mManifestMinSdkVersion
!= NULL
) {
200 minVer
= mManifestMinSdkVersion
;
201 } else if (mMinSdkVersion
!= NULL
) {
202 minVer
= mMinSdkVersion
;
208 int minSdkNum
= (int)strtol(minVer
, &end
, 0);
210 if (minSdkNum
< desired
) {
218 /* commands & modifiers */
223 int mGrayscaleTolerance
;
224 bool mMakePackageDirs
;
227 bool mRequireLocalization
;
228 bool mPseudolocalize
;
231 int mCompressionMethod
;
233 const char* mOutputAPKFile
;
234 const char* mManifestPackageNameOverride
;
235 const char* mInstrumentationPackageNameOverride
;
236 bool mIsOverlayPackage
;
237 bool mAutoAddOverlay
;
238 bool mGenDependencies
;
239 const char* mAssetSourceDir
;
240 const char* mCrunchedOutputDir
;
241 const char* mProguardFile
;
242 const char* mAndroidManifestFile
;
243 const char* mPublicOutputFile
;
244 const char* mRClassDir
;
245 const char* mResourceIntermediatesDir
;
246 android::String8 mConfigurations
;
247 android::Vector
<const char*> mPackageIncludes
;
248 android::Vector
<const char*> mJarFiles
;
249 android::Vector
<const char*> mNoCompressExtensions
;
250 android::Vector
<const char*> mResourceSourceDirs
;
252 const char* mManifestMinSdkVersion
;
253 const char* mMinSdkVersion
;
254 const char* mTargetSdkVersion
;
255 const char* mMaxSdkVersion
;
256 const char* mVersionCode
;
257 const char* mVersionName
;
258 const char* mCustomPackage
;
259 const char* mExtraPackages
;
260 const char* mMaxResVersion
;
263 const char* mProduct
;
264 bool mUseCrunchCache
;
266 /* file specification */