Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b5ef7ee1 authored by Kenny Root's avatar Kenny Root
Browse files

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
parent 05bbeb35
Loading
Loading
Loading
Loading
+18 −1
Original line number Diff line number Diff line
@@ -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
+19 −2
Original line number Diff line number Diff line
@@ -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;
    }