diff options
author | Vikas Pachdha <vikas.pachdha@qt.io> | 2018-07-03 11:51:28 +0200 |
---|---|---|
committer | Vikas Pachdha <vikas.pachdha@qt.io> | 2018-07-09 08:16:22 +0000 |
commit | f19a6e8ac2c76e323875e4dc02b53c58aa887afe (patch) | |
tree | 3fcecbac55ae6c903dbfb9bbe4fc0aa02aa2882c /src | |
parent | 299da013325be20ff731b91e7ead47b20242b1cd (diff) | |
download | qt-creator-f19a6e8ac2c76e323875e4dc02b53c58aa887afe.tar.gz |
Android: Add API's to run Android SDK tools
Task-number: QDS-16
Change-Id: Ifea5aa17330833cd130555778134fb8f90e2d990
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/plugins/android/androidmanager.cpp | 51 | ||||
-rw-r--r-- | src/plugins/android/androidmanager.h | 3 |
2 files changed, 37 insertions, 17 deletions
diff --git a/src/plugins/android/androidmanager.cpp b/src/plugins/android/androidmanager.cpp index de927adc41..c52bd5f8ee 100644 --- a/src/plugins/android/androidmanager.cpp +++ b/src/plugins/android/androidmanager.cpp @@ -54,6 +54,7 @@ #include <QDir> #include <QFileSystemWatcher> #include <QList> +#include <QLoggingCategory> #include <QProcess> #include <QRegExp> #include <QMessageBox> @@ -67,6 +68,20 @@ namespace { const QLatin1String AndroidDeviceSn("AndroidDeviceSerialNumber"); const QLatin1String ApiLevelKey("AndroidVersion.ApiLevel"); + Q_LOGGING_CATEGORY(androidManagerLog, "qtc.android.androidManager") + + bool runCommand(const QString &executable, const QStringList &args, + QString *output = nullptr, int timeoutS = 30) + { + Utils::SynchronousProcess cmdProc; + cmdProc.setTimeoutS(timeoutS); + qCDebug(androidManagerLog) << executable << args.join(' '); + Utils::SynchronousProcessResponse response = cmdProc.runBlocking(executable, args); + if (output) + *output = response.allOutput(); + return response.result == Utils::SynchronousProcessResponse::Finished; + } + } // anonymous namespace namespace Android { @@ -364,16 +379,9 @@ void AndroidManager::cleanLibsOnDevice(ProjectExplorer::Target *target) Core::MessageManager::write(tr("Starting Android virtual device failed.")); } - QProcess *process = new QProcess(); QStringList arguments = AndroidDeviceInfo::adbSelector(deviceSerialNumber); arguments << QLatin1String("shell") << QLatin1String("rm") << QLatin1String("-r") << QLatin1String("/data/local/tmp/qt"); - QObject::connect(process, static_cast<void (QProcess::*)(int)>(&QProcess::finished), - process, &QObject::deleteLater); - const QString adb = AndroidConfigurations::currentConfig().adbToolPath().toString(); - Core::MessageManager::write(adb + QLatin1Char(' ') + arguments.join(QLatin1Char(' '))); - process->start(adb, arguments); - if (!process->waitForStarted(500)) - delete process; + runAdbCommandDetached(arguments); } void AndroidManager::installQASIPackage(ProjectExplorer::Target *target, const QString &packagePath) @@ -393,17 +401,9 @@ void AndroidManager::installQASIPackage(ProjectExplorer::Target *target, const Q Core::MessageManager::write(tr("Starting Android virtual device failed.")); } - QProcess *process = new QProcess(); QStringList arguments = AndroidDeviceInfo::adbSelector(deviceSerialNumber); arguments << QLatin1String("install") << QLatin1String("-r ") << packagePath; - - connect(process, static_cast<void (QProcess::*)(int)>(&QProcess::finished), - process, &QObject::deleteLater); - const QString adb = AndroidConfigurations::currentConfig().adbToolPath().toString(); - Core::MessageManager::write(adb + QLatin1Char(' ') + arguments.join(QLatin1Char(' '))); - process->start(adb, arguments); - if (!process->waitForStarted(500) && process->state() != QProcess::Running) - delete process; + runAdbCommandDetached(arguments); } bool AndroidManager::checkKeystorePassword(const QString &keystorePath, const QString &keystorePasswd) @@ -596,4 +596,21 @@ int AndroidManager::findApiLevel(const Utils::FileName &platformPath) return apiLevel; } +void AndroidManager::runAdbCommandDetached(const QStringList &args) +{ + QProcess *process = new QProcess(); + connect(process, static_cast<void (QProcess::*)(int)>(&QProcess::finished), + process, &QObject::deleteLater); + const QString adb = AndroidConfigurations::currentConfig().adbToolPath().toString(); + qCDebug(androidManagerLog) << adb << args.join(' '); + process->start(adb, args); + if (!process->waitForStarted(500) && process->state() != QProcess::Running) + delete process; +} + +bool AndroidManager::runAdbCommand(const QStringList &args, QString *output) +{ + return runCommand(AndroidConfigurations::currentConfig().adbToolPath().toString(), + args, output); +} } // namespace Android diff --git a/src/plugins/android/androidmanager.h b/src/plugins/android/androidmanager.h index b1ce332131..1c79a23631 100644 --- a/src/plugins/android/androidmanager.h +++ b/src/plugins/android/androidmanager.h @@ -87,6 +87,9 @@ public: static AndroidQtSupport *androidQtSupport(ProjectExplorer::Target *target); static bool updateGradleProperties(ProjectExplorer::Target *target); static int findApiLevel(const Utils::FileName &platformPath); + + static void runAdbCommandDetached(const QStringList &args); + static bool runAdbCommand(const QStringList &args, QString *output = nullptr); }; } // namespace Android |