]> git.saurik.com Git - android/aapt.git/commitdiff
Default to UTF8 resources when packaging with aapt
authorKenny Root <kroot@google.com>
Thu, 10 Dec 2009 21:52:53 +0000 (13:52 -0800)
committerKenny Root <kroot@google.com>
Fri, 11 Dec 2009 04:17:33 +0000 (20:17 -0800)
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

Bundle.h
Resource.cpp

index 4737f846116702a29a1d2f291b84576c5d496bc5..a2c6a12ad9ddb15a61acae70b1dc01dd4cc83608 100644 (file)
--- a/Bundle.h
+++ b/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
index d04a87350f868d69abe5e25ce00a338b22f05812..de6ff14af41a45a1e9ed968a9ae4f47db45f1f82 100644 (file)
@@ -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;
     }