diff --git a/src/plugins/android/androidbuildapkstep.cpp b/src/plugins/android/androidbuildapkstep.cpp index dcf63147c56..1fcb21fd6f7 100644 --- a/src/plugins/android/androidbuildapkstep.cpp +++ b/src/plugins/android/androidbuildapkstep.cpp @@ -72,10 +72,8 @@ AndroidBuildApkStep::AndroidBuildApkStep(ProjectExplorer::BuildStepList *parent, m_buildTargetSdk(AndroidConfig::apiLevelNameFor(AndroidConfigurations::currentConfig().highestAndroidSdk())) { const QtSupport::BaseQtVersion *version = QtSupport::QtKitInformation::qtVersion(target()->kit()); - if (version && version->qtVersion() >= QtSupport::QtVersionNumber(5, 4, 0)) { - m_deployAction = DebugDeployment; + if (version && version->qtVersion() >= QtSupport::QtVersionNumber(5, 4, 0)) m_useGradle = AndroidConfigurations::currentConfig().useGrandle(); - } //: AndroidBuildApkStep default display name setDefaultDisplayName(tr("Build Android APK")); } @@ -159,12 +157,7 @@ void AndroidBuildApkStep::processFinished(int exitCode, QProcess::ExitStatus sta bool AndroidBuildApkStep::fromMap(const QVariantMap &map) { - AndroidDeployAction defaultDeploy = BundleLibrariesDeployment; - const QtSupport::BaseQtVersion *version = QtSupport::QtKitInformation::qtVersion(target()->kit()); - if (version && version->qtVersion() >= QtSupport::QtVersionNumber(5, 4, 0)) - defaultDeploy = DebugDeployment; - - m_deployAction = AndroidDeployAction(map.value(DeployActionKey, defaultDeploy).toInt()); + m_deployAction = AndroidDeployAction(map.value(DeployActionKey, BundleLibrariesDeployment).toInt()); if ( m_deployAction == DebugDeployment && QtSupport::QtKitInformation::qtVersion(target()->kit())->qtVersion() < QtSupport::QtVersionNumber(5, 4, 0)) { m_deployAction = BundleLibrariesDeployment; diff --git a/src/plugins/android/androidbuildapkwidget.ui b/src/plugins/android/androidbuildapkwidget.ui index 13d638b659d..51ba40b30c8 100644 --- a/src/plugins/android/androidbuildapkwidget.ui +++ b/src/plugins/android/androidbuildapkwidget.ui @@ -139,6 +139,9 @@ :/core/images/error.png + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop + @@ -150,7 +153,8 @@ - Signing an APK that uses "Deploy local Qt libraries" is not allowed + Signing an APK that uses "Deploy local Qt libraries" is not allowed. +Deploying local Qt libraries is incompatible with Android 5 diff --git a/src/plugins/android/androidconfigurations.cpp b/src/plugins/android/androidconfigurations.cpp index 8057b8c6789..348157d621b 100644 --- a/src/plugins/android/androidconfigurations.cpp +++ b/src/plugins/android/androidconfigurations.cpp @@ -989,7 +989,9 @@ void AndroidConfigurations::setConfig(const AndroidConfig &devConfigs) emit m_instance->updated(); } -AndroidDeviceInfo AndroidConfigurations::showDeviceDialog(ProjectExplorer::Project *project, int apiLevel, const QString &abi) +AndroidDeviceInfo AndroidConfigurations::showDeviceDialog(ProjectExplorer::Project *project, + int apiLevel, const QString &abi, + Options options) { QString serialNumber = defaultDevice(project, abi); if (!serialNumber.isEmpty()) { @@ -1005,7 +1007,7 @@ AndroidDeviceInfo AndroidConfigurations::showDeviceDialog(ProjectExplorer::Proje return info; } - AndroidDeviceDialog dialog(apiLevel, abi, Core::ICore::mainWindow()); + AndroidDeviceDialog dialog(apiLevel, abi, options, Core::ICore::mainWindow()); if (dialog.exec() == QDialog::Accepted) { AndroidDeviceInfo info = dialog.device(); if (dialog.saveDeviceSelection()) { diff --git a/src/plugins/android/androidconfigurations.h b/src/plugins/android/androidconfigurations.h index 81a1678a3e2..ba39917a279 100644 --- a/src/plugins/android/androidconfigurations.h +++ b/src/plugins/android/androidconfigurations.h @@ -208,7 +208,8 @@ public: static AndroidConfigurations *instance(); static void updateAndroidDevice(); - static AndroidDeviceInfo showDeviceDialog(ProjectExplorer::Project *project, int apiLevel, const QString &abi); + enum Options { None, FilterAndroid5 }; + static AndroidDeviceInfo showDeviceDialog(ProjectExplorer::Project *project, int apiLevel, const QString &abi, Options options); static void setDefaultDevice(ProjectExplorer::Project *project, const QString &abi, const QString &serialNumber); // serial number or avd name static QString defaultDevice(ProjectExplorer::Project *project, const QString &abi); // serial number or avd name public slots: diff --git a/src/plugins/android/androiddeployqtstep.cpp b/src/plugins/android/androiddeployqtstep.cpp index a6b38e20b69..82ad8929f4e 100644 --- a/src/plugins/android/androiddeployqtstep.cpp +++ b/src/plugins/android/androiddeployqtstep.cpp @@ -176,8 +176,19 @@ bool AndroidDeployQtStep::init() emit addOutput(tr("No Android arch set by the .pro file."), ErrorOutput); return false; } + + AndroidBuildApkStep *androidBuildApkStep + = AndroidGlobal::buildStep(target()->activeBuildConfiguration()); + if (!androidBuildApkStep) { + emit addOutput(tr("Cannot find the android build step."), ErrorOutput); + return false; + } + m_deviceAPILevel = AndroidManager::minimumSDK(target()); - AndroidDeviceInfo info = AndroidConfigurations::showDeviceDialog(project(), m_deviceAPILevel, m_targetArch); + AndroidConfigurations::Options options = AndroidConfigurations::None; + if (androidBuildApkStep->deployAction() == AndroidBuildApkStep::DebugDeployment) + options = AndroidConfigurations::FilterAndroid5; + AndroidDeviceInfo info = AndroidConfigurations::showDeviceDialog(project(), m_deviceAPILevel, m_targetArch, options); if (info.serialNumber.isEmpty()) // aborted return false; @@ -205,12 +216,6 @@ bool AndroidDeployQtStep::init() ProjectExplorer::ProcessParameters *pp = processParameters(); m_useAndroiddeployqt = version->qtVersion() >= QtSupport::QtVersionNumber(5, 4, 0); if (m_useAndroiddeployqt) { - AndroidBuildApkStep *androidBuildApkStep - = AndroidGlobal::buildStep(target()->activeBuildConfiguration()); - if (!androidBuildApkStep) { - emit addOutput(tr("Cannot find the android build step."), ErrorOutput); - return false; - } Utils::FileName tmp = AndroidManager::androidQtSupport(target())->androiddeployqtPath(target()); if (tmp.isEmpty()) { emit addOutput(tr("Cannot find the androiddeployqt tool."), ErrorOutput); diff --git a/src/plugins/android/androiddevicedialog.cpp b/src/plugins/android/androiddevicedialog.cpp index abc3d6cde2b..43a3acd6a85 100644 --- a/src/plugins/android/androiddevicedialog.cpp +++ b/src/plugins/android/androiddevicedialog.cpp @@ -213,7 +213,7 @@ public: class AndroidDeviceModel : public QAbstractItemModel { public: - AndroidDeviceModel(int apiLevel, const QString &abi); + AndroidDeviceModel(int apiLevel, const QString &abi, AndroidConfigurations::Options options); QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const; QModelIndex parent(const QModelIndex &child) const; @@ -229,6 +229,7 @@ public: private: int m_apiLevel; QString m_abi; + AndroidConfigurations::Options m_options; AndroidDeviceModelNode *m_root; }; @@ -237,8 +238,8 @@ private: ///////////////// // AndroidDeviceModel ///////////////// -AndroidDeviceModel::AndroidDeviceModel(int apiLevel, const QString &abi) - : m_apiLevel(apiLevel), m_abi(abi), m_root(0) +AndroidDeviceModel::AndroidDeviceModel(int apiLevel, const QString &abi, AndroidConfigurations::Options options) + : m_apiLevel(apiLevel), m_abi(abi), m_options(options), m_root(0) { } @@ -347,6 +348,8 @@ void AndroidDeviceModel::setDevices(const QVector &devices) } else if (device.sdk < m_apiLevel) { error = AndroidDeviceDialog::tr("API Level of device is: %1.") .arg(device.sdk); + } else if (device.sdk > 20 && (m_options & AndroidConfigurations::FilterAndroid5)) { + error = AndroidDeviceDialog::tr("Android 5 devices are incompatible with deploying Qt to a temporary directory."); } else { new AndroidDeviceModelNode(compatibleDevices, device); continue; @@ -386,9 +389,9 @@ static inline QString msgAdbListDevices() return AndroidDeviceDialog::tr("

The adb tool in the Android SDK lists all connected devices if run via "adb devices".

"); } -AndroidDeviceDialog::AndroidDeviceDialog(int apiLevel, const QString &abi, QWidget *parent) : +AndroidDeviceDialog::AndroidDeviceDialog(int apiLevel, const QString &abi, AndroidConfigurations::Options options, QWidget *parent) : QDialog(parent), - m_model(new AndroidDeviceModel(apiLevel, abi)), + m_model(new AndroidDeviceModel(apiLevel, abi, options)), m_ui(new Ui::AndroidDeviceDialog), m_apiLevel(apiLevel), m_abi(abi) diff --git a/src/plugins/android/androiddevicedialog.h b/src/plugins/android/androiddevicedialog.h index 34d0ed074b3..e557650c2e9 100644 --- a/src/plugins/android/androiddevicedialog.h +++ b/src/plugins/android/androiddevicedialog.h @@ -52,7 +52,7 @@ class AndroidDeviceDialog : public QDialog Q_OBJECT public: - explicit AndroidDeviceDialog(int apiLevel, const QString &abi, QWidget *parent = 0); + explicit AndroidDeviceDialog(int apiLevel, const QString &abi, AndroidConfigurations::Options opts, QWidget *parent = 0); ~AndroidDeviceDialog(); AndroidDeviceInfo device(); diff --git a/src/plugins/android/androidmanager.cpp b/src/plugins/android/androidmanager.cpp index 26f7e6d955f..8a4b8563c2c 100644 --- a/src/plugins/android/androidmanager.cpp +++ b/src/plugins/android/androidmanager.cpp @@ -479,7 +479,7 @@ void AndroidManager::cleanLibsOnDevice(ProjectExplorer::Target *target) if (targetArch.isEmpty()) return; int deviceAPILevel = AndroidManager::minimumSDK(target); - AndroidDeviceInfo info = AndroidConfigurations::showDeviceDialog(target->project(), deviceAPILevel, targetArch); + AndroidDeviceInfo info = AndroidConfigurations::showDeviceDialog(target->project(), deviceAPILevel, targetArch, AndroidConfigurations::None); if (info.serialNumber.isEmpty()) // aborted return; @@ -509,7 +509,7 @@ void AndroidManager::installQASIPackage(ProjectExplorer::Target *target, const Q if (targetArch.isEmpty()) return; int deviceAPILevel = AndroidManager::minimumSDK(target); - AndroidDeviceInfo info = AndroidConfigurations::showDeviceDialog(target->project(), deviceAPILevel, targetArch); + AndroidDeviceInfo info = AndroidConfigurations::showDeviceDialog(target->project(), deviceAPILevel, targetArch, AndroidConfigurations::None); if (info.serialNumber.isEmpty()) // aborted return;