AAPT2: Add Manifest fixing/validation

Change-Id: I7f6d8b74d1c590adc356b4da55cb6cb777cdf1da
This commit is contained in:
Adam Lesinski
2015-11-02 16:10:55 -08:00
parent 3b4cd94034
commit 2ae4a877d1
13 changed files with 373 additions and 300 deletions

View File

@ -25,8 +25,6 @@
namespace aapt {
constexpr const char16_t* kSchemaAndroid = u"http://schemas.android.com/apk/res/android";
static Maybe<StringPiece16> extractJavaIdentifier(IDiagnostics* diag, const Source& source,
const StringPiece16& value) {
const StringPiece16 sep = u".";
@ -62,7 +60,7 @@ static Maybe<StringPiece16> extractJavaIdentifier(IDiagnostics* diag, const Sour
static bool writeSymbol(IDiagnostics* diag, const Source& source, xml::Element* el,
std::ostream* out) {
xml::Attribute* attr = el->findAttribute(kSchemaAndroid, u"name");
xml::Attribute* attr = el->findAttribute(xml::kSchemaAndroid, u"name");
if (!attr) {
diag->error(DiagMessage(source) << "<" << el->name << "> must define 'android:name'");
return false;

View File

@ -25,8 +25,6 @@
namespace aapt {
namespace proguard {
constexpr const char16_t* kSchemaAndroid = u"http://schemas.android.com/apk/res/android";
class BaseVisitor : public xml::Visitor {
public:
BaseVisitor(const Source& source, KeepSet* keepSet) : mSource(source), mKeepSet(keepSet) {
@ -83,7 +81,7 @@ struct LayoutVisitor : public BaseVisitor {
bool checkName = false;
if (node->namespaceUri.empty()) {
checkClass = node->name == u"view" || node->name == u"fragment";
} else if (node->namespaceUri == kSchemaAndroid) {
} else if (node->namespaceUri == xml::kSchemaAndroid) {
checkName = node->name == u"fragment";
}
@ -91,10 +89,10 @@ struct LayoutVisitor : public BaseVisitor {
if (checkClass && attr.namespaceUri.empty() && attr.name == u"class" &&
util::isJavaClassName(attr.value)) {
addClass(node->lineNumber, attr.value);
} else if (checkName && attr.namespaceUri == kSchemaAndroid && attr.name == u"name" &&
util::isJavaClassName(attr.value)) {
} else if (checkName && attr.namespaceUri == xml::kSchemaAndroid &&
attr.name == u"name" && util::isJavaClassName(attr.value)) {
addClass(node->lineNumber, attr.value);
} else if (attr.namespaceUri == kSchemaAndroid && attr.name == u"onClick") {
} else if (attr.namespaceUri == xml::kSchemaAndroid && attr.name == u"onClick") {
addMethod(node->lineNumber, attr.value);
}
}
@ -114,7 +112,7 @@ struct XmlResourceVisitor : public BaseVisitor {
}
if (checkFragment) {
xml::Attribute* attr = node->findAttribute(kSchemaAndroid, u"fragment");
xml::Attribute* attr = node->findAttribute(xml::kSchemaAndroid, u"fragment");
if (attr && util::isJavaClassName(attr->value)) {
addClass(node->lineNumber, attr->value);
}
@ -156,7 +154,7 @@ struct ManifestVisitor : public BaseVisitor {
}
} else if (node->name == u"application") {
getName = true;
xml::Attribute* attr = node->findAttribute(kSchemaAndroid, u"backupAgent");
xml::Attribute* attr = node->findAttribute(xml::kSchemaAndroid, u"backupAgent");
if (attr) {
Maybe<std::u16string> result = util::getFullyQualifiedClassName(mPackage,
attr->value);
@ -171,7 +169,7 @@ struct ManifestVisitor : public BaseVisitor {
}
if (getName) {
xml::Attribute* attr = node->findAttribute(kSchemaAndroid, u"name");
xml::Attribute* attr = node->findAttribute(xml::kSchemaAndroid, u"name");
if (attr) {
Maybe<std::u16string> result = util::getFullyQualifiedClassName(mPackage,
attr->value);