forked from qt-creator/qt-creator
Android: Add API's to run Android SDK tools
Task-number: QDS-16 Change-Id: Ifea5aa17330833cd130555778134fb8f90e2d990 Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
This commit is contained in:
@@ -54,6 +54,7 @@
|
|||||||
#include <QDir>
|
#include <QDir>
|
||||||
#include <QFileSystemWatcher>
|
#include <QFileSystemWatcher>
|
||||||
#include <QList>
|
#include <QList>
|
||||||
|
#include <QLoggingCategory>
|
||||||
#include <QProcess>
|
#include <QProcess>
|
||||||
#include <QRegExp>
|
#include <QRegExp>
|
||||||
#include <QMessageBox>
|
#include <QMessageBox>
|
||||||
@@ -67,6 +68,20 @@ namespace {
|
|||||||
const QLatin1String AndroidDeviceSn("AndroidDeviceSerialNumber");
|
const QLatin1String AndroidDeviceSn("AndroidDeviceSerialNumber");
|
||||||
const QLatin1String ApiLevelKey("AndroidVersion.ApiLevel");
|
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
|
} // anonymous namespace
|
||||||
|
|
||||||
namespace Android {
|
namespace Android {
|
||||||
@@ -364,16 +379,9 @@ void AndroidManager::cleanLibsOnDevice(ProjectExplorer::Target *target)
|
|||||||
Core::MessageManager::write(tr("Starting Android virtual device failed."));
|
Core::MessageManager::write(tr("Starting Android virtual device failed."));
|
||||||
}
|
}
|
||||||
|
|
||||||
QProcess *process = new QProcess();
|
|
||||||
QStringList arguments = AndroidDeviceInfo::adbSelector(deviceSerialNumber);
|
QStringList arguments = AndroidDeviceInfo::adbSelector(deviceSerialNumber);
|
||||||
arguments << QLatin1String("shell") << QLatin1String("rm") << QLatin1String("-r") << QLatin1String("/data/local/tmp/qt");
|
arguments << QLatin1String("shell") << QLatin1String("rm") << QLatin1String("-r") << QLatin1String("/data/local/tmp/qt");
|
||||||
QObject::connect(process, static_cast<void (QProcess::*)(int)>(&QProcess::finished),
|
runAdbCommandDetached(arguments);
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void AndroidManager::installQASIPackage(ProjectExplorer::Target *target, const QString &packagePath)
|
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."));
|
Core::MessageManager::write(tr("Starting Android virtual device failed."));
|
||||||
}
|
}
|
||||||
|
|
||||||
QProcess *process = new QProcess();
|
|
||||||
QStringList arguments = AndroidDeviceInfo::adbSelector(deviceSerialNumber);
|
QStringList arguments = AndroidDeviceInfo::adbSelector(deviceSerialNumber);
|
||||||
arguments << QLatin1String("install") << QLatin1String("-r ") << packagePath;
|
arguments << QLatin1String("install") << QLatin1String("-r ") << packagePath;
|
||||||
|
runAdbCommandDetached(arguments);
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool AndroidManager::checkKeystorePassword(const QString &keystorePath, const QString &keystorePasswd)
|
bool AndroidManager::checkKeystorePassword(const QString &keystorePath, const QString &keystorePasswd)
|
||||||
@@ -596,4 +596,21 @@ int AndroidManager::findApiLevel(const Utils::FileName &platformPath)
|
|||||||
return apiLevel;
|
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
|
} // namespace Android
|
||||||
|
|||||||
@@ -87,6 +87,9 @@ public:
|
|||||||
static AndroidQtSupport *androidQtSupport(ProjectExplorer::Target *target);
|
static AndroidQtSupport *androidQtSupport(ProjectExplorer::Target *target);
|
||||||
static bool updateGradleProperties(ProjectExplorer::Target *target);
|
static bool updateGradleProperties(ProjectExplorer::Target *target);
|
||||||
static int findApiLevel(const Utils::FileName &platformPath);
|
static int findApiLevel(const Utils::FileName &platformPath);
|
||||||
|
|
||||||
|
static void runAdbCommandDetached(const QStringList &args);
|
||||||
|
static bool runAdbCommand(const QStringList &args, QString *output = nullptr);
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace Android
|
} // namespace Android
|
||||||
|
|||||||
Reference in New Issue
Block a user