summaryrefslogtreecommitdiffstats
path: root/tools/aapt
diff options
context:
space:
mode:
authorAdam Lesinski <adamlesinski@google.com>2015-04-21 14:20:15 -0700
committerAdam Lesinski <adamlesinski@google.com>2015-04-21 14:27:02 -0700
commit6e46056abc1c2803ed7f195bab169bbb1cacec6b (patch)
treef68b9654b5dc9e402e79052f1cafa7e60c6d56c3 /tools/aapt
parentd981c0d4f01bb25ba378e865952cf9d48109b9fe (diff)
downloadframeworks_base-6e46056abc1c2803ed7f195bab169bbb1cacec6b.zip
frameworks_base-6e46056abc1c2803ed7f195bab169bbb1cacec6b.tar.gz
frameworks_base-6e46056abc1c2803ed7f195bab169bbb1cacec6b.tar.bz2
AAPT: Add flag to disable versioning of vector related XML
AAPT automatically versions XML files according to the SDK level in which their attributes were introduced. Support libraries know how to handle resources built against newer SDKs, so offer the option to disable some of the automatic versioning, namely vectors. Bug:19336994 Change-Id: I9f9d0ae8f2a0c28404f82e27de416f80e38493c9
Diffstat (limited to 'tools/aapt')
-rw-r--r--tools/aapt/Bundle.h5
-rw-r--r--tools/aapt/Main.cpp6
-rw-r--r--tools/aapt/ResourceTable.cpp13
3 files changed, 20 insertions, 4 deletions
diff --git a/tools/aapt/Bundle.h b/tools/aapt/Bundle.h
index e7cde74..3dae917 100644
--- a/tools/aapt/Bundle.h
+++ b/tools/aapt/Bundle.h
@@ -54,7 +54,7 @@ public:
mWantUTF16(false), mValues(false), mIncludeMetaData(false),
mCompressionMethod(0), mJunkPath(false), mOutputAPKFile(NULL),
mManifestPackageNameOverride(NULL), mInstrumentationPackageNameOverride(NULL),
- mAutoAddOverlay(false), mGenDependencies(false),
+ mAutoAddOverlay(false), mGenDependencies(false), mNoVersionVectors(false),
mCrunchedOutputDir(NULL), mProguardFile(NULL),
mAndroidManifestFile(NULL), mPublicOutputFile(NULL),
mRClassDir(NULL), mResourceIntermediatesDir(NULL), mManifestMinSdkVersion(NULL),
@@ -203,6 +203,8 @@ public:
void setSingleCrunchOutputFile(const char* val) { mSingleCrunchOutputFile = val; }
bool getBuildSharedLibrary() const { return mBuildSharedLibrary; }
void setBuildSharedLibrary(bool val) { mBuildSharedLibrary = val; }
+ void setNoVersionVectors(bool val) { mNoVersionVectors = val; }
+ bool getNoVersionVectors() const { return mNoVersionVectors; }
/*
* Set and get the file specification.
@@ -282,6 +284,7 @@ private:
const char* mInstrumentationPackageNameOverride;
bool mAutoAddOverlay;
bool mGenDependencies;
+ bool mNoVersionVectors;
const char* mCrunchedOutputDir;
const char* mProguardFile;
const char* mAndroidManifestFile;
diff --git a/tools/aapt/Main.cpp b/tools/aapt/Main.cpp
index 8b416aa..7dee585 100644
--- a/tools/aapt/Main.cpp
+++ b/tools/aapt/Main.cpp
@@ -211,7 +211,9 @@ void usage(void)
" specified folder.\n"
" --ignore-assets\n"
" Assets to be ignored. Default pattern is:\n"
- " %s\n",
+ " %s\n"
+ " --no-version-vectors\n"
+ " Do not automatically generate versioned copies of vector XML resources.\n",
gDefaultIgnoreAssets);
}
@@ -673,6 +675,8 @@ int main(int argc, char* const argv[])
gUserIgnoreAssets = argv[0];
} else if (strcmp(cp, "-pseudo-localize") == 0) {
bundle.setPseudolocalize(PSEUDO_ACCENTED | PSEUDO_BIDI);
+ } else if (strcmp(cp, "-no-version-vectors") == 0) {
+ bundle.setNoVersionVectors(true);
} else {
fprintf(stderr, "ERROR: Unknown option '-%s'\n", cp);
wantUsage = true;
diff --git a/tools/aapt/ResourceTable.cpp b/tools/aapt/ResourceTable.cpp
index c5fccbf..3b146da 100644
--- a/tools/aapt/ResourceTable.cpp
+++ b/tools/aapt/ResourceTable.cpp
@@ -4611,6 +4611,9 @@ status_t ResourceTable::modifyForCompat(const Bundle* bundle,
const String16& resourceName,
const sp<AaptFile>& target,
const sp<XMLNode>& root) {
+ const String16 vector16("vector");
+ const String16 animatedVector16("animated-vector");
+
const int minSdk = getMinSdkVersion(bundle);
if (minSdk >= SDK_LOLLIPOP_MR1) {
// Lollipop MR1 and up handles public attributes differently, no
@@ -4620,8 +4623,8 @@ status_t ResourceTable::modifyForCompat(const Bundle* bundle,
const ConfigDescription config(target->getGroupEntry().toParams());
if (target->getResourceType() == "" || config.sdkVersion >= SDK_LOLLIPOP_MR1) {
- // Skip resources that have no type (AndroidManifest.xml) or are already version qualified with v21
- // or higher.
+ // Skip resources that have no type (AndroidManifest.xml) or are already version qualified
+ // with v21 or higher.
return NO_ERROR;
}
@@ -4635,6 +4638,12 @@ status_t ResourceTable::modifyForCompat(const Bundle* bundle,
sp<XMLNode> node = nodesToVisit.top();
nodesToVisit.pop();
+ if (bundle->getNoVersionVectors() && (node->getElementName() == vector16 ||
+ node->getElementName() == animatedVector16)) {
+ // We were told not to version vector tags, so skip the children here.
+ continue;
+ }
+
const Vector<XMLNode::attribute_entry>& attrs = node->getAttributes();
for (size_t i = 0; i < attrs.size(); i++) {
const XMLNode::attribute_entry& attr = attrs[i];