diff options
author | Kenny Root <kroot@google.com> | 2010-03-18 12:12:11 -0700 |
---|---|---|
committer | Kenny Root <kroot@google.com> | 2010-03-18 12:12:11 -0700 |
commit | 1741cd4904414b5b4e768953a8f1abb3f0ef0a0a (patch) | |
tree | e58d120464d0e466c672a71818cdcb3aa2019bfb /tools | |
parent | 2fbc10f3559b85f6550dd34b8779e9ee94e4c73c (diff) | |
download | frameworks_base-1741cd4904414b5b4e768953a8f1abb3f0ef0a0a.zip frameworks_base-1741cd4904414b5b4e768953a8f1abb3f0ef0a0a.tar.gz frameworks_base-1741cd4904414b5b4e768953a8f1abb3f0ef0a0a.tar.bz2 |
Fix minSdkVersion scanning to not throw warnings
For the UTF8/UTF16 switch code, we needed to know what was the
minSdkVersion specified as early as possible. Unfortunately, this threw
warnings when the SDK was compiling since we always set this field in
the Bundle.
This splits out the field used by the initial AndroidManifest.xml scan
to a separate one that we won't attempt to re-insert into the
AndroidManifest.xml This also switches the logic to better reflect the
preference of UTF-8 over UTF-16; previously UTF-16 was the default.
Change-Id: Ia81f6b21047043ebb711eb24c2c3718534979ef6
Diffstat (limited to 'tools')
-rw-r--r-- | tools/aapt/Bundle.h | 64 | ||||
-rw-r--r-- | tools/aapt/Main.cpp | 3 | ||||
-rw-r--r-- | tools/aapt/Resource.cpp | 10 | ||||
-rw-r--r-- | tools/aapt/ResourceTable.cpp | 8 |
4 files changed, 51 insertions, 34 deletions
diff --git a/tools/aapt/Bundle.h b/tools/aapt/Bundle.h index 08530a0..c8b6837 100644 --- a/tools/aapt/Bundle.h +++ b/tools/aapt/Bundle.h @@ -37,12 +37,12 @@ public: mForce(false), mGrayscaleTolerance(0), mMakePackageDirs(false), mUpdate(false), mExtending(false), mRequireLocalization(false), mPseudolocalize(false), - mUTF8(false), mEncodingSpecified(false), mValues(false), + mWantUTF16(false), mValues(false), mCompressionMethod(0), mOutputAPKFile(NULL), mManifestPackageNameOverride(NULL), mInstrumentationPackageNameOverride(NULL), mAutoAddOverlay(false), mAssetSourceDir(NULL), mProguardFile(NULL), mAndroidManifestFile(NULL), mPublicOutputFile(NULL), - mRClassDir(NULL), mResourceIntermediatesDir(NULL), + mRClassDir(NULL), mResourceIntermediatesDir(NULL), mManifestMinSdkVersion(NULL), mMinSdkVersion(NULL), mTargetSdkVersion(NULL), mMaxSdkVersion(NULL), mVersionCode(NULL), mVersionName(NULL), mCustomPackage(NULL), mArgc(0), mArgv(NULL) @@ -77,10 +77,8 @@ public: void setRequireLocalization(bool val) { mRequireLocalization = val; } bool getPseudolocalize(void) const { return mPseudolocalize; } void setPseudolocalize(bool val) { mPseudolocalize = val; } - bool getUTF8(void) const { return mUTF8; } - void setUTF8(bool val) { mUTF8 = val; } - bool getEncodingSpecified(void) const { return mEncodingSpecified; } - void setEncodingSpecified(bool val) { mEncodingSpecified = val; } + bool getWantUTF16(void) const { return mWantUTF16; } + void setWantUTF16(bool val) { mWantUTF16 = val; } bool getValues(void) const { return mValues; } void setValues(bool val) { mValues = val; } int getCompressionMethod(void) const { return mCompressionMethod; } @@ -122,13 +120,10 @@ public: const android::Vector<const char*>& getNoCompressExtensions() const { return mNoCompressExtensions; } void addNoCompressExtension(const char* ext) { mNoCompressExtensions.add(ext); } + const char* getManifestMinSdkVersion() const { return mManifestMinSdkVersion; } + void setManifestMinSdkVersion(const char* val) { mManifestMinSdkVersion = val; } const char* getMinSdkVersion() const { return mMinSdkVersion; } - void setMinSdkVersion(const char* val) { - mMinSdkVersion = val; - if (!mEncodingSpecified) { - setUTF8(isUTF8Available()); - } - } + void setMinSdkVersion(const char* val) { mMinSdkVersion = val; } const char* getTargetSdkVersion() const { return mTargetSdkVersion; } void setTargetSdkVersion(const char* val) { mTargetSdkVersion = val; } const char* getMaxSdkVersion() const { return mMaxSdkVersion; } @@ -167,6 +162,34 @@ public: void setPackageCount(int val) { mPackageCount = val; } #endif + /* UTF-8 is only available on APIs 7 or above or + * SDK levels that have code names. + */ + bool isUTF8Available() { + /* If the application specifies a minSdkVersion in the manifest + * then use that. Otherwise, check what the user specified on + * the command line. If neither, it's not available since + * the minimum SDK version is assumed to be 1. + */ + const char *minVer; + if (mManifestMinSdkVersion != NULL) { + minVer = mManifestMinSdkVersion; + } else if (mMinSdkVersion != NULL) { + minVer = mMinSdkVersion; + } else { + return false; + } + + char *end; + int minSdkNum = (int)strtol(minVer, &end, 0); + if (*end == '\0') { + if (minSdkNum < 7) { + return false; + } + } + return true; + } + private: /* commands & modifiers */ Command mCmd; @@ -179,8 +202,7 @@ private: bool mExtending; bool mRequireLocalization; bool mPseudolocalize; - bool mUTF8; - bool mEncodingSpecified; + bool mWantUTF16; bool mValues; int mCompressionMethod; bool mJunkPath; @@ -200,6 +222,7 @@ private: android::Vector<const char*> mNoCompressExtensions; android::Vector<const char*> mResourceSourceDirs; + const char* mManifestMinSdkVersion; const char* mMinSdkVersion; const char* mTargetSdkVersion; const char* mMaxSdkVersion; @@ -216,19 +239,6 @@ private: int mPackageCount; #endif - /* UTF-8 is only available on APIs 7 or above or - * SDK levels that have code names. - */ - bool isUTF8Available() { - char *end; - int minSdkNum = (int)strtol(mMinSdkVersion, &end, 0); - if (*end == '\0') { - if (minSdkNum < 7) { - return false; - } - } - return true; - } }; #endif // __BUNDLE_H diff --git a/tools/aapt/Main.cpp b/tools/aapt/Main.cpp index dd98c85..b0c6e39 100644 --- a/tools/aapt/Main.cpp +++ b/tools/aapt/Main.cpp @@ -446,8 +446,7 @@ int main(int argc, char* const argv[]) } bundle.setCustomPackage(argv[0]); } else if (strcmp(cp, "-utf16") == 0) { - bundle.setEncodingSpecified(true); - bundle.setUTF8(false); + bundle.setWantUTF16(true); } else if (strcmp(cp, "-rename-manifest-package") == 0) { argc--; argv++; diff --git a/tools/aapt/Resource.cpp b/tools/aapt/Resource.cpp index c0ebb59..87f2420 100644 --- a/tools/aapt/Resource.cpp +++ b/tools/aapt/Resource.cpp @@ -226,7 +226,7 @@ static status_t parsePackage(Bundle* bundle, const sp<AaptAssets>& assets, if (minSdkIndex >= 0) { const uint16_t* minSdk16 = block.getAttributeStringValue(minSdkIndex, &len); const char* minSdk8 = strdup(String8(minSdk16).string()); - bundle->setMinSdkVersion(minSdk8); + bundle->setManifestMinSdkVersion(minSdk8); } } } @@ -768,7 +768,13 @@ status_t buildResources(Bundle* bundle, const sp<AaptAssets>& assets) // Standard flags for compiled XML and optional UTF-8 encoding int xmlFlags = XML_COMPILE_STANDARD_RESOURCE; - if (bundle->getUTF8()) { + + /* Only enable UTF-8 if the caller of aapt didn't specifically + * request UTF-16 encoding and the parameters of this package + * allow UTF-8 to be used. + */ + if (!bundle->getWantUTF16() + && bundle->isUTF8Available()) { xmlFlags |= XML_COMPILE_UTF8; } diff --git a/tools/aapt/ResourceTable.cpp b/tools/aapt/ResourceTable.cpp index ab5e937..66db450 100644 --- a/tools/aapt/ResourceTable.cpp +++ b/tools/aapt/ResourceTable.cpp @@ -2527,9 +2527,11 @@ status_t ResourceTable::flatten(Bundle* bundle, const sp<AaptFile>& dest) const size_t N = mOrderedPackages.size(); size_t pi; + bool useUTF8 = !bundle->getWantUTF16() && bundle->isUTF8Available(); + // Iterate through all data, collecting all values (strings, // references, etc). - StringPool valueStrings = StringPool(false, bundle->getUTF8()); + StringPool valueStrings = StringPool(false, useUTF8); for (pi=0; pi<N; pi++) { sp<Package> p = mOrderedPackages.itemAt(pi); if (p->getTypes().size() == 0) { @@ -2537,8 +2539,8 @@ status_t ResourceTable::flatten(Bundle* bundle, const sp<AaptFile>& dest) continue; } - StringPool typeStrings = StringPool(false, bundle->getUTF8()); - StringPool keyStrings = StringPool(false, bundle->getUTF8()); + StringPool typeStrings = StringPool(false, useUTF8); + StringPool keyStrings = StringPool(false, useUTF8); const size_t N = p->getOrderedTypes().size(); for (size_t ti=0; ti<N; ti++) { |