diff options
author | BogDan Vatra <bogdan@kde.org> | 2020-01-20 11:20:09 +0200 |
---|---|---|
committer | BogDan Vatra <bogdan@kdab.com> | 2020-01-20 17:18:36 +0000 |
commit | 12c74e6664bc910b40de7fb96a163d511711b7b1 (patch) | |
tree | 003bb7cb0f02243e219659766d6466902dc273c6 /src/plugins/android/androidmanager.cpp | |
parent | 07544d4e0721e1ddbed3d310e6d250333c2b1fb5 (diff) |
Handle Qt < 5.14.0 androiddeployqt settings file
This file is needed by cmake projects.
Fixes: QTCREATORBUG-23306
Change-Id: Ie0ffd325ca01ac5638620c258d5e8ed5bbd3259e
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
Reviewed-by: Cristian Adam <cristian.adam@qt.io>
Diffstat (limited to 'src/plugins/android/androidmanager.cpp')
-rw-r--r-- | src/plugins/android/androidmanager.cpp | 43 |
1 files changed, 37 insertions, 6 deletions
diff --git a/src/plugins/android/androidmanager.cpp b/src/plugins/android/androidmanager.cpp index d883496e6cc..29c4f4e6eba 100644 --- a/src/plugins/android/androidmanager.cpp +++ b/src/plugins/android/androidmanager.cpp @@ -54,17 +54,18 @@ #include <utils/qtcassert.h> #include <utils/synchronousprocess.h> +#include <QApplication> #include <QDir> +#include <QDomDocument> #include <QFileSystemWatcher> +#include <QJsonDocument> #include <QList> #include <QLoggingCategory> +#include <QMessageBox> #include <QProcess> #include <QRegExp> -#include <QMessageBox> -#include <QApplication> -#include <QDomDocument> -#include <QVersionNumber> #include <QRegularExpression> +#include <QVersionNumber> namespace { const QLatin1String AndroidManifestName("AndroidManifest.xml"); @@ -76,6 +77,7 @@ namespace { const QString activityRegEx("(?<token>launchable-activity: )(.*?)(name=)'(?<target>.*?)'"); const QString apkVersionRegEx("(?<token>package: )(.*?)(versionCode=)'(?<target>.*?)'"); const QString versionCodeRegEx("(?<token>versionCode=)(?<version>\\d*)"); + const QString qtcSignature("This file is generated by QtCreator to be read by androiddeployqt and should not be modified by hand."); Q_LOGGING_CATEGORY(androidManagerLog, "qtc.android.androidManager", QtWarningMsg) @@ -264,6 +266,18 @@ QStringList AndroidManager::applicationAbis(const Target *target) return qt->androidAbis(); } +QString AndroidManager::archTriplet(const QString &abi) +{ + if (abi == "x86") { + return "i686-linux-android"; + } else if (abi == "x86_64") { + return "x86_64-linux-android"; + } else if (abi == "arm64-v8a") { + return "aarch64-linux-android"; + } + return "arm-linux-androideabi"; +} + QJsonObject AndroidManager::deploymentSettings(const Target *target) { QtSupport::BaseQtVersion *qt = QtSupport::QtKitAspect::qtVersion(target->kit()); @@ -274,11 +288,20 @@ QJsonObject AndroidManager::deploymentSettings(const Target *target) if (!tc || tc->typeId() != Constants::ANDROID_TOOLCHAIN_TYPEID) return {}; QJsonObject settings; - settings["_description"] = "This file is generated by QtCreator to be read by androiddeployqt and should not be modified by hand."; + settings["_description"] = qtcSignature; settings["qt"] = qt->prefix().toString(); settings["ndk"] = AndroidConfigurations::currentConfig().ndkLocation().toString(); settings["sdk"] = AndroidConfigurations::currentConfig().sdkLocation().toString(); - settings["stdcpp-path"] = AndroidConfigurations::currentConfig().toolchainPath().pathAppended("sysroot/usr/lib/").toString(); + if (qt->qtVersion() < QtSupport::QtVersionNumber(5, 14, 0)) { + const QStringList abis = applicationAbis(target); + QTC_ASSERT(abis.size() == 1, return {}); + settings["stdcpp-path"] = AndroidConfigurations::currentConfig().toolchainPath() + .pathAppended("sysroot/usr/lib/") + .pathAppended(archTriplet(abis.first())) + .pathAppended("libc++_shared.so").toString(); + } else { + settings["stdcpp-path"] = AndroidConfigurations::currentConfig().toolchainPath().pathAppended("sysroot/usr/lib/").toString(); + } settings["toolchain-prefix"] = "llvm"; settings["tool-prefix"] = "llvm"; settings["useLLVM"] = true; @@ -286,6 +309,14 @@ QJsonObject AndroidManager::deploymentSettings(const Target *target) return settings; } +bool AndroidManager::isQtCreatorGenerated(const FilePath &deploymentFile) +{ + QFile f{deploymentFile.toString()}; + if (!f.open(QIODevice::ReadOnly)) + return false; + return QJsonDocument::fromJson(f.readAll()).object()["_description"].toString() == qtcSignature; +} + Utils::FilePath AndroidManager::dirPath(const ProjectExplorer::Target *target) { if (auto *bc = target->activeBuildConfiguration()) |