diff options
author | Vikas Pachdha <[email protected]> | 2017-08-18 08:22:34 +0200 |
---|---|---|
committer | Vikas Pachdha <[email protected]> | 2017-10-11 11:58:16 +0000 |
commit | ec4fe5f04f4c961615bb27fa4e7d9638a3c6c971 (patch) | |
tree | 7dcdd62848e7709bfc96dfb942cc71aaa13f86a5 /src/plugins/android/androidtoolmanager.cpp | |
parent | 240d310a81c2e644ae6f241e2738c17f5a80ef89 (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.cpp | 94 |
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 |