forked from qt-creator/qt-creator
Android: Enable Android build, platform and SDK tools parsing
Task-number: QTCREATORBUG-18978 Change-Id: I84d4ead3180ab818493aff9975a7a9b813fba8d0 Reviewed-by: BogDan Vatra <bogdan@kdab.com>
This commit is contained in:
@@ -145,13 +145,16 @@ class SdkManagerOutputParser
|
|||||||
public:
|
public:
|
||||||
enum MarkerTag
|
enum MarkerTag
|
||||||
{
|
{
|
||||||
None = 0x01,
|
None = 0x001,
|
||||||
InstalledPackagesMarker = 0x02,
|
InstalledPackagesMarker = 0x002,
|
||||||
AvailablePackagesMarkers = 0x04,
|
AvailablePackagesMarkers = 0x004,
|
||||||
AvailableUpdatesMarker = 0x08,
|
AvailableUpdatesMarker = 0x008,
|
||||||
EmptyMarker = 0x10,
|
EmptyMarker = 0x010,
|
||||||
PlatformMarker = 0x20,
|
PlatformMarker = 0x020,
|
||||||
SystemImageMarker = 0x40,
|
SystemImageMarker = 0x040,
|
||||||
|
BuildToolsMarker = 0x080,
|
||||||
|
SdkToolsMarker = 0x100,
|
||||||
|
PlatformToolsMarker = 0x200,
|
||||||
SectionMarkers = InstalledPackagesMarker | AvailablePackagesMarkers | AvailableUpdatesMarker
|
SectionMarkers = InstalledPackagesMarker | AvailablePackagesMarkers | AvailableUpdatesMarker
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -167,6 +170,9 @@ private:
|
|||||||
const QString &logStrTag, QStringList extraKeys = QStringList()) const;
|
const QString &logStrTag, QStringList extraKeys = QStringList()) const;
|
||||||
AndroidSdkPackage *parsePlatform(const QStringList &data) const;
|
AndroidSdkPackage *parsePlatform(const QStringList &data) const;
|
||||||
QPair<SystemImage *, int> parseSystemImage(const QStringList &data) const;
|
QPair<SystemImage *, int> parseSystemImage(const QStringList &data) const;
|
||||||
|
BuildTools *parseBuildToolsPackage(const QStringList &data) const;
|
||||||
|
SdkTools *parseSdkToolsPackage(const QStringList &data) const;
|
||||||
|
PlatformTools *parsePlatformToolsPackage(const QStringList &data) const;
|
||||||
MarkerTag parseMarkers(const QString &line);
|
MarkerTag parseMarkers(const QString &line);
|
||||||
|
|
||||||
MarkerTag m_currentSection = MarkerTag::None;
|
MarkerTag m_currentSection = MarkerTag::None;
|
||||||
@@ -174,11 +180,14 @@ private:
|
|||||||
};
|
};
|
||||||
|
|
||||||
const std::map<SdkManagerOutputParser::MarkerTag, const char *> markerTags {
|
const std::map<SdkManagerOutputParser::MarkerTag, const char *> markerTags {
|
||||||
{SdkManagerOutputParser::MarkerTag::InstalledPackagesMarker, "Installed packages:"},
|
{SdkManagerOutputParser::MarkerTag::InstalledPackagesMarker, "Installed packages:"},
|
||||||
{SdkManagerOutputParser::MarkerTag::AvailablePackagesMarkers, "Available Packages:"},
|
{SdkManagerOutputParser::MarkerTag::AvailablePackagesMarkers, "Available Packages:"},
|
||||||
{SdkManagerOutputParser::MarkerTag::AvailablePackagesMarkers, "Available Updates:"},
|
{SdkManagerOutputParser::MarkerTag::AvailablePackagesMarkers, "Available Updates:"},
|
||||||
{SdkManagerOutputParser::MarkerTag::PlatformMarker, "platforms"},
|
{SdkManagerOutputParser::MarkerTag::PlatformMarker, "platforms"},
|
||||||
{SdkManagerOutputParser::MarkerTag::SystemImageMarker, "system-images"}
|
{SdkManagerOutputParser::MarkerTag::SystemImageMarker, "system-images"},
|
||||||
|
{SdkManagerOutputParser::MarkerTag::BuildToolsMarker, "build-tools"},
|
||||||
|
{SdkManagerOutputParser::MarkerTag::SdkToolsMarker, "tools"},
|
||||||
|
{SdkManagerOutputParser::MarkerTag::PlatformToolsMarker, "platform-tools"}
|
||||||
};
|
};
|
||||||
|
|
||||||
AndroidSdkManager::AndroidSdkManager(const AndroidConfig &config, QObject *parent):
|
AndroidSdkManager::AndroidSdkManager(const AndroidConfig &config, QObject *parent):
|
||||||
@@ -358,6 +367,18 @@ void SdkManagerOutputParser::parsePackageData(MarkerTag packageMarker, const QSt
|
|||||||
};
|
};
|
||||||
|
|
||||||
switch (packageMarker) {
|
switch (packageMarker) {
|
||||||
|
case MarkerTag::BuildToolsMarker:
|
||||||
|
createPackage(&SdkManagerOutputParser::parseBuildToolsPackage);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MarkerTag::SdkToolsMarker:
|
||||||
|
createPackage(&SdkManagerOutputParser::parseSdkToolsPackage);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MarkerTag::PlatformToolsMarker:
|
||||||
|
createPackage(&SdkManagerOutputParser::parsePlatformToolsPackage);
|
||||||
|
break;
|
||||||
|
|
||||||
case MarkerTag::PlatformMarker:
|
case MarkerTag::PlatformMarker:
|
||||||
createPackage(&SdkManagerOutputParser::parsePlatform);
|
createPackage(&SdkManagerOutputParser::parsePlatform);
|
||||||
break;
|
break;
|
||||||
@@ -472,6 +493,54 @@ QPair<SystemImage *, int> SdkManagerOutputParser::parseSystemImage(const QString
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BuildTools *SdkManagerOutputParser::parseBuildToolsPackage(const QStringList &data) const
|
||||||
|
{
|
||||||
|
BuildTools *buildTools = nullptr;
|
||||||
|
GenericPackageData packageData;
|
||||||
|
if (parseAbstractData(packageData, data, 2, "Build-tools")) {
|
||||||
|
buildTools = new BuildTools(packageData.revision, data.at(0));
|
||||||
|
buildTools->setDescriptionText(packageData.description);
|
||||||
|
buildTools->setDisplayText(packageData.description);
|
||||||
|
buildTools->setInstalledLocation(packageData.installedLocation);
|
||||||
|
} else {
|
||||||
|
qCDebug(sdkManagerLog) << "Build-tools: Parsing failed. Minimum required data unavailable:"
|
||||||
|
<< data;
|
||||||
|
}
|
||||||
|
return buildTools;
|
||||||
|
}
|
||||||
|
|
||||||
|
SdkTools *SdkManagerOutputParser::parseSdkToolsPackage(const QStringList &data) const
|
||||||
|
{
|
||||||
|
SdkTools *sdkTools = nullptr;
|
||||||
|
GenericPackageData packageData;
|
||||||
|
if (parseAbstractData(packageData, data, 1, "SDK-tools")) {
|
||||||
|
sdkTools = new SdkTools(packageData.revision, data.at(0));
|
||||||
|
sdkTools->setDescriptionText(packageData.description);
|
||||||
|
sdkTools->setDisplayText(packageData.description);
|
||||||
|
sdkTools->setInstalledLocation(packageData.installedLocation);
|
||||||
|
} else {
|
||||||
|
qCDebug(sdkManagerLog) << "SDK-tools: Parsing failed. Minimum required data unavailable:"
|
||||||
|
<< data;
|
||||||
|
}
|
||||||
|
return sdkTools;
|
||||||
|
}
|
||||||
|
|
||||||
|
PlatformTools *SdkManagerOutputParser::parsePlatformToolsPackage(const QStringList &data) const
|
||||||
|
{
|
||||||
|
PlatformTools *platformTools = nullptr;
|
||||||
|
GenericPackageData packageData;
|
||||||
|
if (parseAbstractData(packageData, data, 1, "Platform-tools")) {
|
||||||
|
platformTools = new PlatformTools(packageData.revision, data.at(0));
|
||||||
|
platformTools->setDescriptionText(packageData.description);
|
||||||
|
platformTools->setDisplayText(packageData.description);
|
||||||
|
platformTools->setInstalledLocation(packageData.installedLocation);
|
||||||
|
} else {
|
||||||
|
qCDebug(sdkManagerLog) << "Platform-tools: Parsing failed. Minimum required data "
|
||||||
|
"unavailable:" << data;
|
||||||
|
}
|
||||||
|
return platformTools;
|
||||||
|
}
|
||||||
|
|
||||||
SdkManagerOutputParser::MarkerTag SdkManagerOutputParser::parseMarkers(const QString &line)
|
SdkManagerOutputParser::MarkerTag SdkManagerOutputParser::parseMarkers(const QString &line)
|
||||||
{
|
{
|
||||||
if (line.isEmpty())
|
if (line.isEmpty())
|
||||||
|
|||||||
@@ -194,4 +194,51 @@ SystemImageList SdkPlatform::systemImages(PackageState state) const
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BuildTools::BuildTools(QVersionNumber revision, QString sdkStylePathStr, QObject *parent):
|
||||||
|
AndroidSdkPackage(revision, sdkStylePathStr, parent)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
bool BuildTools::isValid() const
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
AndroidSdkPackage::PackageType BuildTools::type() const
|
||||||
|
{
|
||||||
|
return AndroidSdkPackage::BuildToolsPackage;
|
||||||
|
}
|
||||||
|
|
||||||
|
SdkTools::SdkTools(QVersionNumber revision, QString sdkStylePathStr, QObject *parent):
|
||||||
|
AndroidSdkPackage(revision, sdkStylePathStr, parent)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
bool SdkTools::isValid() const
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
AndroidSdkPackage::PackageType SdkTools::type() const
|
||||||
|
{
|
||||||
|
return AndroidSdkPackage::SdkToolsPackage;
|
||||||
|
}
|
||||||
|
|
||||||
|
PlatformTools::PlatformTools(QVersionNumber revision, QString sdkStylePathStr, QObject *parent):
|
||||||
|
AndroidSdkPackage(revision, sdkStylePathStr, parent)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
bool PlatformTools::isValid() const
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
AndroidSdkPackage::PackageType PlatformTools::type() const
|
||||||
|
{
|
||||||
|
return AndroidSdkPackage::PlatformToolsPackage;
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace Android
|
} // namespace Android
|
||||||
|
|||||||
@@ -146,6 +146,39 @@ private:
|
|||||||
QVersionNumber m_version;
|
QVersionNumber m_version;
|
||||||
};
|
};
|
||||||
using SdkPlatformList = QList<SdkPlatform*>;
|
using SdkPlatformList = QList<SdkPlatform*>;
|
||||||
|
|
||||||
|
class BuildTools : public AndroidSdkPackage
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
BuildTools(QVersionNumber revision, QString sdkStylePathStr, QObject *parent = nullptr);
|
||||||
|
|
||||||
|
// AndroidSdkPackage Overrides
|
||||||
|
public:
|
||||||
|
bool isValid() const override;
|
||||||
|
PackageType type() const override;
|
||||||
|
};
|
||||||
|
|
||||||
|
class PlatformTools : public AndroidSdkPackage
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
PlatformTools(QVersionNumber revision, QString sdkStylePathStr, QObject *parent = nullptr);
|
||||||
|
|
||||||
|
// AndroidSdkPackage Overrides
|
||||||
|
public:
|
||||||
|
bool isValid() const override;
|
||||||
|
PackageType type() const override;
|
||||||
|
};
|
||||||
|
|
||||||
|
class SdkTools : public AndroidSdkPackage
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
SdkTools(QVersionNumber revision, QString sdkStylePathStr, QObject *parent = nullptr);
|
||||||
|
|
||||||
|
// AndroidSdkPackage Overrides
|
||||||
|
public:
|
||||||
|
bool isValid() const override;
|
||||||
|
PackageType type() const override;
|
||||||
|
};
|
||||||
} // namespace Android
|
} // namespace Android
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user