From 0cfb9e2bcebcb96b51c77624a03a0629903ec5b9 Mon Sep 17 00:00:00 2001 From: Assam Boudjelthia Date: Tue, 30 Jun 2020 09:50:28 +0300 Subject: Android: remove old android tool Follows af7c218d95d670080893356af7a42c672f1de1a9, the old android tool is not useful anymore. Change-Id: I126ecc24622f2e90465440c86b84cdfb30c103e1 Reviewed-by: Alessandro Portale --- src/plugins/android/CMakeLists.txt | 1 - src/plugins/android/android.pro | 2 - src/plugins/android/android.qbs | 2 - src/plugins/android/androidavdmanager.cpp | 3 - src/plugins/android/androidavdmanager.h | 2 - src/plugins/android/androidconfigurations.cpp | 1 - src/plugins/android/androidsdkmanager.cpp | 30 +-- src/plugins/android/androidtoolmanager.cpp | 339 -------------------------- src/plugins/android/androidtoolmanager.h | 71 ------ 9 files changed, 8 insertions(+), 443 deletions(-) delete mode 100644 src/plugins/android/androidtoolmanager.cpp delete mode 100644 src/plugins/android/androidtoolmanager.h (limited to 'src/plugins/android') diff --git a/src/plugins/android/CMakeLists.txt b/src/plugins/android/CMakeLists.txt index 563732fbd4..e7bdfea6bc 100644 --- a/src/plugins/android/CMakeLists.txt +++ b/src/plugins/android/CMakeLists.txt @@ -44,7 +44,6 @@ add_qtc_plugin(Android androidsettingswidget.cpp androidsettingswidget.h androidsettingswidget.ui androidsignaloperation.cpp androidsignaloperation.h androidtoolchain.cpp androidtoolchain.h - androidtoolmanager.cpp androidtoolmanager.h avddialog.cpp avddialog.h certificatesmodel.cpp certificatesmodel.h createandroidmanifestwizard.cpp createandroidmanifestwizard.h diff --git a/src/plugins/android/android.pro b/src/plugins/android/android.pro index bdf7efb38f..f5c5f981f8 100644 --- a/src/plugins/android/android.pro +++ b/src/plugins/android/android.pro @@ -43,7 +43,6 @@ HEADERS += \ android_global.h \ androidbuildapkstep.h \ androidbuildapkwidget.h \ - androidtoolmanager.h \ androidsdkmanager.h \ androidavdmanager.h \ adbcommandswidget.h \ @@ -90,7 +89,6 @@ SOURCES += \ avddialog.cpp \ androidbuildapkstep.cpp \ androidbuildapkwidget.cpp \ - androidtoolmanager.cpp \ androidsdkmanager.cpp \ androidavdmanager.cpp \ adbcommandswidget.cpp \ diff --git a/src/plugins/android/android.qbs b/src/plugins/android/android.qbs index 026cc30324..1f89461102 100644 --- a/src/plugins/android/android.qbs +++ b/src/plugins/android/android.qbs @@ -103,8 +103,6 @@ Project { "androidsignaloperation.h", "androidtoolchain.cpp", "androidtoolchain.h", - "androidtoolmanager.cpp", - "androidtoolmanager.h", "avddialog.cpp", "avddialog.h", "certificatesmodel.cpp", diff --git a/src/plugins/android/androidavdmanager.cpp b/src/plugins/android/androidavdmanager.cpp index d396aceed7..7ae088b496 100644 --- a/src/plugins/android/androidavdmanager.cpp +++ b/src/plugins/android/androidavdmanager.cpp @@ -24,8 +24,6 @@ ****************************************************************************/ #include "androidavdmanager.h" -#include "androidtoolmanager.h" - #include #include #include @@ -222,7 +220,6 @@ private: AndroidAvdManager::AndroidAvdManager(const AndroidConfig &config): m_config(config), - m_androidTool(new AndroidToolManager(m_config)), m_parser(new AvdManagerOutputParser) { diff --git a/src/plugins/android/androidavdmanager.h b/src/plugins/android/androidavdmanager.h index 5f6ea967a6..667301a58d 100644 --- a/src/plugins/android/androidavdmanager.h +++ b/src/plugins/android/androidavdmanager.h @@ -32,7 +32,6 @@ namespace Android { namespace Internal { -class AndroidToolManager; class AvdManagerOutputParser; class AndroidAvdManager @@ -63,7 +62,6 @@ private: private: const AndroidConfig &m_config; - std::unique_ptr m_androidTool; std::unique_ptr m_parser; }; diff --git a/src/plugins/android/androidconfigurations.cpp b/src/plugins/android/androidconfigurations.cpp index 8c759905d0..00cd6fabf5 100644 --- a/src/plugins/android/androidconfigurations.cpp +++ b/src/plugins/android/androidconfigurations.cpp @@ -31,7 +31,6 @@ #include "androidqtversion.h" #include "androiddevicedialog.h" #include "androidsdkmanager.h" -#include "androidtoolmanager.h" #include "avddialog.h" #include diff --git a/src/plugins/android/androidsdkmanager.cpp b/src/plugins/android/androidsdkmanager.cpp index e5df4a2d82..06101e6387 100644 --- a/src/plugins/android/androidsdkmanager.cpp +++ b/src/plugins/android/androidsdkmanager.cpp @@ -25,9 +25,9 @@ #include "androidsdkmanager.h" +#include "androidconfigurations.h" #include "androidconstants.h" #include "androidmanager.h" -#include "androidtoolmanager.h" #include #include @@ -49,10 +49,6 @@ static Q_LOGGING_CATEGORY(sdkManagerLog, "qtc.android.sdkManager", QtWarningMsg) namespace Android { namespace Internal { -// Though sdk manager is introduced in 25.2.3 but the verbose mode is avaialble in 25.3.0 -// and android tool is supported in 25.2.3 -const QVersionNumber sdkManagerIntroVersion(25, 3 ,0); - const char installLocationKey[] = "Installed Location:"; const char revisionKey[] = "Version:"; const char descriptionKey[] = "Description:"; @@ -916,23 +912,13 @@ void AndroidSdkManagerPrivate::reloadSdkPackages() return; } - if (m_config.sdkToolsVersion() < sdkManagerIntroVersion && !m_config.isCmdlineSdkToolsInstalled()) { - // Old Sdk tools. - m_packageListingSuccessful = true; - AndroidToolManager toolManager(m_config); - auto toAndroidSdkPackages = [](SdkPlatform *p) -> AndroidSdkPackage *{ - return p; - }; - m_allPackages = Utils::transform(toolManager.availableSdkPlatforms(), toAndroidSdkPackages); - } else { - QString packageListing; - QStringList args({"--list", "--verbose"}); - args << m_config.sdkManagerToolArgs(); - m_packageListingSuccessful = sdkManagerCommand(m_config, args, &packageListing); - if (m_packageListingSuccessful) { - SdkManagerOutputParser parser(m_allPackages); - parser.parsePackageListing(packageListing); - } + QString packageListing; + QStringList args({"--list", "--verbose"}); + args << m_config.sdkManagerToolArgs(); + m_packageListingSuccessful = sdkManagerCommand(m_config, args, &packageListing); + if (m_packageListingSuccessful) { + SdkManagerOutputParser parser(m_allPackages); + parser.parsePackageListing(packageListing); } emit m_sdkManager.packageReloadFinished(); } diff --git a/src/plugins/android/androidtoolmanager.cpp b/src/plugins/android/androidtoolmanager.cpp deleted file mode 100644 index 4fefc5dbcf..0000000000 --- a/src/plugins/android/androidtoolmanager.cpp +++ /dev/null @@ -1,339 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of Qt Creator. -** -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -****************************************************************************/ -#include "androidtoolmanager.h" - -#include "androidmanager.h" - -#include -#include -#include -#include -#include - -#include - -namespace { -static Q_LOGGING_CATEGORY(androidToolLog, "qtc.android.sdkManager", QtWarningMsg) -} - -namespace Android { -namespace Internal { - -using namespace Utils; - -class AndroidToolOutputParser -{ -public: - void parseTargetListing(const QString &output, const FilePath &sdkLocation, - SdkPlatformList &platformList); - - QList m_installedPlatforms; -}; - -/*! - Runs the \c android tool located at \a toolPath with arguments \a args and environment \a - environment. Returns \c true for successful execution. Command's output is copied to \a - output. - */ -static bool androidToolCommand(Utils::FilePath toolPath, const QStringList &args, - const QProcessEnvironment &environment, QString *output) -{ - SynchronousProcess proc; - proc.setProcessEnvironment(environment); - SynchronousProcessResponse response = proc.runBlocking({toolPath, args}); - if (response.result == SynchronousProcessResponse::Finished) { - if (output) - *output = response.allOutput(); - return true; - } - return false; -} - -static QStringList cleanAndroidABIs(const QStringList &abis) -{ - QStringList res; - foreach (const QString &abi, abis) { - int index = abi.lastIndexOf(QLatin1Char('/')); - if (index == -1) - res << abi; - else - res << abi.mid(index + 1); - } - return res; -} - -AndroidToolManager::AndroidToolManager(const AndroidConfig &config) : - m_config(config), - m_parser(new AndroidToolOutputParser) -{ - -} - -AndroidToolManager::~AndroidToolManager() = default; - -SdkPlatformList AndroidToolManager::availableSdkPlatforms(bool *ok) const -{ - bool success = false; - SdkPlatformList list; - QString targetListing; - if (androidToolCommand(m_config.androidToolPath(), QStringList({"list", "target"}), - AndroidConfigurations::toolsEnvironment(m_config), &targetListing)) { - m_parser->parseTargetListing(targetListing, m_config.sdkLocation(), list); - success = true; - } else { - qCDebug(androidToolLog) << "Android tool target listing failed"; - } - - if (ok) - *ok = success; - - return list; -} - -QFuture AndroidToolManager::createAvd(CreateAvdInfo info) const -{ - return Utils::runAsync(&AndroidToolManager::createAvdImpl, info, - m_config.androidToolPath(), - AndroidConfigurations::toolsEnvironment(m_config)); -} - -bool AndroidToolManager::removeAvd(const QString &name) const -{ - SynchronousProcess proc; - proc.setTimeoutS(5); - proc.setProcessEnvironment(AndroidConfigurations::toolsEnvironment(m_config)); - SynchronousProcessResponse response - = proc.runBlocking({m_config.androidToolPath(), {"delete", "avd", "-n", name}}); - return response.result == SynchronousProcessResponse::Finished && response.exitCode == 0; -} - -QFuture AndroidToolManager::androidVirtualDevicesFuture() const -{ - return Utils::runAsync(&AndroidToolManager::androidVirtualDevices, - m_config.androidToolPath(), m_config.sdkLocation(), - AndroidConfigurations::toolsEnvironment(m_config)); -} - -CreateAvdInfo AndroidToolManager::createAvdImpl(CreateAvdInfo info, FilePath androidToolPath, - QProcessEnvironment env) -{ - QProcess proc; - proc.setProcessEnvironment(env); - QStringList arguments; - arguments << QLatin1String("create") << QLatin1String("avd") - << QLatin1String("-t") << QString("android-%1").arg(info.systemImage->apiLevel()) - << QLatin1String("-n") << info.name - << QLatin1String("-b") << info.abi; - if (info.sdcardSize > 0) - arguments << QLatin1String("-c") << QString::fromLatin1("%1M").arg(info.sdcardSize); - proc.start(androidToolPath.toString(), arguments); - if (!proc.waitForStarted()) { - info.error = tr("Could not start process \"%1 %2\"") - .arg(androidToolPath.toString(), arguments.join(QLatin1Char(' '))); - return info; - } - QTC_CHECK(proc.state() == QProcess::Running); - proc.write(QByteArray("yes\n")); // yes to "Do you wish to create a custom hardware profile" - - QByteArray question; - while (true) { - proc.waitForReadyRead(500); - question += proc.readAllStandardOutput(); - if (question.endsWith(QByteArray("]:"))) { - // truncate to last line - int index = question.lastIndexOf(QByteArray("\n")); - if (index != -1) - question = question.mid(index); - if (question.contains("hw.gpu.enabled")) - proc.write(QByteArray("yes\n")); - else - proc.write(QByteArray("\n")); - question.clear(); - } - - if (proc.state() != QProcess::Running) - break; - } - QTC_CHECK(proc.state() == QProcess::NotRunning); - - QString errorOutput = QString::fromLocal8Bit(proc.readAllStandardError()); - // The exit code is always 0, so we need to check stderr - // For now assume that any output at all indicates a error - if (!errorOutput.isEmpty()) { - info.error = errorOutput; - } - - return info; -} - -AndroidDeviceInfoList AndroidToolManager::androidVirtualDevices(const Utils::FilePath &androidTool, - const FilePath &sdkLocationPath, - const QProcessEnvironment &env) -{ - AndroidDeviceInfoList devices; - QString output; - if (!androidToolCommand(androidTool, QStringList({"list", "avd"}), env, &output)) - return devices; - - QStringList avds = output.split('\n'); - if (avds.empty()) - return devices; - - for (const QString &line : avds) // remove the daemon logs - if (line.startsWith("* daemon")) - avds.removeOne(line); - - avds.removeFirst(); // remove "List of devices attached" header line - - bool nextLineIsTargetLine = false; - - AndroidDeviceInfo dev; - for (int i = 0; i < avds.size(); i++) { - QString line = avds.at(i); - if (!line.contains(QLatin1String("Name:"))) - continue; - - int index = line.indexOf(QLatin1Char(':')) + 2; - if (index >= line.size()) - break; - dev.avdname = line.mid(index).trimmed(); - dev.sdk = -1; - dev.cpuAbi.clear(); - ++i; - for (; i < avds.size(); ++i) { - line = avds.at(i); - if (line.contains(QLatin1String("---------"))) - break; - - if (line.contains(QLatin1String("Target:")) || nextLineIsTargetLine) { - if (line.contains(QLatin1String("Google APIs"))) { - nextLineIsTargetLine = true; - continue; - } - - nextLineIsTargetLine = false; - - int lastIndex = line.lastIndexOf(QLatin1Char(' ')); - if (lastIndex == -1) // skip line - break; - QString tmp = line.mid(lastIndex).remove(QLatin1Char(')')).trimmed(); - dev.sdk = AndroidManager::findApiLevel( - sdkLocationPath.pathAppended(QString("/platforms/android-%1").arg(tmp))); - } - if (line.contains(QLatin1String("Tag/ABI:"))) { - int lastIndex = line.lastIndexOf(QLatin1Char('/')) + 1; - if (lastIndex >= line.size()) - break; - dev.cpuAbi = QStringList(line.mid(lastIndex)); - } else if (line.contains(QLatin1String("ABI:"))) { - int lastIndex = line.lastIndexOf(QLatin1Char(' ')) + 1; - if (lastIndex >= line.size()) - break; - dev.cpuAbi = QStringList(line.mid(lastIndex).trimmed()); - } - } - // armeabi-v7a devices can also run armeabi code - if (dev.cpuAbi == QStringList("armeabi-v7a")) - dev.cpuAbi << QLatin1String("armeabi"); - dev.state = AndroidDeviceInfo::OkState; - dev.type = AndroidDeviceInfo::Emulator; - if (dev.cpuAbi.isEmpty() || dev.sdk == -1) - continue; - devices.push_back(dev); - } - Utils::sort(devices); - - return devices; -} - -void AndroidToolOutputParser::parseTargetListing(const QString &output, - const Utils::FilePath &sdkLocation, - SdkPlatformList &platformList) -{ - auto addSystemImage = [](const QStringList& abiList, SdkPlatform *platform) { - QTC_ASSERT(platform, return); - foreach (auto imageAbi, abiList) { - auto image = new SystemImage(QVersionNumber(), "", imageAbi, platform); - platform->addSystemImage(image); - } - }; - - class { - public: - QStringList abiList; - QVersionNumber revision; - int apiLevel = -1; - QString description; - Utils::FilePath 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) - continue; - QString androidTarget = line.mid(index + 1, line.length() - index - 2); - const QString tmp = androidTarget.mid(androidTarget.lastIndexOf(QLatin1Char('-')) + 1); - platformParams.installedLocation = sdkLocation.pathAppended(QString("/platforms/android-%1").arg(tmp)); - platformParams.apiLevel = AndroidManager::findApiLevel(platformParams.installedLocation); - } else if (line.startsWith(QLatin1String("Name:"))) { - 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 :"))) { - platformParams.abiList = cleanAndroidABIs(line.mid(10).trimmed().split(QLatin1String(", "))); - } else if (line.startsWith(QLatin1String("ABIs"))) { - 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; - 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(); - } - } - Utils::sort(platformList); -} - -} // namespace Internal -} // namespace Android diff --git a/src/plugins/android/androidtoolmanager.h b/src/plugins/android/androidtoolmanager.h deleted file mode 100644 index a109d4d2b7..0000000000 --- a/src/plugins/android/androidtoolmanager.h +++ /dev/null @@ -1,71 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of Qt Creator. -** -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -****************************************************************************/ -#pragma once - -#include "androidconfigurations.h" - -#include - -#include - -#include - -namespace Android { -class AndroidConfig; - -namespace Internal { - -class AndroidToolOutputParser; -/*! - Wraps the \c android tool's usage. The tool itself is deprecated since SDK tools version 25.3.0. - */ -class AndroidToolManager -{ - Q_DECLARE_TR_FUNCTIONS(AndroidToolManager) - -public: - AndroidToolManager(const AndroidConfig &config); - ~AndroidToolManager(); - - SdkPlatformList availableSdkPlatforms(bool *ok = nullptr) const; - - QFuture createAvd(CreateAvdInfo info) const; - bool removeAvd(const QString &name) const; - QFuture androidVirtualDevicesFuture() const; - -// Helper methods -private: - static CreateAvdInfo createAvdImpl(CreateAvdInfo info, Utils::FilePath androidToolPath, - QProcessEnvironment env); - static AndroidDeviceInfoList androidVirtualDevices(const Utils::FilePath &androidTool, - const Utils::FilePath &sdkLlocationPath, - const QProcessEnvironment &env); -private: - const AndroidConfig &m_config; - std::unique_ptr m_parser; -}; - -} // namespace Internal -} // namespace Android -- cgit v1.2.3