summaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorKenny Root <kroot@google.com>2009-12-10 13:52:53 -0800
committerKenny Root <kroot@google.com>2009-12-10 20:17:33 -0800
commitb5ef7ee1644b099498ddd29c1d051e7ee26ccfd3 (patch)
tree5097c3ed0a1c60a75c93ccac7c43ae4c720f8e68 /tools
parent05bbeb356286bfb6ddc26ac546cce03334e346dd (diff)
downloadframeworks_base-b5ef7ee1644b099498ddd29c1d051e7ee26ccfd3.zip
frameworks_base-b5ef7ee1644b099498ddd29c1d051e7ee26ccfd3.tar.gz
frameworks_base-b5ef7ee1644b099498ddd29c1d051e7ee26ccfd3.tar.bz2
Default to UTF8 resources when packaging with aapt
This change makes it so with API level 7 and above all resources will be packaged in UTF-8 format. Any minSdkVersion level that is named will also have resources packaged in UTF-8, because it is assumed that previous releases will only be rebuilt with their proper integer number and only future releases will temporarily have names. Change-Id: If5d1ee5e48fbaf31798816b068ac44b14a93121b
Diffstat (limited to 'tools')
-rw-r--r--tools/aapt/Bundle.h19
-rw-r--r--tools/aapt/Resource.cpp21
2 files changed, 37 insertions, 3 deletions
diff --git a/tools/aapt/Bundle.h b/tools/aapt/Bundle.h
index 4737f84..a2c6a12 100644
--- a/tools/aapt/Bundle.h
+++ b/tools/aapt/Bundle.h
@@ -114,7 +114,10 @@ public:
void addNoCompressExtension(const char* ext) { mNoCompressExtensions.add(ext); }
const char* getMinSdkVersion() const { return mMinSdkVersion; }
- void setMinSdkVersion(const char* val) { mMinSdkVersion = val; }
+ void setMinSdkVersion(const char* val) {
+ mMinSdkVersion = val;
+ setUTF8(isUTF8Available());
+ }
const char* getTargetSdkVersion() const { return mTargetSdkVersion; }
void setTargetSdkVersion(const char* val) { mTargetSdkVersion = val; }
const char* getMaxSdkVersion() const { return mMaxSdkVersion; }
@@ -197,6 +200,20 @@ private:
/* misc stuff */
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/Resource.cpp b/tools/aapt/Resource.cpp
index d04a873..de6ff14 100644
--- a/tools/aapt/Resource.cpp
+++ b/tools/aapt/Resource.cpp
@@ -171,7 +171,8 @@ static sp<AaptFile> getResourceFile(const sp<AaptAssets>& assets, bool makeIfNec
NULL, String8());
}
-static status_t parsePackage(const sp<AaptAssets>& assets, const sp<AaptGroup>& grp)
+static status_t parsePackage(Bundle* bundle, const sp<AaptAssets>& assets,
+ const sp<AaptGroup>& grp)
{
if (grp->getFiles().size() != 1) {
fprintf(stderr, "warning: Multiple AndroidManifest.xml files found, using %s\n",
@@ -215,6 +216,22 @@ static status_t parsePackage(const sp<AaptAssets>& assets, const sp<AaptGroup>&
assets->setPackage(String8(block.getAttributeStringValue(nameIndex, &len)));
+ String16 uses_sdk16("uses-sdk");
+ while ((code=block.next()) != ResXMLTree::END_DOCUMENT
+ && code != ResXMLTree::BAD_DOCUMENT) {
+ if (code == ResXMLTree::START_TAG) {
+ if (strcmp16(block.getElementName(&len), uses_sdk16.string()) == 0) {
+ ssize_t minSdkIndex = block.indexOfAttribute("android",
+ "minSdkVersion");
+ if (minSdkIndex >= 0) {
+ String8 minSdkString = String8(
+ block.getAttributeStringValue(minSdkIndex, &len));
+ bundle->setMinSdkVersion(minSdkString.string());
+ }
+ }
+ }
+ }
+
return NO_ERROR;
}
@@ -597,7 +614,7 @@ status_t buildResources(Bundle* bundle, const sp<AaptAssets>& assets)
return UNKNOWN_ERROR;
}
- status_t err = parsePackage(assets, androidManifestFile);
+ status_t err = parsePackage(bundle, assets, androidManifestFile);
if (err != NO_ERROR) {
return err;
}