diff options
Diffstat (limited to 'tools/aapt/AaptAssets.h')
-rw-r--r-- | tools/aapt/AaptAssets.h | 633 |
1 files changed, 0 insertions, 633 deletions
diff --git a/tools/aapt/AaptAssets.h b/tools/aapt/AaptAssets.h deleted file mode 100644 index 5cfa913..0000000 --- a/tools/aapt/AaptAssets.h +++ /dev/null @@ -1,633 +0,0 @@ -// -// Copyright 2006 The Android Open Source Project -// -// Information about assets being operated on. -// -#ifndef __AAPT_ASSETS_H -#define __AAPT_ASSETS_H - -#include <stdlib.h> -#include <androidfw/AssetManager.h> -#include <androidfw/ResourceTypes.h> -#include <utils/KeyedVector.h> -#include <utils/RefBase.h> -#include <utils/SortedVector.h> -#include <utils/String8.h> -#include <utils/String8.h> -#include <utils/Vector.h> -#include "ZipFile.h" - -#include "Bundle.h" -#include "SourcePos.h" - -using namespace android; - - -extern const char * const gDefaultIgnoreAssets; -extern const char * gUserIgnoreAssets; - -bool valid_symbol_name(const String8& str); - -class AaptAssets; - -enum { - AXIS_NONE = 0, - AXIS_MCC = 1, - AXIS_MNC, - AXIS_LANGUAGE, - AXIS_REGION, - AXIS_SCREENLAYOUTSIZE, - AXIS_SCREENLAYOUTLONG, - AXIS_ORIENTATION, - AXIS_UIMODETYPE, - AXIS_UIMODENIGHT, - AXIS_DENSITY, - AXIS_TOUCHSCREEN, - AXIS_KEYSHIDDEN, - AXIS_KEYBOARD, - AXIS_NAVHIDDEN, - AXIS_NAVIGATION, - AXIS_SCREENSIZE, - AXIS_SMALLESTSCREENWIDTHDP, - AXIS_SCREENWIDTHDP, - AXIS_SCREENHEIGHTDP, - AXIS_LAYOUTDIR, - AXIS_VERSION, - - AXIS_START = AXIS_MCC, - AXIS_END = AXIS_VERSION, -}; - -/** - * This structure contains a specific variation of a single file out - * of all the variations it can have that we can have. - */ -struct AaptGroupEntry -{ -public: - AaptGroupEntry() : mParamsChanged(true) { } - AaptGroupEntry(const String8& _locale, const String8& _vendor) - : locale(_locale), vendor(_vendor), mParamsChanged(true) { } - - bool initFromDirName(const char* dir, String8* resType); - - static status_t parseNamePart(const String8& part, int* axis, uint32_t* value); - - static uint32_t getConfigValueForAxis(const ResTable_config& config, int axis); - - static bool configSameExcept(const ResTable_config& config, - const ResTable_config& otherConfig, int axis); - - static bool getMccName(const char* name, ResTable_config* out = NULL); - static bool getMncName(const char* name, ResTable_config* out = NULL); - static bool getLocaleName(const char* name, ResTable_config* out = NULL); - static bool getScreenLayoutSizeName(const char* name, ResTable_config* out = NULL); - static bool getScreenLayoutLongName(const char* name, ResTable_config* out = NULL); - static bool getOrientationName(const char* name, ResTable_config* out = NULL); - static bool getUiModeTypeName(const char* name, ResTable_config* out = NULL); - static bool getUiModeNightName(const char* name, ResTable_config* out = NULL); - static bool getDensityName(const char* name, ResTable_config* out = NULL); - static bool getTouchscreenName(const char* name, ResTable_config* out = NULL); - static bool getKeysHiddenName(const char* name, ResTable_config* out = NULL); - static bool getKeyboardName(const char* name, ResTable_config* out = NULL); - static bool getNavigationName(const char* name, ResTable_config* out = NULL); - static bool getNavHiddenName(const char* name, ResTable_config* out = NULL); - static bool getScreenSizeName(const char* name, ResTable_config* out = NULL); - static bool getSmallestScreenWidthDpName(const char* name, ResTable_config* out = NULL); - static bool getScreenWidthDpName(const char* name, ResTable_config* out = NULL); - static bool getScreenHeightDpName(const char* name, ResTable_config* out = NULL); - static bool getLayoutDirectionName(const char* name, ResTable_config* out = NULL); - static bool getVersionName(const char* name, ResTable_config* out = NULL); - - int compare(const AaptGroupEntry& o) const; - - const ResTable_config& toParams() const; - - inline bool operator<(const AaptGroupEntry& o) const { return compare(o) < 0; } - inline bool operator<=(const AaptGroupEntry& o) const { return compare(o) <= 0; } - inline bool operator==(const AaptGroupEntry& o) const { return compare(o) == 0; } - inline bool operator!=(const AaptGroupEntry& o) const { return compare(o) != 0; } - inline bool operator>=(const AaptGroupEntry& o) const { return compare(o) >= 0; } - inline bool operator>(const AaptGroupEntry& o) const { return compare(o) > 0; } - - String8 toString() const; - String8 toDirName(const String8& resType) const; - - const String8& getVersionString() const { return version; } - -private: - String8 mcc; - String8 mnc; - String8 locale; - String8 vendor; - String8 smallestScreenWidthDp; - String8 screenWidthDp; - String8 screenHeightDp; - String8 screenLayoutSize; - String8 screenLayoutLong; - String8 orientation; - String8 uiModeType; - String8 uiModeNight; - String8 density; - String8 touchscreen; - String8 keysHidden; - String8 keyboard; - String8 navHidden; - String8 navigation; - String8 screenSize; - String8 layoutDirection; - String8 version; - - mutable bool mParamsChanged; - mutable ResTable_config mParams; -}; - -inline int compare_type(const AaptGroupEntry& lhs, const AaptGroupEntry& rhs) -{ - return lhs.compare(rhs); -} - -inline int strictly_order_type(const AaptGroupEntry& lhs, const AaptGroupEntry& rhs) -{ - return compare_type(lhs, rhs) < 0; -} - -class AaptGroup; -class FilePathStore; - -/** - * A single asset file we know about. - */ -class AaptFile : public RefBase -{ -public: - AaptFile(const String8& sourceFile, const AaptGroupEntry& groupEntry, - const String8& resType) - : mGroupEntry(groupEntry) - , mResourceType(resType) - , mSourceFile(sourceFile) - , mData(NULL) - , mDataSize(0) - , mBufferSize(0) - , mCompression(ZipEntry::kCompressStored) - { - //printf("new AaptFile created %s\n", (const char*)sourceFile); - } - virtual ~AaptFile() { - free(mData); - } - - const String8& getPath() const { return mPath; } - const AaptGroupEntry& getGroupEntry() const { return mGroupEntry; } - - // Data API. If there is data attached to the file, - // getSourceFile() is not used. - bool hasData() const { return mData != NULL; } - const void* getData() const { return mData; } - size_t getSize() const { return mDataSize; } - void* editData(size_t size); - void* editData(size_t* outSize = NULL); - void* padData(size_t wordSize); - status_t writeData(const void* data, size_t size); - void clearData(); - - const String8& getResourceType() const { return mResourceType; } - - // File API. If the file does not hold raw data, this is - // a full path to a file on the filesystem that holds its data. - const String8& getSourceFile() const { return mSourceFile; } - - String8 getPrintableSource() const; - - // Desired compression method, as per utils/ZipEntry.h. For example, - // no compression is ZipEntry::kCompressStored. - int getCompressionMethod() const { return mCompression; } - void setCompressionMethod(int c) { mCompression = c; } -private: - friend class AaptGroup; - - String8 mPath; - AaptGroupEntry mGroupEntry; - String8 mResourceType; - String8 mSourceFile; - void* mData; - size_t mDataSize; - size_t mBufferSize; - int mCompression; -}; - -/** - * A group of related files (the same file, with different - * vendor/locale variations). - */ -class AaptGroup : public RefBase -{ -public: - AaptGroup(const String8& leaf, const String8& path) - : mLeaf(leaf), mPath(path) { } - virtual ~AaptGroup() { } - - const String8& getLeaf() const { return mLeaf; } - - // Returns the relative path after the AaptGroupEntry dirs. - const String8& getPath() const { return mPath; } - - const DefaultKeyedVector<AaptGroupEntry, sp<AaptFile> >& getFiles() const - { return mFiles; } - - status_t addFile(const sp<AaptFile>& file); - void removeFile(size_t index); - - void print(const String8& prefix) const; - - String8 getPrintableSource() const; - -private: - String8 mLeaf; - String8 mPath; - - DefaultKeyedVector<AaptGroupEntry, sp<AaptFile> > mFiles; -}; - -/** - * A single directory of assets, which can contain files and other - * sub-directories. - */ -class AaptDir : public RefBase -{ -public: - AaptDir(const String8& leaf, const String8& path) - : mLeaf(leaf), mPath(path) { } - virtual ~AaptDir() { } - - const String8& getLeaf() const { return mLeaf; } - - const String8& getPath() const { return mPath; } - - const DefaultKeyedVector<String8, sp<AaptGroup> >& getFiles() const { return mFiles; } - const DefaultKeyedVector<String8, sp<AaptDir> >& getDirs() const { return mDirs; } - - virtual status_t addFile(const String8& name, const sp<AaptGroup>& file); - - void removeFile(const String8& name); - void removeDir(const String8& name); - - /* - * Perform some sanity checks on the names of files and directories here. - * In particular: - * - Check for illegal chars in filenames. - * - Check filename length. - * - Check for presence of ".gz" and non-".gz" copies of same file. - * - Check for multiple files whose names match in a case-insensitive - * fashion (problematic for some systems). - * - * Comparing names against all other names is O(n^2). We could speed - * it up some by sorting the entries and being smarter about what we - * compare against, but I'm not expecting to have enough files in a - * single directory to make a noticeable difference in speed. - * - * Note that sorting here is not enough to guarantee that the package - * contents are sorted -- subsequent updates can rearrange things. - */ - status_t validate() const; - - void print(const String8& prefix) const; - - String8 getPrintableSource() const; - -private: - friend class AaptAssets; - - status_t addDir(const String8& name, const sp<AaptDir>& dir); - sp<AaptDir> makeDir(const String8& name); - status_t addLeafFile(const String8& leafName, - const sp<AaptFile>& file); - virtual ssize_t slurpFullTree(Bundle* bundle, - const String8& srcDir, - const AaptGroupEntry& kind, - const String8& resType, - sp<FilePathStore>& fullResPaths); - - String8 mLeaf; - String8 mPath; - - DefaultKeyedVector<String8, sp<AaptGroup> > mFiles; - DefaultKeyedVector<String8, sp<AaptDir> > mDirs; -}; - -/** - * All information we know about a particular symbol. - */ -class AaptSymbolEntry -{ -public: - AaptSymbolEntry() - : isPublic(false), isJavaSymbol(false), typeCode(TYPE_UNKNOWN) - { - } - AaptSymbolEntry(const String8& _name) - : name(_name), isPublic(false), isJavaSymbol(false), typeCode(TYPE_UNKNOWN) - { - } - AaptSymbolEntry(const AaptSymbolEntry& o) - : name(o.name), sourcePos(o.sourcePos), isPublic(o.isPublic) - , isJavaSymbol(o.isJavaSymbol), comment(o.comment), typeComment(o.typeComment) - , typeCode(o.typeCode), int32Val(o.int32Val), stringVal(o.stringVal) - { - } - AaptSymbolEntry operator=(const AaptSymbolEntry& o) - { - sourcePos = o.sourcePos; - isPublic = o.isPublic; - isJavaSymbol = o.isJavaSymbol; - comment = o.comment; - typeComment = o.typeComment; - typeCode = o.typeCode; - int32Val = o.int32Val; - stringVal = o.stringVal; - return *this; - } - - const String8 name; - - SourcePos sourcePos; - bool isPublic; - bool isJavaSymbol; - - String16 comment; - String16 typeComment; - - enum { - TYPE_UNKNOWN = 0, - TYPE_INT32, - TYPE_STRING - }; - - int typeCode; - - // Value. May be one of these. - int32_t int32Val; - String8 stringVal; -}; - -/** - * A group of related symbols (such as indices into a string block) - * that have been generated from the assets. - */ -class AaptSymbols : public RefBase -{ -public: - AaptSymbols() { } - virtual ~AaptSymbols() { } - - status_t addSymbol(const String8& name, int32_t value, const SourcePos& pos) { - if (!check_valid_symbol_name(name, pos, "symbol")) { - return BAD_VALUE; - } - AaptSymbolEntry& sym = edit_symbol(name, &pos); - sym.typeCode = AaptSymbolEntry::TYPE_INT32; - sym.int32Val = value; - return NO_ERROR; - } - - status_t addStringSymbol(const String8& name, const String8& value, - const SourcePos& pos) { - if (!check_valid_symbol_name(name, pos, "symbol")) { - return BAD_VALUE; - } - AaptSymbolEntry& sym = edit_symbol(name, &pos); - sym.typeCode = AaptSymbolEntry::TYPE_STRING; - sym.stringVal = value; - return NO_ERROR; - } - - status_t makeSymbolPublic(const String8& name, const SourcePos& pos) { - if (!check_valid_symbol_name(name, pos, "symbol")) { - return BAD_VALUE; - } - AaptSymbolEntry& sym = edit_symbol(name, &pos); - sym.isPublic = true; - return NO_ERROR; - } - - status_t makeSymbolJavaSymbol(const String8& name, const SourcePos& pos) { - if (!check_valid_symbol_name(name, pos, "symbol")) { - return BAD_VALUE; - } - AaptSymbolEntry& sym = edit_symbol(name, &pos); - sym.isJavaSymbol = true; - return NO_ERROR; - } - - void appendComment(const String8& name, const String16& comment, const SourcePos& pos) { - if (comment.size() <= 0) { - return; - } - AaptSymbolEntry& sym = edit_symbol(name, &pos); - if (sym.comment.size() == 0) { - sym.comment = comment; - } else { - sym.comment.append(String16("\n")); - sym.comment.append(comment); - } - } - - void appendTypeComment(const String8& name, const String16& comment) { - if (comment.size() <= 0) { - return; - } - AaptSymbolEntry& sym = edit_symbol(name, NULL); - if (sym.typeComment.size() == 0) { - sym.typeComment = comment; - } else { - sym.typeComment.append(String16("\n")); - sym.typeComment.append(comment); - } - } - - sp<AaptSymbols> addNestedSymbol(const String8& name, const SourcePos& pos) { - if (!check_valid_symbol_name(name, pos, "nested symbol")) { - return NULL; - } - - sp<AaptSymbols> sym = mNestedSymbols.valueFor(name); - if (sym == NULL) { - sym = new AaptSymbols(); - mNestedSymbols.add(name, sym); - } - - return sym; - } - - status_t applyJavaSymbols(const sp<AaptSymbols>& javaSymbols); - - const KeyedVector<String8, AaptSymbolEntry>& getSymbols() const - { return mSymbols; } - const DefaultKeyedVector<String8, sp<AaptSymbols> >& getNestedSymbols() const - { return mNestedSymbols; } - - const String16& getComment(const String8& name) const - { return get_symbol(name).comment; } - const String16& getTypeComment(const String8& name) const - { return get_symbol(name).typeComment; } - -private: - bool check_valid_symbol_name(const String8& symbol, const SourcePos& pos, const char* label) { - if (valid_symbol_name(symbol)) { - return true; - } - pos.error("invalid %s: '%s'\n", label, symbol.string()); - return false; - } - AaptSymbolEntry& edit_symbol(const String8& symbol, const SourcePos* pos) { - ssize_t i = mSymbols.indexOfKey(symbol); - if (i < 0) { - i = mSymbols.add(symbol, AaptSymbolEntry(symbol)); - } - AaptSymbolEntry& sym = mSymbols.editValueAt(i); - if (pos != NULL && sym.sourcePos.line < 0) { - sym.sourcePos = *pos; - } - return sym; - } - const AaptSymbolEntry& get_symbol(const String8& symbol) const { - ssize_t i = mSymbols.indexOfKey(symbol); - if (i >= 0) { - return mSymbols.valueAt(i); - } - return mDefSymbol; - } - - KeyedVector<String8, AaptSymbolEntry> mSymbols; - DefaultKeyedVector<String8, sp<AaptSymbols> > mNestedSymbols; - AaptSymbolEntry mDefSymbol; -}; - -class ResourceTypeSet : public RefBase, - public KeyedVector<String8,sp<AaptGroup> > -{ -public: - ResourceTypeSet(); -}; - -// Storage for lists of fully qualified paths for -// resources encountered during slurping. -class FilePathStore : public RefBase, - public Vector<String8> -{ -public: - FilePathStore(); -}; - -/** - * Asset hierarchy being operated on. - */ -class AaptAssets : public AaptDir -{ -public: - AaptAssets(); - virtual ~AaptAssets() { delete mRes; } - - const String8& getPackage() const { return mPackage; } - void setPackage(const String8& package) { - mPackage = package; - mSymbolsPrivatePackage = package; - mHavePrivateSymbols = false; - } - - const SortedVector<AaptGroupEntry>& getGroupEntries() const; - - virtual status_t addFile(const String8& name, const sp<AaptGroup>& file); - - sp<AaptFile> addFile(const String8& filePath, - const AaptGroupEntry& entry, - const String8& srcDir, - sp<AaptGroup>* outGroup, - const String8& resType); - - void addResource(const String8& leafName, - const String8& path, - const sp<AaptFile>& file, - const String8& resType); - - void addGroupEntry(const AaptGroupEntry& entry) { mGroupEntries.add(entry); } - - ssize_t slurpFromArgs(Bundle* bundle); - - sp<AaptSymbols> getSymbolsFor(const String8& name); - - sp<AaptSymbols> getJavaSymbolsFor(const String8& name); - - status_t applyJavaSymbols(); - - const DefaultKeyedVector<String8, sp<AaptSymbols> >& getSymbols() const { return mSymbols; } - - String8 getSymbolsPrivatePackage() const { return mSymbolsPrivatePackage; } - void setSymbolsPrivatePackage(const String8& pkg) { - mSymbolsPrivatePackage = pkg; - mHavePrivateSymbols = mSymbolsPrivatePackage != mPackage; - } - - bool havePrivateSymbols() const { return mHavePrivateSymbols; } - - bool isJavaSymbol(const AaptSymbolEntry& sym, bool includePrivate) const; - - status_t buildIncludedResources(Bundle* bundle); - status_t addIncludedResources(const sp<AaptFile>& file); - const ResTable& getIncludedResources() const; - - void print(const String8& prefix) const; - - inline const Vector<sp<AaptDir> >& resDirs() const { return mResDirs; } - sp<AaptDir> resDir(const String8& name) const; - - inline sp<AaptAssets> getOverlay() { return mOverlay; } - inline void setOverlay(sp<AaptAssets>& overlay) { mOverlay = overlay; } - - inline KeyedVector<String8, sp<ResourceTypeSet> >* getResources() { return mRes; } - inline void - setResources(KeyedVector<String8, sp<ResourceTypeSet> >* res) { delete mRes; mRes = res; } - - inline sp<FilePathStore>& getFullResPaths() { return mFullResPaths; } - inline void - setFullResPaths(sp<FilePathStore>& res) { mFullResPaths = res; } - - inline sp<FilePathStore>& getFullAssetPaths() { return mFullAssetPaths; } - inline void - setFullAssetPaths(sp<FilePathStore>& res) { mFullAssetPaths = res; } - -private: - virtual ssize_t slurpFullTree(Bundle* bundle, - const String8& srcDir, - const AaptGroupEntry& kind, - const String8& resType, - sp<FilePathStore>& fullResPaths); - - ssize_t slurpResourceTree(Bundle* bundle, const String8& srcDir); - ssize_t slurpResourceZip(Bundle* bundle, const char* filename); - - status_t filter(Bundle* bundle); - - String8 mPackage; - SortedVector<AaptGroupEntry> mGroupEntries; - DefaultKeyedVector<String8, sp<AaptSymbols> > mSymbols; - DefaultKeyedVector<String8, sp<AaptSymbols> > mJavaSymbols; - String8 mSymbolsPrivatePackage; - bool mHavePrivateSymbols; - - Vector<sp<AaptDir> > mResDirs; - - bool mChanged; - - bool mHaveIncludedAssets; - AssetManager mIncludedAssets; - - sp<AaptAssets> mOverlay; - KeyedVector<String8, sp<ResourceTypeSet> >* mRes; - - sp<FilePathStore> mFullResPaths; - sp<FilePathStore> mFullAssetPaths; -}; - -#endif // __AAPT_ASSETS_H - |