aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/android/androidtoolmanager.cpp
diff options
context:
space:
mode:
authorVikas Pachdha <[email protected]>2017-08-18 08:22:34 +0200
committerVikas Pachdha <[email protected]>2017-10-11 11:58:16 +0000
commitec4fe5f04f4c961615bb27fa4e7d9638a3c6c971 (patch)
tree7dcdd62848e7709bfc96dfb942cc71aaa13f86a5 /src/plugins/android/androidtoolmanager.cpp
parent240d310a81c2e644ae6f241e2738c17f5a80ef89 (diff)
Android: Refactor Android SDK packages
Introduce a hierarchy for Android SDK packages and refactor the code accordingly. This is ground work for sdk management and automatic android setup Task-number: QTCREATORBUG-18978 Change-Id: Idef545e3b3a8e33e920be52b26094fb8046afcd3 Reviewed-by: BogDan Vatra <[email protected]>
Diffstat (limited to 'src/plugins/android/androidtoolmanager.cpp')
-rw-r--r--src/plugins/android/androidtoolmanager.cpp94
1 files changed, 52 insertions, 42 deletions
diff --git a/src/plugins/android/androidtoolmanager.cpp b/src/plugins/android/androidtoolmanager.cpp
index 39fa2a2c426..fc214ab1139 100644
--- a/src/plugins/android/androidtoolmanager.cpp
+++ b/src/plugins/android/androidtoolmanager.cpp
@@ -47,7 +47,7 @@ class AndroidToolOutputParser
{
public:
void parseTargetListing(const QString &output, const FileName &sdkLocation,
- SdkPlatformList *platformList);
+ SdkPlatformList &platformList);
QList<SdkPlatform> m_installedPlatforms;
};
@@ -104,7 +104,7 @@ SdkPlatformList AndroidToolManager::availableSdkPlatforms(bool *ok) const
QString targetListing;
if (androidToolCommand(m_config.androidToolPath(), QStringList({"list", "target"}),
androidToolEnvironment(), &targetListing)) {
- m_parser->parseTargetListing(targetListing, m_config.sdkLocation(), &list);
+ m_parser->parseTargetListing(targetListing, m_config.sdkLocation(), list);
success = true;
} else {
qCDebug(androidToolLog) << "Android tool target listing failed";
@@ -121,8 +121,7 @@ void AndroidToolManager::launchAvdManager() const
QProcess::startDetached(m_config.androidToolPath().toString(), QStringList("avd"));
}
-QFuture<AndroidConfig::CreateAvdInfo>
-AndroidToolManager::createAvd(AndroidConfig::CreateAvdInfo info) const
+QFuture<CreateAvdInfo> AndroidToolManager::createAvd(CreateAvdInfo info) const
{
return Utils::runAsync(&AndroidToolManager::createAvdImpl, info,
m_config.androidToolPath(), androidToolEnvironment());
@@ -159,15 +158,14 @@ Environment AndroidToolManager::androidToolEnvironment() const
return env;
}
-AndroidConfig::CreateAvdInfo AndroidToolManager::createAvdImpl(AndroidConfig::CreateAvdInfo info,
- FileName androidToolPath,
- Environment env)
+CreateAvdInfo AndroidToolManager::createAvdImpl(CreateAvdInfo info, FileName androidToolPath,
+ Environment env)
{
QProcess proc;
proc.setProcessEnvironment(env.toProcessEnvironment());
QStringList arguments;
arguments << QLatin1String("create") << QLatin1String("avd")
- << QLatin1String("-t") << AndroidConfig::apiLevelNameFor(info.target)
+ << QLatin1String("-t") << AndroidConfig::apiLevelNameFor(info.sdkPlatform)
<< QLatin1String("-n") << info.name
<< QLatin1String("-b") << info.abi;
if (info.sdcardSize > 0)
@@ -293,24 +291,36 @@ AndroidDeviceInfoList AndroidToolManager::androidVirtualDevices(const Utils::Fil
void AndroidToolOutputParser::parseTargetListing(const QString &output,
const Utils::FileName &sdkLocation,
- SdkPlatformList *platformList)
+ SdkPlatformList &platformList)
{
- if (!platformList)
- return;
-
- auto addSystemImage = [](const QStringList& abiList, SdkPlatform &platform) {
+ auto addSystemImage = [](const QStringList& abiList, SdkPlatform *platform) {
+ QTC_ASSERT(platform, return);
foreach (auto imageAbi, abiList) {
- SystemImage image;
- image.abiName = imageAbi;
- image.apiLevel = platform.apiLevel;
- platform.systemImages.append(image);
+ auto image = new SystemImage(QVersionNumber(), "", imageAbi, platform);
+ platform->addSystemImage(image);
}
};
- SdkPlatform platform;
- QStringList abiList;
- foreach (const QString &l, output.split('\n')) {
- const QString line = l.trimmed();
+ class {
+ public:
+ QStringList abiList;
+ QVersionNumber revision;
+ int apiLevel = -1;
+ QString description;
+ Utils::FileName installedLocation;
+
+ void clear() {
+ abiList.clear();
+ revision = QVersionNumber();
+ apiLevel = -1;
+ description.clear();
+ installedLocation.clear();
+ }
+ } platformParams;
+
+ QStringList outputLines = output.split('\n');
+ for (int index = 0; index < outputLines.count(); ++index) {
+ const QString line = outputLines.at(index).trimmed();
if (line.startsWith(QLatin1String("id:")) && line.contains(QLatin1String("android-"))) {
int index = line.indexOf(QLatin1String("\"android-"));
if (index == -1)
@@ -319,33 +329,33 @@ void AndroidToolOutputParser::parseTargetListing(const QString &output,
const QString tmp = androidTarget.mid(androidTarget.lastIndexOf(QLatin1Char('-')) + 1);
Utils::FileName platformPath = sdkLocation;
platformPath.appendPath(QString("/platforms/android-%1").arg(tmp));
- platform.installedLocation = platformPath;
- platform.apiLevel = AndroidManager::findApiLevel(platformPath);
+ platformParams.installedLocation = platformPath;
+ platformParams.apiLevel = AndroidManager::findApiLevel(platformPath);
} else if (line.startsWith(QLatin1String("Name:"))) {
- platform.name = line.mid(6);
+ platformParams.description = line.mid(6);
+ } else if (line.startsWith(QLatin1String("Revision:"))) {
+ platformParams.revision = QVersionNumber::fromString(line.mid(10));
} else if (line.startsWith(QLatin1String("Tag/ABIs :"))) {
- abiList = cleanAndroidABIs(line.mid(10).trimmed().split(QLatin1String(", ")));
+ platformParams.abiList = cleanAndroidABIs(line.mid(10).trimmed().split(QLatin1String(", ")));
} else if (line.startsWith(QLatin1String("ABIs"))) {
- abiList = cleanAndroidABIs(line.mid(6).trimmed().split(QLatin1String(", ")));
- } else if (line.startsWith(QLatin1String("---")) || line.startsWith(QLatin1String("==="))) {
- if (platform.apiLevel == -1)
+ platformParams.abiList = cleanAndroidABIs(line.mid(6).trimmed().split(QLatin1String(", ")));
+ } else if (line.startsWith(QLatin1String("---"))
+ || line.startsWith(QLatin1String("==="))
+ || index == outputLines.count() - 1) {
+ if (platformParams.apiLevel == -1)
continue;
-
- addSystemImage(abiList, platform);
- *platformList << platform;
-
- platform = SdkPlatform();
- abiList.clear();
+ auto platform = new SdkPlatform(platformParams.revision,
+ QString("platforms;android-%1").arg(platformParams.apiLevel),
+ platformParams.apiLevel);
+ platform->setState(AndroidSdkPackage::Installed);
+ platform->setDescriptionText(platformParams.description);
+ platform->setInstalledLocation(platformParams.installedLocation);
+ addSystemImage(platformParams.abiList, platform);
+ platformList << platform;
+ platformParams.clear();
}
}
-
- // The last parsed Platform.
- if (platform.apiLevel != -1) {
- addSystemImage(abiList, platform);
- *platformList << platform;
- }
-
- Utils::sort(*platformList);
+ Utils::sort(platformList);
}
} // namespace Internal