diff --git a/src/plugins/android/androiddeployqtstep.cpp b/src/plugins/android/androiddeployqtstep.cpp index 73a093c20f4..a6b38e20b69 100644 --- a/src/plugins/android/androiddeployqtstep.cpp +++ b/src/plugins/android/androiddeployqtstep.cpp @@ -200,11 +200,7 @@ bool AndroidDeployQtStep::init() m_uninstallPreviousPackageRun = m_uninstallPreviousPackage || m_uninstallPreviousPackageTemp; m_uninstallPreviousPackageTemp = false; if (m_uninstallPreviousPackageRun) { - m_packageName = AndroidManager::packageName(target()); - if (m_packageName.isEmpty()){ - emit addOutput(tr("Cannot find the package name."), ErrorOutput); - return false; - } + m_manifestName = AndroidManager::manifestPath(target()); } ProjectExplorer::ProcessParameters *pp = processParameters(); m_useAndroiddeployqt = version->qtVersion() >= QtSupport::QtVersionNumber(5, 4, 0); @@ -299,10 +295,18 @@ void AndroidDeployQtStep::run(QFutureInterface &fi) pp->setArguments(m_androiddeployqtArgs); } else { if (m_uninstallPreviousPackageRun) { - emit addOutput(tr("Uninstall previous package %1.").arg(m_packageName), MessageOutput); + const QString packageName = AndroidManager::packageName(m_manifestName); + if (packageName.isEmpty()){ + emit addOutput(tr("Cannot find the package name."), ErrorOutput); + fi.reportResult(false); + emit finished(); + return; + } + + emit addOutput(tr("Uninstall previous package %1.").arg(packageName), MessageOutput); runCommand(AndroidConfigurations::currentConfig().adbToolPath().toString(), AndroidDeviceInfo::adbSelector(m_serialNumber) - << QLatin1String("uninstall") << m_packageName); + << QLatin1String("uninstall") << packageName); } QString args; diff --git a/src/plugins/android/androiddeployqtstep.h b/src/plugins/android/androiddeployqtstep.h index 8a1f2ebc207..b9e94612514 100644 --- a/src/plugins/android/androiddeployqtstep.h +++ b/src/plugins/android/androiddeployqtstep.h @@ -103,7 +103,7 @@ private: void stdError(const QString &line); virtual bool processSucceeded(int exitCode, QProcess::ExitStatus status); - QString m_packageName; + Utils::FileName m_manifestName; QString m_serialNumber; QString m_buildDirectory; QString m_avdName; diff --git a/src/plugins/android/androidmanager.cpp b/src/plugins/android/androidmanager.cpp index 5c2881652bc..84f1b612f58 100644 --- a/src/plugins/android/androidmanager.cpp +++ b/src/plugins/android/androidmanager.cpp @@ -123,6 +123,15 @@ QString AndroidManager::packageName(ProjectExplorer::Target *target) return manifestElem.attribute(QLatin1String("package")); } +QString AndroidManager::packageName(const Utils::FileName &manifestFile) +{ + QDomDocument doc; + if (!openXmlFile(doc, manifestFile)) + return QString(); + QDomElement manifestElem = doc.documentElement(); + return manifestElem.attribute(QLatin1String("package")); +} + QString AndroidManager::intentName(ProjectExplorer::Target *target) { return packageName(target) + QLatin1Char('/') + activityName(target); diff --git a/src/plugins/android/androidmanager.h b/src/plugins/android/androidmanager.h index ed395611bc1..a64e36010e1 100644 --- a/src/plugins/android/androidmanager.h +++ b/src/plugins/android/androidmanager.h @@ -57,6 +57,7 @@ public: static bool supportsAndroid(const ProjectExplorer::Target *target); static QString packageName(ProjectExplorer::Target *target); + static QString packageName(const Utils::FileName &manifestFile); static QString intentName(ProjectExplorer::Target *target); static QString activityName(ProjectExplorer::Target *target);