forked from qt-creator/qt-creator
Android debugging: Fix pulling of app_process
/system/bin/app_process can be a link to e.g. /system/bin/app_process32, which we resolve first via "adb shell" before calling "adb pull". Task-number: QTCREATORBUG-14201 Change-Id: Ic133cf0bcec3234839680584ff4807f443161e6c Reviewed-by: hjk <hjk@theqtcompany.com> Reviewed-by: Daniel Teske <daniel.teske@theqtcompany.com> Reviewed-by: Alessandro Portale <alessandro.portale@theqtcompany.com>
This commit is contained in:
@@ -420,17 +420,16 @@ void AndroidDeployQtStep::run(QFutureInterface<bool> &fi)
|
|||||||
|
|
||||||
emit addOutput(tr("Pulling files necessary for debugging."), MessageOutput);
|
emit addOutput(tr("Pulling files necessary for debugging."), MessageOutput);
|
||||||
|
|
||||||
|
const QString remoteAppProcessFile = systemAppProcessFilePath();
|
||||||
QString localAppProcessFile = QString::fromLatin1("%1/app_process").arg(m_buildDirectory);
|
QString localAppProcessFile = QString::fromLatin1("%1/app_process").arg(m_buildDirectory);
|
||||||
runCommand(m_adbPath,
|
runCommand(m_adbPath,
|
||||||
AndroidDeviceInfo::adbSelector(m_serialNumber)
|
AndroidDeviceInfo::adbSelector(m_serialNumber)
|
||||||
<< QLatin1String("pull") << QLatin1String("/system/bin/app_process")
|
<< QLatin1String("pull") << remoteAppProcessFile
|
||||||
<< localAppProcessFile);
|
<< localAppProcessFile);
|
||||||
// Workaround for QTCREATORBUG-14201: /system/bin/app_process might be a link to asan/app_process
|
|
||||||
if (!QFileInfo::exists(localAppProcessFile)) {
|
if (!QFileInfo::exists(localAppProcessFile)) {
|
||||||
runCommand(m_adbPath,
|
returnValue = Failure;
|
||||||
AndroidDeviceInfo::adbSelector(m_serialNumber)
|
emit addOutput(tr("Package deploy: Failed to pull \"%1\" to \"%2\".")
|
||||||
<< QLatin1String("pull") << QLatin1String("/system/bin/asan/app_process")
|
.arg(remoteAppProcessFile).arg(localAppProcessFile), ErrorMessageOutput);
|
||||||
<< localAppProcessFile);
|
|
||||||
}
|
}
|
||||||
runCommand(m_adbPath,
|
runCommand(m_adbPath,
|
||||||
AndroidDeviceInfo::adbSelector(m_serialNumber) << QLatin1String("pull")
|
AndroidDeviceInfo::adbSelector(m_serialNumber) << QLatin1String("pull")
|
||||||
@@ -464,6 +463,17 @@ void AndroidDeployQtStep::runCommand(const QString &program, const QStringList &
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString AndroidDeployQtStep::systemAppProcessFilePath() const
|
||||||
|
{
|
||||||
|
QProcess proc;
|
||||||
|
const QStringList args =
|
||||||
|
QStringList() << QLatin1String("shell")
|
||||||
|
<< QLatin1String("readlink -f -s /system/bin/app_process");
|
||||||
|
proc.start(m_adbPath, args);
|
||||||
|
proc.waitForFinished();
|
||||||
|
return QString::fromUtf8(proc.readAll()).trimmed();
|
||||||
|
}
|
||||||
|
|
||||||
ProjectExplorer::BuildStepConfigWidget *AndroidDeployQtStep::createConfigWidget()
|
ProjectExplorer::BuildStepConfigWidget *AndroidDeployQtStep::createConfigWidget()
|
||||||
{
|
{
|
||||||
return new AndroidDeployQtWidget(this);
|
return new AndroidDeployQtWidget(this);
|
||||||
|
@@ -102,6 +102,7 @@ private:
|
|||||||
AndroidDeployQtStep *other);
|
AndroidDeployQtStep *other);
|
||||||
void ctor();
|
void ctor();
|
||||||
void runCommand(const QString &program, const QStringList &arguments);
|
void runCommand(const QString &program, const QStringList &arguments);
|
||||||
|
QString systemAppProcessFilePath() const;
|
||||||
|
|
||||||
bool init();
|
bool init();
|
||||||
void run(QFutureInterface<bool> &fi);
|
void run(QFutureInterface<bool> &fi);
|
||||||
|
Reference in New Issue
Block a user