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>
This commit is contained in:
BogDan Vatra
2020-01-20 11:20:09 +02:00
committed by BogDan Vatra
parent 07544d4e07
commit 12c74e6664
4 changed files with 85 additions and 42 deletions

View File

@@ -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())