diff --git a/src/plugins/android/androidconstants.h b/src/plugins/android/androidconstants.h index 8c8f6385556..726a9537c8a 100644 --- a/src/plugins/android/androidconstants.h +++ b/src/plugins/android/androidconstants.h @@ -64,6 +64,7 @@ const char JAVA_MIMETYPE[] = "text/x-java"; const char ANDROID_ARCHITECTURE[] = "Android.Architecture"; const char ANDROID_PACKAGE_SOURCE_DIR[] = "AndroidPackageSourceDir"; const char ANDROID_EXTRA_LIBS[] = "AndroidExtraLibs"; +const char ANDROID_ABIS[] = "ANDROID_ABIS"; const char ANDROID_PACKAGENAME[] = "Android.PackageName"; const char ANDROID_PACKAGE_INSTALLATION_STEP_ID[] diff --git a/src/plugins/android/androiddeployqtstep.cpp b/src/plugins/android/androiddeployqtstep.cpp index 390d0e1b0dc..5f551164118 100644 --- a/src/plugins/android/androiddeployqtstep.cpp +++ b/src/plugins/android/androiddeployqtstep.cpp @@ -38,6 +38,7 @@ #include #include +#include #include #include #include @@ -207,6 +208,18 @@ bool AndroidDeployQtStep::init() if (!info.isValid()) // aborted return false; + const QString buildKey = target()->activeBuildKey(); + auto selectedAbis = buildSystem()->extraData(buildKey, Constants::ANDROID_ABIS).toStringList(); + + if (!selectedAbis.contains(info.cpuAbi.first())) { + Core::MessageManager::write( + tr("Android: The selected device main ABI (%1) is not selected! The app execution or " + "debugging might not work properly. Add it from Projects > Build > Build Steps > " + "qmake > ABIs.") + .arg(info.cpuAbi.first()), + Core::MessageManager::WithFocus); + } + m_avdName = info.avdname; m_serialNumber = info.serialNumber; qCDebug(deployStepLog) << "Selected device info:" << info; diff --git a/src/plugins/qmakeprojectmanager/qmakenodes.cpp b/src/plugins/qmakeprojectmanager/qmakenodes.cpp index 06f9cb45021..74b8758c41b 100644 --- a/src/plugins/qmakeprojectmanager/qmakenodes.cpp +++ b/src/plugins/qmakeprojectmanager/qmakenodes.cpp @@ -360,6 +360,8 @@ QStringList QmakeProFileNode::targetApplications() const QVariant QmakeProFileNode::data(Utils::Id role) const { + if (role == Android::Constants::ANDROID_ABIS) + return variableValue(Variable::AndroidAbis); if (role == Android::Constants::AndroidPackageSourceDir) return singleVariableValue(Variable::AndroidPackageSourceDir); if (role == Android::Constants::AndroidDeploySettingsFile) @@ -432,6 +434,8 @@ bool QmakeProFileNode::setData(Utils::Id role, const QVariant &value) const return pro->setProVariable("ANDROID_EXTRA_LIBS", value.toStringList(), scope, flags); if (role == Android::Constants::AndroidPackageSourceDir) return pro->setProVariable("ANDROID_PACKAGE_SOURCE_DIR", {value.toString()}, scope, flags); + if (role == Android::Constants::ANDROID_ABIS) + return pro->setProVariable("ANDROID_ABIS", {value.toString()}, scope, flags); return false; } diff --git a/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp b/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp index e3979bbafb6..b694d2255c6 100644 --- a/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp +++ b/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp @@ -1589,6 +1589,7 @@ QmakeEvalResult *QmakeProFile::evaluate(const QmakeEvalInput &input) result->newVarValues[Variable::AndroidArch] = exactReader->values(QLatin1String("ANDROID_TARGET_ARCH")); result->newVarValues[Variable::AndroidDeploySettingsFile] = exactReader->values(QLatin1String("ANDROID_DEPLOYMENT_SETTINGS_FILE")); result->newVarValues[Variable::AndroidPackageSourceDir] = exactReader->values(QLatin1String("ANDROID_PACKAGE_SOURCE_DIR")); + result->newVarValues[Variable::AndroidAbis] = exactReader->values(QLatin1String("ANDROID_ABIS")); result->newVarValues[Variable::AndroidExtraLibs] = exactReader->values(QLatin1String("ANDROID_EXTRA_LIBS")); result->newVarValues[Variable::AppmanPackageDir] = exactReader->values(QLatin1String("AM_PACKAGE_DIR")); result->newVarValues[Variable::AppmanManifest] = exactReader->values(QLatin1String("AM_MANIFEST")); diff --git a/src/plugins/qmakeprojectmanager/qmakeparsernodes.h b/src/plugins/qmakeprojectmanager/qmakeparsernodes.h index 54331a82d73..28a92dce377 100644 --- a/src/plugins/qmakeprojectmanager/qmakeparsernodes.h +++ b/src/plugins/qmakeprojectmanager/qmakeparsernodes.h @@ -98,6 +98,7 @@ enum class Variable { ShLibExtension, AndroidArch, AndroidDeploySettingsFile, + AndroidAbis, AndroidPackageSourceDir, AndroidExtraLibs, AppmanPackageDir, diff --git a/src/plugins/qmakeprojectmanager/qmakestep.cpp b/src/plugins/qmakeprojectmanager/qmakestep.cpp index 376d5d81f85..82b236dd480 100644 --- a/src/plugins/qmakeprojectmanager/qmakestep.cpp +++ b/src/plugins/qmakeprojectmanager/qmakestep.cpp @@ -34,6 +34,8 @@ #include "qmakeprojectmanagerconstants.h" #include "qmakesettings.h" +#include + #include #include #include @@ -664,8 +666,12 @@ void QMakeStepConfigWidget::abisChanged() break; } } - args << prefix + '"' + abis.join(' ') + '"'; + if (!abis.isEmpty()) + args << prefix + '"' + abis.join(' ') + '"'; m_step->setExtraArguments(args); + + const QString buildKey = m_step->target()->activeBuildKey(); + m_step->buildSystem()->setExtraData(buildKey, Android::Constants::ANDROID_ABIS, m_step->selectedAbis()); } updateSummaryLabel();