diff options
author | Jake Petroules <jake.petroules@qt.io> | 2017-11-29 19:39:51 -0800 |
---|---|---|
committer | Jake Petroules <jake.petroules@qt.io> | 2017-11-30 15:33:40 +0000 |
commit | ed6d7def8f226593533a494ea5a4ef618fa20aec (patch) | |
tree | 55c19bb9ec04a43540d9b2b0ad430d182f7b0650 /src/lib/corelib/api/runenvironment.cpp | |
parent | 6fd43ee022e600731baa6f03388ce086891e608f (diff) |
Remove dependency on QtXml in RunEnvironment
The strings returned by aapt dump badging are not technically XML,
and the more strict QXmlStreamReader can't parse them anyways.
Change-Id: I05b53989f18c89567af1912ee210873dcbe461c9
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
Diffstat (limited to 'src/lib/corelib/api/runenvironment.cpp')
-rw-r--r-- | src/lib/corelib/api/runenvironment.cpp | 25 |
1 files changed, 14 insertions, 11 deletions
diff --git a/src/lib/corelib/api/runenvironment.cpp b/src/lib/corelib/api/runenvironment.cpp index 43aa78395..36d953572 100644 --- a/src/lib/corelib/api/runenvironment.cpp +++ b/src/lib/corelib/api/runenvironment.cpp @@ -62,8 +62,7 @@ #include <QtCore/qtemporaryfile.h> #include <QtCore/qvariant.h> -#include <QtXml/qdom.h> - +#include <regex> #include <stdlib.h> namespace qbs { @@ -232,6 +231,15 @@ static QString findExecutable(const QStringList &fileNames) return QString(); } +static std::string readAaptBadgingAttribute(const std::string &line) +{ + std::regex re("^[A-Za-z\\-]+:\\s+name='(.+?)'.*$"); + std::smatch match; + if (std::regex_match(line, match, re)) + return match[1]; + return { }; +} + static QString findMainIntent(const QString &aapt, const QString &apkFilePath) { QString packageId; @@ -243,15 +251,10 @@ static QString findMainIntent(const QString &aapt, const QString &apkFilePath) << apkFilePath); if (aaptProcess.waitForFinished(-1)) { for (auto line : aaptProcess.readAllStandardOutput().split('\n')) { - if (line.startsWith(QByteArrayLiteral("package:"))) { - QDomDocument doc; - doc.setContent(QByteArrayLiteral("<") + line + QByteArrayLiteral("/>")); - packageId = doc.firstChild().toElement().attribute(StringConstants::nameProperty()); - } else if (line.startsWith(QByteArrayLiteral("launchable-activity:"))) { - QDomDocument doc; - doc.setContent(QByteArrayLiteral("<") + line + QByteArrayLiteral("/>")); - activity = doc.firstChild().toElement().attribute(StringConstants::nameProperty()); - } + if (line.startsWith(QByteArrayLiteral("package:"))) + packageId = QString::fromStdString(readAaptBadgingAttribute(line.toStdString())); + else if (line.startsWith(QByteArrayLiteral("launchable-activity:"))) + activity = QString::fromStdString(readAaptBadgingAttribute(line.toStdString())); } } |