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
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 @@
                             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 @@
 
     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 @@
         return UNKNOWN_ERROR;
     }
 
-    status_t err = parsePackage(assets, androidManifestFile);
+    status_t err = parsePackage(bundle, assets, androidManifestFile);
     if (err != NO_ERROR) {
         return err;
     }