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
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user