forked from qt-creator/qt-creator
Android: Transform AndroidConfig into namespace
Change-Id: I1926758f3dcaffb4de11a85c0873eec7bd2d223c Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
This commit is contained in:
@@ -45,7 +45,7 @@ static bool is32BitUserSpace()
|
|||||||
|
|
||||||
bool startAvdAsync(const QString &avdName)
|
bool startAvdAsync(const QString &avdName)
|
||||||
{
|
{
|
||||||
const FilePath emulator = androidConfig().emulatorToolPath();
|
const FilePath emulator = AndroidConfig::emulatorToolPath();
|
||||||
if (!emulator.exists()) {
|
if (!emulator.exists()) {
|
||||||
QMetaObject::invokeMethod(Core::ICore::mainWindow(), [emulator] {
|
QMetaObject::invokeMethod(Core::ICore::mainWindow(), [emulator] {
|
||||||
QMessageBox::critical(Core::ICore::dialogParent(),
|
QMessageBox::critical(Core::ICore::dialogParent(),
|
||||||
@@ -75,11 +75,11 @@ bool startAvdAsync(const QString &avdName)
|
|||||||
});
|
});
|
||||||
|
|
||||||
// start the emulator
|
// start the emulator
|
||||||
CommandLine cmd(androidConfig().emulatorToolPath());
|
CommandLine cmd(emulator);
|
||||||
if (is32BitUserSpace())
|
if (is32BitUserSpace())
|
||||||
cmd.addArg("-force-32bit");
|
cmd.addArg("-force-32bit");
|
||||||
|
|
||||||
cmd.addArgs(androidConfig().emulatorArgs(), CommandLine::Raw);
|
cmd.addArgs(AndroidConfig::emulatorArgs(), CommandLine::Raw);
|
||||||
cmd.addArgs({"-avd", avdName});
|
cmd.addArgs({"-avd", avdName});
|
||||||
qCDebug(avdManagerLog).noquote() << "Running command (startAvdAsync):" << cmd.toUserOutput();
|
qCDebug(avdManagerLog).noquote() << "Running command (startAvdAsync):" << cmd.toUserOutput();
|
||||||
avdProcess->setCommand(cmd);
|
avdProcess->setCommand(cmd);
|
||||||
@@ -89,7 +89,7 @@ bool startAvdAsync(const QString &avdName)
|
|||||||
|
|
||||||
QString findAvd(const QString &avdName)
|
QString findAvd(const QString &avdName)
|
||||||
{
|
{
|
||||||
const QList<AndroidDeviceInfo> devices = androidConfig().connectedDevices();
|
const QList<AndroidDeviceInfo> devices = AndroidConfig::connectedDevices();
|
||||||
for (const AndroidDeviceInfo &device : devices) {
|
for (const AndroidDeviceInfo &device : devices) {
|
||||||
if (device.type != ProjectExplorer::IDevice::Emulator)
|
if (device.type != ProjectExplorer::IDevice::Emulator)
|
||||||
continue;
|
continue;
|
||||||
@@ -108,7 +108,7 @@ static bool waitForBooted(const QString &serialNumber, const std::optional<QFutu
|
|||||||
if (isAvdBooted(serialNumber))
|
if (isAvdBooted(serialNumber))
|
||||||
return true;
|
return true;
|
||||||
QThread::sleep(2);
|
QThread::sleep(2);
|
||||||
if (!androidConfig().isConnected(serialNumber)) // device was disconnected
|
if (!AndroidConfig::isConnected(serialNumber)) // device was disconnected
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@@ -132,11 +132,11 @@ QString waitForAvd(const QString &avdName, const std::optional<QFuture<void>> &f
|
|||||||
|
|
||||||
bool isAvdBooted(const QString &device)
|
bool isAvdBooted(const QString &device)
|
||||||
{
|
{
|
||||||
const CommandLine command{androidConfig().adbToolPath(), AndroidDeviceInfo::adbSelector(device)
|
const CommandLine cmd{AndroidConfig::adbToolPath(), {AndroidDeviceInfo::adbSelector(device),
|
||||||
+ QStringList{"shell", "getprop", "init.svc.bootanim"}};
|
"shell", "getprop", "init.svc.bootanim"}};
|
||||||
qCDebug(avdManagerLog).noquote() << "Running command (isAvdBooted):" << command.toUserOutput();
|
qCDebug(avdManagerLog).noquote() << "Running command (isAvdBooted):" << cmd.toUserOutput();
|
||||||
Process adbProc;
|
Process adbProc;
|
||||||
adbProc.setCommand(command);
|
adbProc.setCommand(cmd);
|
||||||
adbProc.runBlocking();
|
adbProc.runBlocking();
|
||||||
if (adbProc.result() != ProcessResult::FinishedWithSuccess)
|
if (adbProc.result() != ProcessResult::FinishedWithSuccess)
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -415,7 +415,7 @@ bool AndroidBuildApkWidget::isOpenSslLibsIncluded()
|
|||||||
|
|
||||||
QString AndroidBuildApkWidget::openSslIncludeFileContent(const FilePath &projectPath)
|
QString AndroidBuildApkWidget::openSslIncludeFileContent(const FilePath &projectPath)
|
||||||
{
|
{
|
||||||
QString openSslPath = androidConfig().openSslLocation().toString();
|
QString openSslPath = AndroidConfig::openSslLocation().toString();
|
||||||
if (projectPath.endsWith(".pro"))
|
if (projectPath.endsWith(".pro"))
|
||||||
return "android: include(" + openSslPath + "/openssl.pri)";
|
return "android: include(" + openSslPath + "/openssl.pri)";
|
||||||
if (projectPath.endsWith("CMakeLists.txt"))
|
if (projectPath.endsWith("CMakeLists.txt"))
|
||||||
@@ -541,7 +541,7 @@ bool AndroidBuildApkStep::init()
|
|||||||
QStringList arguments = {"--input", m_inputFile.path(),
|
QStringList arguments = {"--input", m_inputFile.path(),
|
||||||
"--output", outputDir.path(),
|
"--output", outputDir.path(),
|
||||||
"--android-platform", m_buildTargetSdk,
|
"--android-platform", m_buildTargetSdk,
|
||||||
"--jdk", androidConfig().openJDKLocation().path()};
|
"--jdk", AndroidConfig::openJDKLocation().path()};
|
||||||
|
|
||||||
if (verboseOutput())
|
if (verboseOutput())
|
||||||
arguments << "--verbose";
|
arguments << "--verbose";
|
||||||
@@ -929,17 +929,16 @@ QVariant AndroidBuildApkStep::data(Utils::Id id) const
|
|||||||
{
|
{
|
||||||
if (id == Constants::AndroidNdkPlatform) {
|
if (id == Constants::AndroidNdkPlatform) {
|
||||||
if (auto qtVersion = QtKitAspect::qtVersion(kit()))
|
if (auto qtVersion = QtKitAspect::qtVersion(kit()))
|
||||||
return androidConfig()
|
return AndroidConfig::bestNdkPlatformMatch(AndroidManager::minimumSDK(target()), qtVersion);
|
||||||
.bestNdkPlatformMatch(AndroidManager::minimumSDK(target()), qtVersion);
|
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
if (id == Constants::NdkLocation) {
|
if (id == Constants::NdkLocation) {
|
||||||
if (auto qtVersion = QtKitAspect::qtVersion(kit()))
|
if (auto qtVersion = QtKitAspect::qtVersion(kit()))
|
||||||
return QVariant::fromValue(androidConfig().ndkLocation(qtVersion));
|
return QVariant::fromValue(AndroidConfig::ndkLocation(qtVersion));
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
if (id == Constants::SdkLocation)
|
if (id == Constants::SdkLocation)
|
||||||
return QVariant::fromValue(androidConfig().sdkLocation());
|
return QVariant::fromValue(AndroidConfig::sdkLocation());
|
||||||
|
|
||||||
if (id == Constants::AndroidMkSpecAbis)
|
if (id == Constants::AndroidMkSpecAbis)
|
||||||
return AndroidManager::applicationAbis(target());
|
return AndroidManager::applicationAbis(target());
|
||||||
@@ -1000,7 +999,7 @@ QAbstractItemModel *AndroidBuildApkStep::keystoreCertificates()
|
|||||||
"-storepass", m_keystorePasswd, "-J-Duser.language=en"};
|
"-storepass", m_keystorePasswd, "-J-Duser.language=en"};
|
||||||
|
|
||||||
Process keytoolProc;
|
Process keytoolProc;
|
||||||
keytoolProc.setCommand({androidConfig().keytoolPath(), params});
|
keytoolProc.setCommand({AndroidConfig::keytoolPath(), params});
|
||||||
using namespace std::chrono_literals;
|
using namespace std::chrono_literals;
|
||||||
keytoolProc.runBlocking(30s);
|
keytoolProc.runBlocking(30s);
|
||||||
if (keytoolProc.result() > ProcessResult::FinishedWithError)
|
if (keytoolProc.result() > ProcessResult::FinishedWithError)
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -36,132 +36,87 @@ public:
|
|||||||
int sdcardSize = 0;
|
int sdcardSize = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct SdkForQtVersions
|
namespace AndroidConfig {
|
||||||
{
|
|
||||||
QList<QVersionNumber> versions;
|
|
||||||
QStringList essentialPackages;
|
|
||||||
|
|
||||||
public:
|
QStringList apiLevelNamesFor(const SdkPlatformList &platforms);
|
||||||
bool containsVersion(const QVersionNumber &qtVersion) const;
|
QString apiLevelNameFor(const SdkPlatform *platform);
|
||||||
};
|
|
||||||
|
|
||||||
class AndroidConfig
|
Utils::FilePath sdkLocation();
|
||||||
{
|
|
||||||
public:
|
|
||||||
void load(const Utils::QtcSettings &settings);
|
|
||||||
void save(Utils::QtcSettings &settings) const;
|
|
||||||
|
|
||||||
static QStringList apiLevelNamesFor(const SdkPlatformList &platforms);
|
|
||||||
static QString apiLevelNameFor(const SdkPlatform *platform);
|
|
||||||
|
|
||||||
Utils::FilePath sdkLocation() const;
|
|
||||||
void setSdkLocation(const Utils::FilePath &sdkLocation);
|
void setSdkLocation(const Utils::FilePath &sdkLocation);
|
||||||
QVersionNumber sdkToolsVersion() const;
|
QVersionNumber sdkToolsVersion();
|
||||||
Utils::FilePath sdkToolsVersionPath() const;
|
QVersionNumber buildToolsVersion();
|
||||||
QVersionNumber buildToolsVersion() const;
|
QStringList sdkManagerToolArgs();
|
||||||
QStringList sdkManagerToolArgs() const;
|
|
||||||
void setSdkManagerToolArgs(const QStringList &args);
|
void setSdkManagerToolArgs(const QStringList &args);
|
||||||
|
|
||||||
Utils::FilePath ndkLocation(const QtSupport::QtVersion *qtVersion) const;
|
Utils::FilePath ndkLocation(const QtSupport::QtVersion *qtVersion);
|
||||||
QVersionNumber ndkVersion(const QtSupport::QtVersion *qtVersion) const;
|
QVersionNumber ndkVersion(const QtSupport::QtVersion *qtVersion);
|
||||||
static QVersionNumber ndkVersion(const Utils::FilePath &ndkPath);
|
QVersionNumber ndkVersion(const Utils::FilePath &ndkPath);
|
||||||
|
|
||||||
QUrl sdkToolsUrl() const { return m_sdkToolsUrl; }
|
QUrl sdkToolsUrl();
|
||||||
QByteArray getSdkToolsSha256() const { return m_sdkToolsSha256; }
|
QByteArray getSdkToolsSha256();
|
||||||
|
|
||||||
QStringList defaultEssentials() const;
|
QStringList allEssentials();
|
||||||
QStringList essentialsFromQtVersion(const QtSupport::QtVersion &version) const;
|
|
||||||
QStringList allEssentials() const;
|
|
||||||
bool allEssentialsInstalled(Internal::AndroidSdkManager *sdkManager);
|
bool allEssentialsInstalled(Internal::AndroidSdkManager *sdkManager);
|
||||||
bool sdkToolsOk() const;
|
bool sdkToolsOk();
|
||||||
|
|
||||||
Utils::FilePath openJDKLocation() const;
|
Utils::FilePath openJDKLocation();
|
||||||
void setOpenJDKLocation(const Utils::FilePath &openJDKLocation);
|
void setOpenJDKLocation(const Utils::FilePath &openJDKLocation);
|
||||||
|
|
||||||
QString toolchainHost(const QtSupport::QtVersion *qtVersion) const;
|
QString toolchainHost(const QtSupport::QtVersion *qtVersion);
|
||||||
static QString toolchainHostFromNdk(const Utils::FilePath &ndkPath);
|
QString toolchainHostFromNdk(const Utils::FilePath &ndkPath);
|
||||||
|
|
||||||
QString emulatorArgs() const;
|
QString emulatorArgs();
|
||||||
void setEmulatorArgs(const QString &args);
|
void setEmulatorArgs(const QString &args);
|
||||||
|
|
||||||
bool automaticKitCreation() const;
|
bool automaticKitCreation();
|
||||||
void setAutomaticKitCreation(bool b);
|
void setAutomaticKitCreation(bool b);
|
||||||
|
|
||||||
static Utils::FilePath defaultSdkPath();
|
Utils::FilePath defaultSdkPath();
|
||||||
Utils::FilePath adbToolPath() const;
|
Utils::FilePath adbToolPath();
|
||||||
Utils::FilePath emulatorToolPath() const;
|
Utils::FilePath emulatorToolPath();
|
||||||
Utils::FilePath sdkManagerToolPath() const;
|
Utils::FilePath sdkManagerToolPath();
|
||||||
Utils::FilePath avdManagerToolPath() const;
|
Utils::FilePath avdManagerToolPath();
|
||||||
|
|
||||||
void setTemporarySdkToolsPath(const Utils::FilePath &path);
|
void setTemporarySdkToolsPath(const Utils::FilePath &path);
|
||||||
|
|
||||||
Utils::FilePath toolchainPath(const QtSupport::QtVersion *qtVersion) const;
|
Utils::FilePath toolchainPath(const QtSupport::QtVersion *qtVersion);
|
||||||
static Utils::FilePath toolchainPathFromNdk(const Utils::FilePath &ndkLocation,
|
Utils::FilePath toolchainPathFromNdk(
|
||||||
Utils::OsType hostOs = Utils::HostOsInfo::hostOs());
|
const Utils::FilePath &ndkLocation, Utils::OsType hostOs = Utils::HostOsInfo::hostOs());
|
||||||
static Utils::FilePath clangPathFromNdk(const Utils::FilePath &ndkLocation);
|
Utils::FilePath clangPathFromNdk(const Utils::FilePath &ndkLocation);
|
||||||
|
|
||||||
static Utils::FilePath makePathFromNdk(const Utils::FilePath &ndkLocation);
|
Utils::FilePath makePathFromNdk(const Utils::FilePath &ndkLocation);
|
||||||
|
|
||||||
Utils::FilePath keytoolPath() const;
|
Utils::FilePath keytoolPath();
|
||||||
|
|
||||||
QList<AndroidDeviceInfo> connectedDevices(QString *error = nullptr) const;
|
QList<AndroidDeviceInfo> connectedDevices(QString *error = nullptr);
|
||||||
|
|
||||||
QString bestNdkPlatformMatch(int target, const QtSupport::QtVersion *qtVersion) const;
|
QString bestNdkPlatformMatch(int target, const QtSupport::QtVersion *qtVersion);
|
||||||
|
|
||||||
static QLatin1String displayName(const ProjectExplorer::Abi &abi);
|
QLatin1String displayName(const ProjectExplorer::Abi &abi);
|
||||||
|
|
||||||
QString getProductModel(const QString &device) const;
|
QString getProductModel(const QString &device);
|
||||||
bool isConnected(const QString &serialNumber) const;
|
bool isConnected(const QString &serialNumber);
|
||||||
|
|
||||||
bool sdkFullyConfigured() const { return m_sdkFullyConfigured; }
|
bool sdkFullyConfigured();
|
||||||
void setSdkFullyConfigured(bool allEssentialsInstalled) { m_sdkFullyConfigured = allEssentialsInstalled; }
|
void setSdkFullyConfigured(bool allEssentialsInstalled);
|
||||||
|
|
||||||
static bool isValidNdk(const QString &ndkLocation);
|
bool isValidNdk(const QString &ndkLocation);
|
||||||
QStringList getCustomNdkList() const;
|
QStringList getCustomNdkList();
|
||||||
void addCustomNdk(const QString &customNdk);
|
void addCustomNdk(const QString &customNdk);
|
||||||
void removeCustomNdk(const QString &customNdk);
|
void removeCustomNdk(const QString &customNdk);
|
||||||
void setDefaultNdk(const Utils::FilePath &defaultNdk);
|
void setDefaultNdk(const Utils::FilePath &defaultNdk);
|
||||||
Utils::FilePath defaultNdk() const;
|
Utils::FilePath defaultNdk();
|
||||||
|
|
||||||
Utils::FilePath openSslLocation() const;
|
Utils::FilePath openSslLocation();
|
||||||
void setOpenSslLocation(const Utils::FilePath &openSslLocation);
|
void setOpenSslLocation(const Utils::FilePath &openSslLocation);
|
||||||
|
|
||||||
static Utils::FilePath getJdkPath();
|
Utils::FilePath getJdkPath();
|
||||||
static QStringList getAbis(const QString &device);
|
QStringList getAbis(const QString &device);
|
||||||
static int getSDKVersion(const QString &device);
|
int getSDKVersion(const QString &device);
|
||||||
|
|
||||||
Utils::Environment toolsEnvironment() const;
|
Utils::Environment toolsEnvironment();
|
||||||
|
|
||||||
private:
|
} // namespace AndroidConfig
|
||||||
Utils::FilePath openJDKBinPath() const;
|
|
||||||
Utils::FilePath ndkSubPathFromQtVersion(const QtSupport::QtVersion &version) const; // relative!
|
|
||||||
|
|
||||||
void parseDependenciesJson();
|
|
||||||
|
|
||||||
QList<int> availableNdkPlatforms(const QtSupport::QtVersion *qtVersion) const;
|
|
||||||
|
|
||||||
Utils::FilePath m_sdkLocation;
|
|
||||||
Utils::FilePath m_temporarySdkToolsPath;
|
|
||||||
QStringList m_sdkManagerToolArgs;
|
|
||||||
Utils::FilePath m_openJDKLocation;
|
|
||||||
Utils::FilePath m_keystoreLocation;
|
|
||||||
Utils::FilePath m_openSslLocation;
|
|
||||||
QString m_emulatorArgs;
|
|
||||||
bool m_automaticKitCreation = true;
|
|
||||||
QUrl m_sdkToolsUrl;
|
|
||||||
QByteArray m_sdkToolsSha256;
|
|
||||||
QStringList m_commonEssentialPkgs;
|
|
||||||
SdkForQtVersions m_defaultSdkDepends;
|
|
||||||
QList<SdkForQtVersions> m_specificQtVersions;
|
|
||||||
QStringList m_customNdkList;
|
|
||||||
Utils::FilePath m_defaultNdk;
|
|
||||||
bool m_sdkFullyConfigured = false;
|
|
||||||
|
|
||||||
//caches
|
|
||||||
mutable QHash<QString, QString> m_serialNumberToDeviceName;
|
|
||||||
};
|
|
||||||
|
|
||||||
AndroidConfig &androidConfig();
|
|
||||||
|
|
||||||
class AndroidConfigurations : public QObject
|
class AndroidConfigurations : public QObject
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -262,7 +262,7 @@ void AndroidCreateKeystoreCertificate::buttonBoxAccepted()
|
|||||||
if (!m_stateNameLineEdit->text().isEmpty())
|
if (!m_stateNameLineEdit->text().isEmpty())
|
||||||
distinguishedNames += QLatin1String(", S=") + m_stateNameLineEdit->text().replace(',', QLatin1String("\\,"));
|
distinguishedNames += QLatin1String(", S=") + m_stateNameLineEdit->text().replace(',', QLatin1String("\\,"));
|
||||||
|
|
||||||
const CommandLine command(androidConfig().keytoolPath(),
|
const CommandLine command(AndroidConfig::keytoolPath(),
|
||||||
{"-genkey", "-keyalg", "RSA",
|
{"-genkey", "-keyalg", "RSA",
|
||||||
"-keystore", m_keystoreFilePath.toString(),
|
"-keystore", m_keystoreFilePath.toString(),
|
||||||
"-storepass", keystorePassword(),
|
"-storepass", keystorePassword(),
|
||||||
|
|||||||
@@ -110,8 +110,7 @@ void AndroidDebugSupport::start()
|
|||||||
|
|
||||||
QtSupport::QtVersion *qtVersion = QtSupport::QtKitAspect::qtVersion(kit);
|
QtSupport::QtVersion *qtVersion = QtSupport::QtKitAspect::qtVersion(kit);
|
||||||
if (!HostOsInfo::isWindowsHost()
|
if (!HostOsInfo::isWindowsHost()
|
||||||
&& (qtVersion
|
&& (qtVersion && AndroidConfig::ndkVersion(qtVersion) >= QVersionNumber(11, 0, 0))) {
|
||||||
&& androidConfig().ndkVersion(qtVersion) >= QVersionNumber(11, 0, 0))) {
|
|
||||||
qCDebug(androidDebugSupportLog) << "UseTargetAsync: " << true;
|
qCDebug(androidDebugSupportLog) << "UseTargetAsync: " << true;
|
||||||
setUseTargetAsync(true);
|
setUseTargetAsync(true);
|
||||||
}
|
}
|
||||||
@@ -165,7 +164,7 @@ void AndroidDebugSupport::start()
|
|||||||
|
|
||||||
int sdkVersion = qMax(AndroidManager::minimumSDK(kit), minimumNdk);
|
int sdkVersion = qMax(AndroidManager::minimumSDK(kit), minimumNdk);
|
||||||
if (qtVersion) {
|
if (qtVersion) {
|
||||||
const FilePath ndkLocation = androidConfig().ndkLocation(qtVersion);
|
const FilePath ndkLocation = AndroidConfig::ndkLocation(qtVersion);
|
||||||
FilePath sysRoot = ndkLocation
|
FilePath sysRoot = ndkLocation
|
||||||
/ "platforms"
|
/ "platforms"
|
||||||
/ QString("android-%1").arg(sdkVersion)
|
/ QString("android-%1").arg(sdkVersion)
|
||||||
|
|||||||
@@ -297,7 +297,7 @@ bool AndroidDeployQtStep::init()
|
|||||||
m_apkPath = FilePath::fromString(node->data(Constants::AndroidApk).toString());
|
m_apkPath = FilePath::fromString(node->data(Constants::AndroidApk).toString());
|
||||||
if (!m_apkPath.isEmpty()) {
|
if (!m_apkPath.isEmpty()) {
|
||||||
m_manifestName = FilePath::fromString(node->data(Constants::AndroidManifest).toString());
|
m_manifestName = FilePath::fromString(node->data(Constants::AndroidManifest).toString());
|
||||||
m_command = androidConfig().adbToolPath();
|
m_command = AndroidConfig::adbToolPath();
|
||||||
AndroidManager::setManifestPath(target(), m_manifestName);
|
AndroidManager::setManifestPath(target(), m_manifestName);
|
||||||
} else {
|
} else {
|
||||||
QString jsonFile = AndroidQtVersion::androidDeploymentSettings(target()).toString();
|
QString jsonFile = AndroidQtVersion::androidDeploymentSettings(target()).toString();
|
||||||
@@ -335,13 +335,13 @@ bool AndroidDeployQtStep::init()
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
m_uninstallPreviousPackageRun = true;
|
m_uninstallPreviousPackageRun = true;
|
||||||
m_command = androidConfig().adbToolPath();
|
m_command = AndroidConfig::adbToolPath();
|
||||||
m_apkPath = AndroidManager::packagePath(target());
|
m_apkPath = AndroidManager::packagePath(target());
|
||||||
m_workingDirectory = bc ? AndroidManager::buildDirectory(target()): FilePath();
|
m_workingDirectory = bc ? AndroidManager::buildDirectory(target()): FilePath();
|
||||||
}
|
}
|
||||||
m_environment = bc ? bc->environment() : Environment();
|
m_environment = bc ? bc->environment() : Environment();
|
||||||
|
|
||||||
m_adbPath = androidConfig().adbToolPath();
|
m_adbPath = AndroidConfig::adbToolPath();
|
||||||
|
|
||||||
// Start the AVD if not running.
|
// Start the AVD if not running.
|
||||||
if (!m_avdName.isEmpty() && AndroidAvdManager::findAvd(m_avdName).isEmpty())
|
if (!m_avdName.isEmpty() && AndroidAvdManager::findAvd(m_avdName).isEmpty())
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ static constexpr char wifiDevicePort[] = "5555";
|
|||||||
|
|
||||||
static QString displayNameFromInfo(const AndroidDeviceInfo &info)
|
static QString displayNameFromInfo(const AndroidDeviceInfo &info)
|
||||||
{
|
{
|
||||||
return info.type == IDevice::Hardware ? androidConfig().getProductModel(info.serialNumber)
|
return info.type == IDevice::Hardware ? AndroidConfig::getProductModel(info.serialNumber)
|
||||||
: info.avdName;
|
: info.avdName;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -415,7 +415,7 @@ void AndroidDevice::initAvdSettings()
|
|||||||
|
|
||||||
void AndroidDeviceManager::updateAvdList()
|
void AndroidDeviceManager::updateAvdList()
|
||||||
{
|
{
|
||||||
if (androidConfig().adbToolPath().exists())
|
if (AndroidConfig::adbToolPath().exists())
|
||||||
m_avdListRunner.start(m_avdListRecipe);
|
m_avdListRunner.start(m_avdListRecipe);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -446,7 +446,7 @@ void AndroidDeviceManager::updateDeviceState(const ProjectExplorer::IDevice::Con
|
|||||||
|
|
||||||
expected_str<void> AndroidDeviceManager::createAvd(const CreateAvdInfo &info, bool force)
|
expected_str<void> AndroidDeviceManager::createAvd(const CreateAvdInfo &info, bool force)
|
||||||
{
|
{
|
||||||
CommandLine cmd(androidConfig().avdManagerToolPath(), {"create", "avd", "-n", info.name});
|
CommandLine cmd(AndroidConfig::avdManagerToolPath(), {"create", "avd", "-n", info.name});
|
||||||
cmd.addArgs({"-k", info.sdkStylePath});
|
cmd.addArgs({"-k", info.sdkStylePath});
|
||||||
if (info.sdcardSize > 0)
|
if (info.sdcardSize > 0)
|
||||||
cmd.addArgs({"-c", QString("%1M").arg(info.sdcardSize)});
|
cmd.addArgs({"-c", QString("%1M").arg(info.sdcardSize)});
|
||||||
@@ -460,7 +460,7 @@ expected_str<void> AndroidDeviceManager::createAvd(const CreateAvdInfo &info, bo
|
|||||||
|
|
||||||
Process process;
|
Process process;
|
||||||
process.setProcessMode(ProcessMode::Writer);
|
process.setProcessMode(ProcessMode::Writer);
|
||||||
process.setEnvironment(androidConfig().toolsEnvironment());
|
process.setEnvironment(AndroidConfig::toolsEnvironment());
|
||||||
process.setCommand(cmd);
|
process.setCommand(cmd);
|
||||||
process.setWriteData("yes\n"); // yes to "Do you wish to create a custom hardware profile"
|
process.setWriteData("yes\n"); // yes to "Do you wish to create a custom hardware profile"
|
||||||
|
|
||||||
@@ -521,9 +521,9 @@ void AndroidDeviceManager::eraseAvd(const IDevice::Ptr &device, QWidget *parent)
|
|||||||
|
|
||||||
qCDebug(androidDeviceLog) << QString("Erasing Android AVD \"%1\" from the system.").arg(name);
|
qCDebug(androidDeviceLog) << QString("Erasing Android AVD \"%1\" from the system.").arg(name);
|
||||||
m_removeAvdProcess.reset(new Process);
|
m_removeAvdProcess.reset(new Process);
|
||||||
const CommandLine command(androidConfig().avdManagerToolPath(), {"delete", "avd", "-n", name});
|
const CommandLine command(AndroidConfig::avdManagerToolPath(), {"delete", "avd", "-n", name});
|
||||||
qCDebug(androidDeviceLog).noquote() << "Running command (removeAvd):" << command.toUserOutput();
|
qCDebug(androidDeviceLog).noquote() << "Running command (removeAvd):" << command.toUserOutput();
|
||||||
m_removeAvdProcess->setEnvironment(androidConfig().toolsEnvironment());
|
m_removeAvdProcess->setEnvironment(AndroidConfig::toolsEnvironment());
|
||||||
m_removeAvdProcess->setCommand(command);
|
m_removeAvdProcess->setCommand(command);
|
||||||
connect(m_removeAvdProcess.get(), &Process::done, this, [this, device] {
|
connect(m_removeAvdProcess.get(), &Process::done, this, [this, device] {
|
||||||
const QString name = device->displayName();
|
const QString name = device->displayName();
|
||||||
@@ -618,7 +618,7 @@ void AndroidDeviceManager::setEmulatorArguments(QWidget *parent)
|
|||||||
dialog.setLabelText(Tr::tr("Emulator command-line startup options "
|
dialog.setLabelText(Tr::tr("Emulator command-line startup options "
|
||||||
"(<a href=\"%1\">Help Web Page</a>):")
|
"(<a href=\"%1\">Help Web Page</a>):")
|
||||||
.arg(helpUrl));
|
.arg(helpUrl));
|
||||||
dialog.setTextValue(androidConfig().emulatorArgs());
|
dialog.setTextValue(AndroidConfig::emulatorArgs());
|
||||||
|
|
||||||
if (auto label = dialog.findChild<QLabel*>()) {
|
if (auto label = dialog.findChild<QLabel*>()) {
|
||||||
label->setOpenExternalLinks(true);
|
label->setOpenExternalLinks(true);
|
||||||
@@ -628,12 +628,12 @@ void AndroidDeviceManager::setEmulatorArguments(QWidget *parent)
|
|||||||
if (dialog.exec() != QDialog::Accepted)
|
if (dialog.exec() != QDialog::Accepted)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
androidConfig().setEmulatorArgs(dialog.textValue());
|
AndroidConfig::setEmulatorArgs(dialog.textValue());
|
||||||
}
|
}
|
||||||
|
|
||||||
QString AndroidDeviceManager::getRunningAvdsSerialNumber(const QString &name) const
|
QString AndroidDeviceManager::getRunningAvdsSerialNumber(const QString &name) const
|
||||||
{
|
{
|
||||||
for (const AndroidDeviceInfo &dev : androidConfig().connectedDevices()) {
|
for (const AndroidDeviceInfo &dev : AndroidConfig::connectedDevices()) {
|
||||||
if (!dev.serialNumber.startsWith("emulator"))
|
if (!dev.serialNumber.startsWith("emulator"))
|
||||||
continue;
|
continue;
|
||||||
const QString stdOut = emulatorName(dev.serialNumber);
|
const QString stdOut = emulatorName(dev.serialNumber);
|
||||||
@@ -661,7 +661,7 @@ static FilePath avdFilePath()
|
|||||||
|
|
||||||
void AndroidDeviceManager::setupDevicesWatcher()
|
void AndroidDeviceManager::setupDevicesWatcher()
|
||||||
{
|
{
|
||||||
if (!androidConfig().adbToolPath().exists()) {
|
if (!AndroidConfig::adbToolPath().exists()) {
|
||||||
qCDebug(androidDeviceLog) << "Cannot start ADB device watcher"
|
qCDebug(androidDeviceLog) << "Cannot start ADB device watcher"
|
||||||
<< "because adb path does not exist.";
|
<< "because adb path does not exist.";
|
||||||
return;
|
return;
|
||||||
@@ -693,10 +693,10 @@ void AndroidDeviceManager::setupDevicesWatcher()
|
|||||||
handleDevicesListChange(output);
|
handleDevicesListChange(output);
|
||||||
});
|
});
|
||||||
|
|
||||||
const CommandLine command{androidConfig().adbToolPath(), {"track-devices"}};
|
const CommandLine command{AndroidConfig::adbToolPath(), {"track-devices"}};
|
||||||
m_adbDeviceWatcherProcess->setCommand(command);
|
m_adbDeviceWatcherProcess->setCommand(command);
|
||||||
m_adbDeviceWatcherProcess->setWorkingDirectory(command.executable().parentDir());
|
m_adbDeviceWatcherProcess->setWorkingDirectory(command.executable().parentDir());
|
||||||
m_adbDeviceWatcherProcess->setEnvironment(androidConfig().toolsEnvironment());
|
m_adbDeviceWatcherProcess->setEnvironment(AndroidConfig::toolsEnvironment());
|
||||||
m_adbDeviceWatcherProcess->start();
|
m_adbDeviceWatcherProcess->start();
|
||||||
|
|
||||||
// Setup AVD filesystem watcher to listen for changes when an avd is created/deleted,
|
// Setup AVD filesystem watcher to listen for changes when an avd is created/deleted,
|
||||||
@@ -838,7 +838,7 @@ void AndroidDeviceManager::handleDevicesListChange(const QString &serialNumber)
|
|||||||
devMgr->setDeviceState(avdId, state);
|
devMgr->setDeviceState(avdId, state);
|
||||||
} else {
|
} else {
|
||||||
const Id id = Id(Constants::ANDROID_DEVICE_ID).withSuffix(':' + serial);
|
const Id id = Id(Constants::ANDROID_DEVICE_ID).withSuffix(':' + serial);
|
||||||
QString displayName = androidConfig().getProductModel(serial);
|
QString displayName = AndroidConfig::getProductModel(serial);
|
||||||
// Check if the device is connected via WiFi. A sample serial of such devices can be
|
// Check if the device is connected via WiFi. A sample serial of such devices can be
|
||||||
// like: "192.168.1.190:5555"
|
// like: "192.168.1.190:5555"
|
||||||
static const auto ipRegex = QRegularExpression(ipRegexStr + QStringLiteral(":(\\d{1,5})"));
|
static const auto ipRegex = QRegularExpression(ipRegexStr + QStringLiteral(":(\\d{1,5})"));
|
||||||
@@ -921,16 +921,16 @@ AndroidDeviceManager::AndroidDeviceManager(QObject *parent)
|
|||||||
});
|
});
|
||||||
|
|
||||||
const auto onProcessSetup = [](Process &process) {
|
const auto onProcessSetup = [](Process &process) {
|
||||||
const CommandLine cmd(androidConfig().avdManagerToolPath(), {"list", "avd"});
|
const CommandLine cmd(AndroidConfig::avdManagerToolPath(), {"list", "avd"});
|
||||||
qCDebug(androidDeviceLog).noquote() << "Running AVD Manager command:" << cmd.toUserOutput();
|
qCDebug(androidDeviceLog).noquote() << "Running AVD Manager command:" << cmd.toUserOutput();
|
||||||
process.setEnvironment(androidConfig().toolsEnvironment());
|
process.setEnvironment(AndroidConfig::toolsEnvironment());
|
||||||
process.setCommand(cmd);
|
process.setCommand(cmd);
|
||||||
};
|
};
|
||||||
const auto onProcessDone = [this, storage](const Process &process, DoneWith result) {
|
const auto onProcessDone = [this, storage](const Process &process, DoneWith result) {
|
||||||
const QString output = process.allOutput();
|
const QString output = process.allOutput();
|
||||||
if (result != DoneWith::Success) {
|
if (result != DoneWith::Success) {
|
||||||
qCDebug(androidDeviceLog)
|
qCDebug(androidDeviceLog)
|
||||||
<< "Avd list command failed" << output << androidConfig().sdkToolsVersion();
|
<< "Avd list command failed" << output << AndroidConfig::sdkToolsVersion();
|
||||||
return DoneResult::Error;
|
return DoneResult::Error;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -981,7 +981,7 @@ public:
|
|||||||
":/android/images/androiddevice.png");
|
":/android/images/androiddevice.png");
|
||||||
setConstructionFunction(&AndroidDevice::create);
|
setConstructionFunction(&AndroidDevice::create);
|
||||||
setCreator([] {
|
setCreator([] {
|
||||||
if (!androidConfig().sdkToolsOk()) {
|
if (!AndroidConfig::sdkToolsOk()) {
|
||||||
AndroidDeviceWidget::infoDialog(Tr::tr("Android support is not yet configured."));
|
AndroidDeviceWidget::infoDialog(Tr::tr("Android support is not yet configured."));
|
||||||
return IDevice::Ptr();
|
return IDevice::Ptr();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -202,25 +202,23 @@ QJsonObject deploymentSettings(const Target *target)
|
|||||||
QJsonObject settings;
|
QJsonObject settings;
|
||||||
settings["_description"] = qtcSignature;
|
settings["_description"] = qtcSignature;
|
||||||
settings["qt"] = qt->prefix().toString();
|
settings["qt"] = qt->prefix().toString();
|
||||||
settings["ndk"] = androidConfig().ndkLocation(qt).toString();
|
settings["ndk"] = AndroidConfig::ndkLocation(qt).toString();
|
||||||
settings["sdk"] = androidConfig().sdkLocation().toString();
|
settings["sdk"] = AndroidConfig::sdkLocation().toString();
|
||||||
if (!qt->supportsMultipleQtAbis()) {
|
if (!qt->supportsMultipleQtAbis()) {
|
||||||
const QStringList abis = applicationAbis(target);
|
const QStringList abis = applicationAbis(target);
|
||||||
QTC_ASSERT(abis.size() == 1, return {});
|
QTC_ASSERT(abis.size() == 1, return {});
|
||||||
settings["stdcpp-path"] = (androidConfig().toolchainPath(qt)
|
settings["stdcpp-path"] = (AndroidConfig::toolchainPath(qt)
|
||||||
/ "sysroot/usr/lib"
|
/ "sysroot/usr/lib"
|
||||||
/ archTriplet(abis.first())
|
/ archTriplet(abis.first())
|
||||||
/ "libc++_shared.so").toString();
|
/ "libc++_shared.so").toString();
|
||||||
} else {
|
} else {
|
||||||
settings["stdcpp-path"] = androidConfig()
|
settings["stdcpp-path"]
|
||||||
.toolchainPath(qt)
|
= AndroidConfig::toolchainPath(qt).pathAppended("sysroot/usr/lib").toString();
|
||||||
.pathAppended("sysroot/usr/lib")
|
|
||||||
.toString();
|
|
||||||
}
|
}
|
||||||
settings["toolchain-prefix"] = "llvm";
|
settings["toolchain-prefix"] = "llvm";
|
||||||
settings["tool-prefix"] = "llvm";
|
settings["tool-prefix"] = "llvm";
|
||||||
settings["useLLVM"] = true;
|
settings["useLLVM"] = true;
|
||||||
settings["ndk-host"] = androidConfig().toolchainHost(qt);
|
settings["ndk-host"] = AndroidConfig::toolchainHost(qt);
|
||||||
return settings;
|
return settings;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -584,7 +582,7 @@ bool checkKeystorePassword(const FilePath &keystorePath, const QString &keystore
|
|||||||
{
|
{
|
||||||
if (keystorePasswd.isEmpty())
|
if (keystorePasswd.isEmpty())
|
||||||
return false;
|
return false;
|
||||||
const CommandLine cmd(androidConfig().keytoolPath(),
|
const CommandLine cmd(AndroidConfig::keytoolPath(),
|
||||||
{"-list", "-keystore", keystorePath.toUserOutput(),
|
{"-list", "-keystore", keystorePath.toUserOutput(),
|
||||||
"--storepass", keystorePasswd});
|
"--storepass", keystorePasswd});
|
||||||
Process proc;
|
Process proc;
|
||||||
@@ -605,7 +603,7 @@ bool checkCertificatePassword(const FilePath &keystorePath, const QString &keyst
|
|||||||
arguments << certificatePasswd;
|
arguments << certificatePasswd;
|
||||||
|
|
||||||
Process proc;
|
Process proc;
|
||||||
proc.setCommand({androidConfig().keytoolPath(), arguments});
|
proc.setCommand({AndroidConfig::keytoolPath(), arguments});
|
||||||
proc.runBlocking(10s);
|
proc.runBlocking(10s);
|
||||||
return proc.result() == ProcessResult::FinishedWithSuccess;
|
return proc.result() == ProcessResult::FinishedWithSuccess;
|
||||||
}
|
}
|
||||||
@@ -618,7 +616,7 @@ bool checkCertificateExists(const FilePath &keystorePath, const QString &keystor
|
|||||||
"--storepass", keystorePasswd, "-alias", alias};
|
"--storepass", keystorePasswd, "-alias", alias};
|
||||||
|
|
||||||
Process proc;
|
Process proc;
|
||||||
proc.setCommand({androidConfig().keytoolPath(), arguments});
|
proc.setCommand({AndroidConfig::keytoolPath(), arguments});
|
||||||
proc.runBlocking(10s);
|
proc.runBlocking(10s);
|
||||||
return proc.result() == ProcessResult::FinishedWithSuccess;
|
return proc.result() == ProcessResult::FinishedWithSuccess;
|
||||||
}
|
}
|
||||||
@@ -626,7 +624,7 @@ bool checkCertificateExists(const FilePath &keystorePath, const QString &keystor
|
|||||||
Process *startAdbProcess(const QStringList &args, QString *err)
|
Process *startAdbProcess(const QStringList &args, QString *err)
|
||||||
{
|
{
|
||||||
std::unique_ptr<Process> process(new Process);
|
std::unique_ptr<Process> process(new Process);
|
||||||
const FilePath adb = androidConfig().adbToolPath();
|
const FilePath adb = AndroidConfig::adbToolPath();
|
||||||
const CommandLine command{adb, args};
|
const CommandLine command{adb, args};
|
||||||
qCDebug(androidManagerLog).noquote() << "Running command (async):" << command.toUserOutput();
|
qCDebug(androidManagerLog).noquote() << "Running command (async):" << command.toUserOutput();
|
||||||
process->setCommand(command);
|
process->setCommand(command);
|
||||||
@@ -664,7 +662,7 @@ static SdkToolResult runCommand(const CommandLine &command, const QByteArray &wr
|
|||||||
|
|
||||||
SdkToolResult runAdbCommand(const QStringList &args, const QByteArray &writeData, int timeoutS)
|
SdkToolResult runAdbCommand(const QStringList &args, const QByteArray &writeData, int timeoutS)
|
||||||
{
|
{
|
||||||
return runCommand({androidConfig().adbToolPath(), args}, writeData, timeoutS);
|
return runCommand({AndroidConfig::adbToolPath(), args}, writeData, timeoutS);
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace Android::AndroidManager
|
} // namespace Android::AndroidManager
|
||||||
|
|||||||
@@ -592,7 +592,7 @@ void AndroidManifestEditorWidget::postSave()
|
|||||||
const FilePath docPath = m_textEditorWidget->textDocument()->filePath();
|
const FilePath docPath = m_textEditorWidget->textDocument()->filePath();
|
||||||
if (Target *target = androidTarget(docPath)) {
|
if (Target *target = androidTarget(docPath)) {
|
||||||
if (BuildConfiguration *bc = target->activeBuildConfiguration()) {
|
if (BuildConfiguration *bc = target->activeBuildConfiguration()) {
|
||||||
QString androidNdkPlatform = androidConfig().bestNdkPlatformMatch(
|
QString androidNdkPlatform = AndroidConfig::bestNdkPlatformMatch(
|
||||||
AndroidManager::minimumSDK(target),
|
AndroidManager::minimumSDK(target),
|
||||||
QtSupport::QtKitAspect::qtVersion(
|
QtSupport::QtKitAspect::qtVersion(
|
||||||
androidTarget(m_textEditorWidget->textDocument()->filePath())->kit()));
|
androidTarget(m_textEditorWidget->textDocument()->filePath())->kit()));
|
||||||
|
|||||||
@@ -135,7 +135,7 @@ class AndroidPlugin final : public ExtensionSystem::IPlugin
|
|||||||
return v->targetDeviceTypes().contains(Android::Constants::ANDROID_DEVICE_TYPE);
|
return v->targetDeviceTypes().contains(Android::Constants::ANDROID_DEVICE_TYPE);
|
||||||
}).isEmpty();
|
}).isEmpty();
|
||||||
|
|
||||||
if (!androidConfig().sdkFullyConfigured() && qtForAndroidInstalled)
|
if (!AndroidConfig::sdkFullyConfigured() && qtForAndroidInstalled)
|
||||||
askUserAboutAndroidSetup();
|
askUserAboutAndroidSetup();
|
||||||
|
|
||||||
AndroidConfigurations::registerNewToolchains();
|
AndroidConfigurations::registerNewToolchains();
|
||||||
|
|||||||
@@ -128,7 +128,7 @@ FilePath AndroidQmlPreviewWorker::designViewerApkPath(const QString &abi) const
|
|||||||
|
|
||||||
CommandLine AndroidQmlPreviewWorker::adbCommand(const QStringList &arguments) const
|
CommandLine AndroidQmlPreviewWorker::adbCommand(const QStringList &arguments) const
|
||||||
{
|
{
|
||||||
CommandLine cmd{androidConfig().adbToolPath()};
|
CommandLine cmd{AndroidConfig::adbToolPath()};
|
||||||
if (!m_serialNumber.isEmpty())
|
if (!m_serialNumber.isEmpty())
|
||||||
cmd.addArgs(AndroidDeviceInfo::adbSelector(m_serialNumber));
|
cmd.addArgs(AndroidDeviceInfo::adbSelector(m_serialNumber));
|
||||||
cmd.addArg("shell");
|
cmd.addArg("shell");
|
||||||
@@ -200,7 +200,7 @@ void AndroidQmlPreviewWorker::startLogcat()
|
|||||||
QString args = QString("logcat --pid=%1").arg(m_viewerPid);
|
QString args = QString("logcat --pid=%1").arg(m_viewerPid);
|
||||||
if (!m_logcatStartTimeStamp.isEmpty())
|
if (!m_logcatStartTimeStamp.isEmpty())
|
||||||
args += QString(" -T '%1'").arg(m_logcatStartTimeStamp);
|
args += QString(" -T '%1'").arg(m_logcatStartTimeStamp);
|
||||||
CommandLine cmd(androidConfig().adbToolPath());
|
CommandLine cmd(AndroidConfig::adbToolPath());
|
||||||
cmd.setArguments(args);
|
cmd.setArguments(args);
|
||||||
m_logcatProcess.setCommand(cmd);
|
m_logcatProcess.setCommand(cmd);
|
||||||
m_logcatProcess.setUseCtrlCStub(true);
|
m_logcatProcess.setUseCtrlCStub(true);
|
||||||
|
|||||||
@@ -61,9 +61,9 @@ QString AndroidQtVersion::invalidReason() const
|
|||||||
{
|
{
|
||||||
QString tmp = QtVersion::invalidReason();
|
QString tmp = QtVersion::invalidReason();
|
||||||
if (tmp.isEmpty()) {
|
if (tmp.isEmpty()) {
|
||||||
if (androidConfig().ndkLocation(this).isEmpty())
|
if (AndroidConfig::ndkLocation(this).isEmpty())
|
||||||
return Tr::tr("NDK is not configured in Devices > Android.");
|
return Tr::tr("NDK is not configured in Devices > Android.");
|
||||||
if (androidConfig().sdkLocation().isEmpty())
|
if (AndroidConfig::sdkLocation().isEmpty())
|
||||||
return Tr::tr("SDK is not configured in Devices > Android.");
|
return Tr::tr("SDK is not configured in Devices > Android.");
|
||||||
if (qtAbis().isEmpty())
|
if (qtAbis().isEmpty())
|
||||||
return Tr::tr("Failed to detect the ABIs used by the Qt version. Check the settings in "
|
return Tr::tr("Failed to detect the ABIs used by the Qt version. Check the settings in "
|
||||||
@@ -79,7 +79,7 @@ bool AndroidQtVersion::supportsMultipleQtAbis() const
|
|||||||
|
|
||||||
Abis AndroidQtVersion::detectQtAbis() const
|
Abis AndroidQtVersion::detectQtAbis() const
|
||||||
{
|
{
|
||||||
const bool conf = androidConfig().sdkFullyConfigured();
|
const bool conf = AndroidConfig::sdkFullyConfigured();
|
||||||
return conf ? Utils::transform<Abis>(androidAbis(), &AndroidManager::androidAbi2Abi) : Abis();
|
return conf ? Utils::transform<Abis>(androidAbis(), &AndroidManager::androidAbi2Abi) : Abis();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -87,18 +87,17 @@ void AndroidQtVersion::addToEnvironment(const Kit *k, Utils::Environment &env) c
|
|||||||
{
|
{
|
||||||
QtVersion::addToEnvironment(k, env);
|
QtVersion::addToEnvironment(k, env);
|
||||||
|
|
||||||
const AndroidConfig &config = androidConfig();
|
|
||||||
// this env vars are used by qmake mkspecs to generate makefiles (check QTDIR/mkspecs/android-g++/qmake.conf for more info)
|
// this env vars are used by qmake mkspecs to generate makefiles (check QTDIR/mkspecs/android-g++/qmake.conf for more info)
|
||||||
env.set(QLatin1String("ANDROID_NDK_HOST"), config.toolchainHost(this));
|
env.set(QLatin1String("ANDROID_NDK_HOST"), AndroidConfig::toolchainHost(this));
|
||||||
env.set(QLatin1String("ANDROID_NDK_ROOT"), config.ndkLocation(this).toUserOutput());
|
env.set(QLatin1String("ANDROID_NDK_ROOT"), AndroidConfig::ndkLocation(this).toUserOutput());
|
||||||
env.set(QLatin1String("ANDROID_NDK_PLATFORM"),
|
env.set(QLatin1String("ANDROID_NDK_PLATFORM"),
|
||||||
config.bestNdkPlatformMatch(qMax(minimumNDK(), AndroidManager::minimumSDK(k)), this));
|
AndroidConfig::bestNdkPlatformMatch(qMax(minimumNDK(), AndroidManager::minimumSDK(k)), this));
|
||||||
}
|
}
|
||||||
|
|
||||||
void AndroidQtVersion::setupQmakeRunEnvironment(Utils::Environment &env) const
|
void AndroidQtVersion::setupQmakeRunEnvironment(Utils::Environment &env) const
|
||||||
{
|
{
|
||||||
env.set(QLatin1String("ANDROID_NDK_ROOT"),
|
env.set(QLatin1String("ANDROID_NDK_ROOT"),
|
||||||
androidConfig().ndkLocation(this).toUserOutput());
|
AndroidConfig::ndkLocation(this).toUserOutput());
|
||||||
}
|
}
|
||||||
|
|
||||||
QString AndroidQtVersion::description() const
|
QString AndroidQtVersion::description() const
|
||||||
|
|||||||
@@ -184,7 +184,7 @@ void AndroidRunner::checkAVD()
|
|||||||
m_checkAVDTimer.stop();
|
m_checkAVDTimer.stop();
|
||||||
AndroidManager::setDeviceSerialNumber(m_target, serialNumber);
|
AndroidManager::setDeviceSerialNumber(m_target, serialNumber);
|
||||||
emit asyncStart();
|
emit asyncStart();
|
||||||
} else if (!androidConfig().isConnected(serialNumber)) {
|
} else if (!AndroidConfig::isConnected(serialNumber)) {
|
||||||
// device was disconnected
|
// device was disconnected
|
||||||
m_checkAVDTimer.stop();
|
m_checkAVDTimer.stop();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -93,11 +93,9 @@ static FilePath debugServer(bool useLldb, const Target *target)
|
|||||||
QtSupport::QtVersion *qtVersion = QtSupport::QtKitAspect::qtVersion(target->kit());
|
QtSupport::QtVersion *qtVersion = QtSupport::QtKitAspect::qtVersion(target->kit());
|
||||||
QString preferredAbi = AndroidManager::apkDevicePreferredAbi(target);
|
QString preferredAbi = AndroidManager::apkDevicePreferredAbi(target);
|
||||||
|
|
||||||
const AndroidConfig &config = androidConfig();
|
|
||||||
|
|
||||||
if (useLldb) {
|
if (useLldb) {
|
||||||
// Search suitable lldb-server binary.
|
// Search suitable lldb-server binary.
|
||||||
const FilePath prebuilt = config.ndkLocation(qtVersion) / "toolchains/llvm/prebuilt";
|
const FilePath prebuilt = AndroidConfig::ndkLocation(qtVersion) / "toolchains/llvm/prebuilt";
|
||||||
const QString abiNeedle = lldbServerArch2(preferredAbi);
|
const QString abiNeedle = lldbServerArch2(preferredAbi);
|
||||||
|
|
||||||
// The new, built-in LLDB.
|
// The new, built-in LLDB.
|
||||||
@@ -117,7 +115,7 @@ static FilePath debugServer(bool useLldb, const Target *target)
|
|||||||
return lldbServer;
|
return lldbServer;
|
||||||
} else {
|
} else {
|
||||||
// Search suitable gdbserver binary.
|
// Search suitable gdbserver binary.
|
||||||
const FilePath path = config.ndkLocation(qtVersion)
|
const FilePath path = AndroidConfig::ndkLocation(qtVersion)
|
||||||
.pathAppended(QString("prebuilt/android-%1/gdbserver/gdbserver")
|
.pathAppended(QString("prebuilt/android-%1/gdbserver/gdbserver")
|
||||||
.arg(gdbServerArch(preferredAbi)));
|
.arg(gdbServerArch(preferredAbi)));
|
||||||
if (path.exists())
|
if (path.exists())
|
||||||
@@ -429,7 +427,7 @@ void Android::Internal::AndroidRunnerWorker::asyncStartLogcat()
|
|||||||
}
|
}
|
||||||
|
|
||||||
const QStringList logcatArgs = selector() << "logcat" << timeArg;
|
const QStringList logcatArgs = selector() << "logcat" << timeArg;
|
||||||
const FilePath adb = androidConfig().adbToolPath();
|
const FilePath adb = AndroidConfig::adbToolPath();
|
||||||
qCDebug(androidRunWorkerLog).noquote() << "Running logcat command (async):"
|
qCDebug(androidRunWorkerLog).noquote() << "Running logcat command (async):"
|
||||||
<< CommandLine(adb, logcatArgs).toUserOutput();
|
<< CommandLine(adb, logcatArgs).toUserOutput();
|
||||||
m_adbLogcatProcess->setCommand({adb, logcatArgs});
|
m_adbLogcatProcess->setCommand({adb, logcatArgs});
|
||||||
@@ -632,7 +630,7 @@ void AndroidRunnerWorker::asyncStart()
|
|||||||
const Storage<PidUserPair> pidStorage;
|
const Storage<PidUserPair> pidStorage;
|
||||||
const LoopUntil iterator([pidStorage](int) { return pidStorage->first <= 0; });
|
const LoopUntil iterator([pidStorage](int) { return pidStorage->first <= 0; });
|
||||||
|
|
||||||
const FilePath adbPath = androidConfig().adbToolPath();
|
const FilePath adbPath = AndroidConfig::adbToolPath();
|
||||||
const QStringList args = selector();
|
const QStringList args = selector();
|
||||||
|
|
||||||
const auto onPidSetup = [adbPath, args, packageName = m_packageName,
|
const auto onPidSetup = [adbPath, args, packageName = m_packageName,
|
||||||
@@ -710,7 +708,7 @@ void AndroidRunnerWorker::handleJdbWaiting()
|
|||||||
}
|
}
|
||||||
m_afterFinishAdbCommands.push_back(removeForward.join(' '));
|
m_afterFinishAdbCommands.push_back(removeForward.join(' '));
|
||||||
|
|
||||||
const FilePath jdbPath = androidConfig().openJDKLocation()
|
const FilePath jdbPath = AndroidConfig::openJDKLocation()
|
||||||
.pathAppended("bin/jdb").withExecutableSuffix();
|
.pathAppended("bin/jdb").withExecutableSuffix();
|
||||||
|
|
||||||
QStringList jdbArgs("-connect");
|
QStringList jdbArgs("-connect");
|
||||||
|
|||||||
@@ -106,7 +106,7 @@ GroupItem downloadSdkRecipe()
|
|||||||
Storage<StorageStruct> storage;
|
Storage<StorageStruct> storage;
|
||||||
|
|
||||||
const auto onSetup = [] {
|
const auto onSetup = [] {
|
||||||
if (androidConfig().sdkToolsUrl().isEmpty()) {
|
if (AndroidConfig::sdkToolsUrl().isEmpty()) {
|
||||||
logError(Tr::tr("The SDK Tools download URL is empty."));
|
logError(Tr::tr("The SDK Tools download URL is empty."));
|
||||||
return SetupResult::StopWithError;
|
return SetupResult::StopWithError;
|
||||||
}
|
}
|
||||||
@@ -114,7 +114,7 @@ GroupItem downloadSdkRecipe()
|
|||||||
};
|
};
|
||||||
|
|
||||||
const auto onQuerySetup = [storage](NetworkQuery &query) {
|
const auto onQuerySetup = [storage](NetworkQuery &query) {
|
||||||
query.setRequest(QNetworkRequest(androidConfig().sdkToolsUrl()));
|
query.setRequest(QNetworkRequest(AndroidConfig::sdkToolsUrl()));
|
||||||
query.setNetworkAccessManager(NetworkAccessManager::instance());
|
query.setNetworkAccessManager(NetworkAccessManager::instance());
|
||||||
NetworkQuery *queryPtr = &query;
|
NetworkQuery *queryPtr = &query;
|
||||||
QProgressDialog *progressDialog = storage->progressDialog.get();
|
QProgressDialog *progressDialog = storage->progressDialog.get();
|
||||||
@@ -166,7 +166,7 @@ GroupItem downloadSdkRecipe()
|
|||||||
if (!storage->sdkFileName)
|
if (!storage->sdkFileName)
|
||||||
return SetupResult::StopWithError;
|
return SetupResult::StopWithError;
|
||||||
async.setConcurrentCallData(validateFileIntegrity, *storage->sdkFileName,
|
async.setConcurrentCallData(validateFileIntegrity, *storage->sdkFileName,
|
||||||
androidConfig().getSdkToolsSha256());
|
AndroidConfig::getSdkToolsSha256());
|
||||||
storage->progressDialog->setRange(0, 0);
|
storage->progressDialog->setRange(0, 0);
|
||||||
storage->progressDialog->setLabelText(Tr::tr("Verifying package integrity..."));
|
storage->progressDialog->setLabelText(Tr::tr("Verifying package integrity..."));
|
||||||
return SetupResult::Continue;
|
return SetupResult::Continue;
|
||||||
@@ -197,7 +197,7 @@ GroupItem downloadSdkRecipe()
|
|||||||
logError(Tr::tr("Unarchiving error."));
|
logError(Tr::tr("Unarchiving error."));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
androidConfig().setTemporarySdkToolsPath(
|
AndroidConfig::setTemporarySdkToolsPath(
|
||||||
storage->sdkFileName->parentDir().pathAppended(Constants::cmdlineToolsName));
|
storage->sdkFileName->parentDir().pathAppended(Constants::cmdlineToolsName));
|
||||||
};
|
};
|
||||||
const auto onCancelSetup = [storage] { return std::make_pair(storage->progressDialog.get(),
|
const auto onCancelSetup = [storage] { return std::make_pair(storage->progressDialog.get(),
|
||||||
|
|||||||
@@ -113,9 +113,9 @@ private:
|
|||||||
OutputFormatter *m_formatter = nullptr;
|
OutputFormatter *m_formatter = nullptr;
|
||||||
};
|
};
|
||||||
|
|
||||||
static QString sdkRootArg(const AndroidConfig &config)
|
static QString sdkRootArg()
|
||||||
{
|
{
|
||||||
return "--sdk_root=" + config.sdkLocation().toString();
|
return "--sdk_root=" + AndroidConfig::sdkLocation().toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
const QRegularExpression &assertionRegExp()
|
const QRegularExpression &assertionRegExp()
|
||||||
@@ -172,9 +172,9 @@ static GroupItem licensesRecipe(const Storage<DialogStorage> &dialogStorage)
|
|||||||
"respective licenses are not accepted.") + "\n\n",
|
"respective licenses are not accepted.") + "\n\n",
|
||||||
LogMessageFormat);
|
LogMessageFormat);
|
||||||
process.setProcessMode(ProcessMode::Writer);
|
process.setProcessMode(ProcessMode::Writer);
|
||||||
process.setEnvironment(androidConfig().toolsEnvironment());
|
process.setEnvironment(AndroidConfig::toolsEnvironment());
|
||||||
process.setCommand(CommandLine(androidConfig().sdkManagerToolPath(),
|
process.setCommand(CommandLine(AndroidConfig::sdkManagerToolPath(),
|
||||||
{"--licenses", sdkRootArg(androidConfig())}));
|
{"--licenses", sdkRootArg()}));
|
||||||
process.setUseCtrlCStub(true);
|
process.setUseCtrlCStub(true);
|
||||||
|
|
||||||
Process *processPtr = &process;
|
Process *processPtr = &process;
|
||||||
@@ -227,9 +227,9 @@ static GroupItem licensesRecipe(const Storage<DialogStorage> &dialogStorage)
|
|||||||
static void setupSdkProcess(const QStringList &args, Process *process,
|
static void setupSdkProcess(const QStringList &args, Process *process,
|
||||||
QuestionProgressDialog *dialog, int current, int total)
|
QuestionProgressDialog *dialog, int current, int total)
|
||||||
{
|
{
|
||||||
process->setEnvironment(androidConfig().toolsEnvironment());
|
process->setEnvironment(AndroidConfig::toolsEnvironment());
|
||||||
process->setCommand({androidConfig().sdkManagerToolPath(),
|
process->setCommand({AndroidConfig::sdkManagerToolPath(),
|
||||||
args + androidConfig().sdkManagerToolArgs()});
|
args + AndroidConfig::sdkManagerToolArgs()});
|
||||||
QObject::connect(process, &Process::readyReadStandardOutput, dialog,
|
QObject::connect(process, &Process::readyReadStandardOutput, dialog,
|
||||||
[process, dialog, current, total] {
|
[process, dialog, current, total] {
|
||||||
QTextCodec *codec = QTextCodec::codecForLocale();
|
QTextCodec *codec = QTextCodec::codecForLocale();
|
||||||
@@ -269,7 +269,7 @@ static GroupItem installationRecipe(const Storage<DialogStorage> &dialogStorage,
|
|||||||
const int total = change.count();
|
const int total = change.count();
|
||||||
const LoopList uninstallIterator(change.toUninstall);
|
const LoopList uninstallIterator(change.toUninstall);
|
||||||
const auto onUninstallSetup = [dialogStorage, uninstallIterator, total](Process &process) {
|
const auto onUninstallSetup = [dialogStorage, uninstallIterator, total](Process &process) {
|
||||||
const QStringList args = {"--uninstall", *uninstallIterator, sdkRootArg(androidConfig())};
|
const QStringList args = {"--uninstall", *uninstallIterator, sdkRootArg()};
|
||||||
QuestionProgressDialog *dialog = dialogStorage->m_dialog.get();
|
QuestionProgressDialog *dialog = dialogStorage->m_dialog.get();
|
||||||
setupSdkProcess(args, &process, dialog, uninstallIterator.iteration(), total);
|
setupSdkProcess(args, &process, dialog, uninstallIterator.iteration(), total);
|
||||||
dialog->appendMessage(Tr::tr("Uninstalling %1...").arg(*uninstallIterator) + '\n',
|
dialog->appendMessage(Tr::tr("Uninstalling %1...").arg(*uninstallIterator) + '\n',
|
||||||
@@ -280,7 +280,7 @@ static GroupItem installationRecipe(const Storage<DialogStorage> &dialogStorage,
|
|||||||
const LoopList installIterator(change.toInstall);
|
const LoopList installIterator(change.toInstall);
|
||||||
const int offset = change.toUninstall.count();
|
const int offset = change.toUninstall.count();
|
||||||
const auto onInstallSetup = [dialogStorage, installIterator, offset, total](Process &process) {
|
const auto onInstallSetup = [dialogStorage, installIterator, offset, total](Process &process) {
|
||||||
const QStringList args = {*installIterator, sdkRootArg(androidConfig())};
|
const QStringList args = {*installIterator, sdkRootArg()};
|
||||||
QuestionProgressDialog *dialog = dialogStorage->m_dialog.get();
|
QuestionProgressDialog *dialog = dialogStorage->m_dialog.get();
|
||||||
setupSdkProcess(args, &process, dialog, offset + installIterator.iteration(), total);
|
setupSdkProcess(args, &process, dialog, offset + installIterator.iteration(), total);
|
||||||
dialog->appendMessage(Tr::tr("Installing %1...").arg(*installIterator) + '\n',
|
dialog->appendMessage(Tr::tr("Installing %1...").arg(*installIterator) + '\n',
|
||||||
@@ -310,7 +310,7 @@ static GroupItem installationRecipe(const Storage<DialogStorage> &dialogStorage,
|
|||||||
static GroupItem updateRecipe(const Storage<DialogStorage> &dialogStorage)
|
static GroupItem updateRecipe(const Storage<DialogStorage> &dialogStorage)
|
||||||
{
|
{
|
||||||
const auto onUpdateSetup = [dialogStorage](Process &process) {
|
const auto onUpdateSetup = [dialogStorage](Process &process) {
|
||||||
const QStringList args = {"--update", sdkRootArg(androidConfig())};
|
const QStringList args = {"--update", sdkRootArg()};
|
||||||
QuestionProgressDialog *dialog = dialogStorage->m_dialog.get();
|
QuestionProgressDialog *dialog = dialogStorage->m_dialog.get();
|
||||||
setupSdkProcess(args, &process, dialog, 0, 1);
|
setupSdkProcess(args, &process, dialog, 0, 1);
|
||||||
dialog->appendMessage(Tr::tr("Updating installed packages....") + '\n', NormalMessageFormat);
|
dialog->appendMessage(Tr::tr("Updating installed packages....") + '\n', NormalMessageFormat);
|
||||||
@@ -369,7 +369,7 @@ const AndroidSdkPackageList &AndroidSdkManager::allSdkPackages()
|
|||||||
|
|
||||||
QStringList AndroidSdkManager::notFoundEssentialSdkPackages()
|
QStringList AndroidSdkManager::notFoundEssentialSdkPackages()
|
||||||
{
|
{
|
||||||
QStringList essentials = androidConfig().allEssentials();
|
QStringList essentials = AndroidConfig::allEssentials();
|
||||||
const AndroidSdkPackageList &packages = allSdkPackages();
|
const AndroidSdkPackageList &packages = allSdkPackages();
|
||||||
for (AndroidSdkPackage *package : packages) {
|
for (AndroidSdkPackage *package : packages) {
|
||||||
essentials.removeOne(package->sdkStylePath());
|
essentials.removeOne(package->sdkStylePath());
|
||||||
@@ -381,7 +381,7 @@ QStringList AndroidSdkManager::notFoundEssentialSdkPackages()
|
|||||||
|
|
||||||
QStringList AndroidSdkManager::missingEssentialSdkPackages()
|
QStringList AndroidSdkManager::missingEssentialSdkPackages()
|
||||||
{
|
{
|
||||||
const QStringList essentials = androidConfig().allEssentials();
|
const QStringList essentials = AndroidConfig::allEssentials();
|
||||||
const AndroidSdkPackageList &packages = allSdkPackages();
|
const AndroidSdkPackageList &packages = allSdkPackages();
|
||||||
QStringList missingPackages;
|
QStringList missingPackages;
|
||||||
for (AndroidSdkPackage *package : packages) {
|
for (AndroidSdkPackage *package : packages) {
|
||||||
@@ -461,7 +461,7 @@ BuildToolsList AndroidSdkManager::filteredBuildTools(int minApiLevel,
|
|||||||
|
|
||||||
void AndroidSdkManager::refreshPackages()
|
void AndroidSdkManager::refreshPackages()
|
||||||
{
|
{
|
||||||
if (androidConfig().sdkManagerToolPath() != m_d->lastSdkManagerPath)
|
if (AndroidConfig::sdkManagerToolPath() != m_d->lastSdkManagerPath)
|
||||||
reloadPackages();
|
reloadPackages();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -479,14 +479,14 @@ bool AndroidSdkManager::packageListingSuccessful() const
|
|||||||
Runs the \c sdkmanger tool with arguments \a args. Returns \c true if the command is
|
Runs the \c sdkmanger tool with arguments \a args. Returns \c true if the command is
|
||||||
successfully executed. Output is copied into \a output. The function blocks the calling thread.
|
successfully executed. Output is copied into \a output. The function blocks the calling thread.
|
||||||
*/
|
*/
|
||||||
static bool sdkManagerCommand(const AndroidConfig &config, const QStringList &args, QString *output)
|
static bool sdkManagerCommand(const QStringList &args, QString *output)
|
||||||
{
|
{
|
||||||
QStringList newArgs = args;
|
QStringList newArgs = args;
|
||||||
newArgs.append(sdkRootArg(config));
|
newArgs.append(sdkRootArg());
|
||||||
Process proc;
|
Process proc;
|
||||||
proc.setEnvironment(config.toolsEnvironment());
|
proc.setEnvironment(AndroidConfig::toolsEnvironment());
|
||||||
proc.setTimeOutMessageBoxEnabled(true);
|
proc.setTimeOutMessageBoxEnabled(true);
|
||||||
proc.setCommand({config.sdkManagerToolPath(), newArgs});
|
proc.setCommand({AndroidConfig::sdkManagerToolPath(), newArgs});
|
||||||
qCDebug(sdkManagerLog).noquote() << "Running SDK Manager command (sync):"
|
qCDebug(sdkManagerLog).noquote() << "Running SDK Manager command (sync):"
|
||||||
<< proc.commandLine().toUserOutput();
|
<< proc.commandLine().toUserOutput();
|
||||||
proc.runBlocking(60s, EventLoopMode::On);
|
proc.runBlocking(60s, EventLoopMode::On);
|
||||||
@@ -516,10 +516,10 @@ void AndroidSdkManagerPrivate::reloadSdkPackages()
|
|||||||
qDeleteAll(m_allPackages);
|
qDeleteAll(m_allPackages);
|
||||||
m_allPackages.clear();
|
m_allPackages.clear();
|
||||||
|
|
||||||
lastSdkManagerPath = androidConfig().sdkManagerToolPath();
|
lastSdkManagerPath = AndroidConfig::sdkManagerToolPath();
|
||||||
m_packageListingSuccessful = false;
|
m_packageListingSuccessful = false;
|
||||||
|
|
||||||
if (androidConfig().sdkToolsVersion().isNull()) {
|
if (AndroidConfig::sdkToolsVersion().isNull()) {
|
||||||
// Configuration has invalid sdk path or corrupt installation.
|
// Configuration has invalid sdk path or corrupt installation.
|
||||||
emit m_sdkManager.packageReloadFinished();
|
emit m_sdkManager.packageReloadFinished();
|
||||||
return;
|
return;
|
||||||
@@ -527,8 +527,8 @@ void AndroidSdkManagerPrivate::reloadSdkPackages()
|
|||||||
|
|
||||||
QString packageListing;
|
QString packageListing;
|
||||||
QStringList args({"--list", "--verbose"});
|
QStringList args({"--list", "--verbose"});
|
||||||
args << androidConfig().sdkManagerToolArgs();
|
args << AndroidConfig::sdkManagerToolArgs();
|
||||||
m_packageListingSuccessful = sdkManagerCommand(androidConfig(), args, &packageListing);
|
m_packageListingSuccessful = sdkManagerCommand(args, &packageListing);
|
||||||
if (m_packageListingSuccessful) {
|
if (m_packageListingSuccessful) {
|
||||||
SdkManagerOutputParser parser(m_allPackages);
|
SdkManagerOutputParser parser(m_allPackages);
|
||||||
parser.parsePackageListing(packageListing);
|
parser.parsePackageListing(packageListing);
|
||||||
|
|||||||
@@ -40,9 +40,9 @@ public:
|
|||||||
m_argumentDetailsEdit = new QPlainTextEdit;
|
m_argumentDetailsEdit = new QPlainTextEdit;
|
||||||
m_argumentDetailsEdit->setReadOnly(true);
|
m_argumentDetailsEdit->setReadOnly(true);
|
||||||
|
|
||||||
m_process.setEnvironment(androidConfig().toolsEnvironment());
|
m_process.setEnvironment(AndroidConfig::toolsEnvironment());
|
||||||
m_process.setCommand({androidConfig().sdkManagerToolPath(),
|
m_process.setCommand({AndroidConfig::sdkManagerToolPath(),
|
||||||
{"--help", "--sdk_root=" + androidConfig().sdkLocation().toString()}});
|
{"--help", "--sdk_root=" + AndroidConfig::sdkLocation().toString()}});
|
||||||
connect(&m_process, &Process::done, this, [this] {
|
connect(&m_process, &Process::done, this, [this] {
|
||||||
const QString output = m_process.allOutput();
|
const QString output = m_process.allOutput();
|
||||||
QString argumentDetails;
|
QString argumentDetails;
|
||||||
@@ -64,7 +64,7 @@ public:
|
|||||||
connect(dialogButtons, &QDialogButtonBox::rejected, this, &OptionsDialog::reject);
|
connect(dialogButtons, &QDialogButtonBox::rejected, this, &OptionsDialog::reject);
|
||||||
|
|
||||||
m_argumentsEdit = new QLineEdit;
|
m_argumentsEdit = new QLineEdit;
|
||||||
m_argumentsEdit->setText(androidConfig().sdkManagerToolArgs().join(" "));
|
m_argumentsEdit->setText(AndroidConfig::sdkManagerToolArgs().join(" "));
|
||||||
|
|
||||||
using namespace Layouting;
|
using namespace Layouting;
|
||||||
|
|
||||||
@@ -235,8 +235,8 @@ AndroidSdkManagerDialog::AndroidSdkManagerDialog(AndroidSdkManager *sdkManager,
|
|||||||
OptionsDialog dlg(m_sdkManager, this);
|
OptionsDialog dlg(m_sdkManager, this);
|
||||||
if (dlg.exec() == QDialog::Accepted) {
|
if (dlg.exec() == QDialog::Accepted) {
|
||||||
QStringList arguments = dlg.sdkManagerArguments();
|
QStringList arguments = dlg.sdkManagerArguments();
|
||||||
if (arguments != androidConfig().sdkManagerToolArgs()) {
|
if (arguments != AndroidConfig::sdkManagerToolArgs()) {
|
||||||
androidConfig().setSdkManagerToolArgs(arguments);
|
AndroidConfig::setSdkManagerToolArgs(arguments);
|
||||||
m_sdkManager->reloadPackages();
|
m_sdkManager->reloadPackages();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -244,19 +244,19 @@ AndroidSdkManagerDialog::AndroidSdkManagerDialog(AndroidSdkManager *sdkManager,
|
|||||||
|
|
||||||
connect(obsoleteCheckBox, &QCheckBox::stateChanged, this, [this](int state) {
|
connect(obsoleteCheckBox, &QCheckBox::stateChanged, this, [this](int state) {
|
||||||
const QString obsoleteArg = "--include_obsolete";
|
const QString obsoleteArg = "--include_obsolete";
|
||||||
QStringList args = androidConfig().sdkManagerToolArgs();
|
QStringList args = AndroidConfig::sdkManagerToolArgs();
|
||||||
if (state == Qt::Checked && !args.contains(obsoleteArg)) {
|
if (state == Qt::Checked && !args.contains(obsoleteArg)) {
|
||||||
args.append(obsoleteArg);
|
args.append(obsoleteArg);
|
||||||
androidConfig().setSdkManagerToolArgs(args);
|
AndroidConfig::setSdkManagerToolArgs(args);
|
||||||
} else if (state == Qt::Unchecked && args.contains(obsoleteArg)) {
|
} else if (state == Qt::Unchecked && args.contains(obsoleteArg)) {
|
||||||
args.removeAll(obsoleteArg);
|
args.removeAll(obsoleteArg);
|
||||||
androidConfig().setSdkManagerToolArgs(args);
|
AndroidConfig::setSdkManagerToolArgs(args);
|
||||||
}
|
}
|
||||||
m_sdkManager->reloadPackages();
|
m_sdkManager->reloadPackages();
|
||||||
});
|
});
|
||||||
|
|
||||||
connect(channelCheckbox, &QComboBox::currentIndexChanged, this, [this](int index) {
|
connect(channelCheckbox, &QComboBox::currentIndexChanged, this, [this](int index) {
|
||||||
QStringList args = androidConfig().sdkManagerToolArgs();
|
QStringList args = AndroidConfig::sdkManagerToolArgs();
|
||||||
QString existingArg;
|
QString existingArg;
|
||||||
for (int i = 0; i < 4; ++i) {
|
for (int i = 0; i < 4; ++i) {
|
||||||
const QString arg = "--channel=" + QString::number(i);
|
const QString arg = "--channel=" + QString::number(i);
|
||||||
@@ -268,17 +268,17 @@ AndroidSdkManagerDialog::AndroidSdkManagerDialog(AndroidSdkManager *sdkManager,
|
|||||||
|
|
||||||
if (index == 0 && !existingArg.isEmpty()) {
|
if (index == 0 && !existingArg.isEmpty()) {
|
||||||
args.removeAll(existingArg);
|
args.removeAll(existingArg);
|
||||||
androidConfig().setSdkManagerToolArgs(args);
|
AndroidConfig::setSdkManagerToolArgs(args);
|
||||||
} else if (index > 0) {
|
} else if (index > 0) {
|
||||||
// Add 1 to account for Stable (second item) being channel 0
|
// Add 1 to account for Stable (second item) being channel 0
|
||||||
const QString channelArg = "--channel=" + QString::number(index - 1);
|
const QString channelArg = "--channel=" + QString::number(index - 1);
|
||||||
if (existingArg != channelArg) {
|
if (existingArg != channelArg) {
|
||||||
if (!existingArg.isEmpty()) {
|
if (!existingArg.isEmpty()) {
|
||||||
args.removeAll(existingArg);
|
args.removeAll(existingArg);
|
||||||
androidConfig().setSdkManagerToolArgs(args);
|
AndroidConfig::setSdkManagerToolArgs(args);
|
||||||
}
|
}
|
||||||
args.append(channelArg);
|
args.append(channelArg);
|
||||||
androidConfig().setSdkManagerToolArgs(args);
|
AndroidConfig::setSdkManagerToolArgs(args);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
m_sdkManager->reloadPackages();
|
m_sdkManager->reloadPackages();
|
||||||
|
|||||||
@@ -314,7 +314,7 @@ AndroidSettingsWidget::AndroidSettingsWidget()
|
|||||||
"and extracted to the selected path.\n"
|
"and extracted to the selected path.\n"
|
||||||
"After the SDK Tools are properly set up, you are prompted to install any essential\n"
|
"After the SDK Tools are properly set up, you are prompted to install any essential\n"
|
||||||
"packages required for Qt to build for Android.")
|
"packages required for Qt to build for Android.")
|
||||||
.arg(androidConfig().sdkToolsUrl().toString()));
|
.arg(AndroidConfig::sdkToolsUrl().toString()));
|
||||||
|
|
||||||
auto sdkManagerToolButton = new QPushButton(Tr::tr("SDK Manager"));
|
auto sdkManagerToolButton = new QPushButton(Tr::tr("SDK Manager"));
|
||||||
|
|
||||||
@@ -380,22 +380,22 @@ AndroidSettingsWidget::AndroidSettingsWidget()
|
|||||||
|
|
||||||
connect(m_openJdkLocationPathChooser, &PathChooser::rawPathChanged,
|
connect(m_openJdkLocationPathChooser, &PathChooser::rawPathChanged,
|
||||||
this, &AndroidSettingsWidget::validateJdk);
|
this, &AndroidSettingsWidget::validateJdk);
|
||||||
if (androidConfig().openJDKLocation().isEmpty())
|
if (AndroidConfig::openJDKLocation().isEmpty())
|
||||||
androidConfig().setOpenJDKLocation(AndroidConfig::getJdkPath());
|
AndroidConfig::setOpenJDKLocation(AndroidConfig::getJdkPath());
|
||||||
m_openJdkLocationPathChooser->setFilePath(androidConfig().openJDKLocation());
|
m_openJdkLocationPathChooser->setFilePath(AndroidConfig::openJDKLocation());
|
||||||
m_openJdkLocationPathChooser->setPromptDialogTitle(Tr::tr("Select JDK Path"));
|
m_openJdkLocationPathChooser->setPromptDialogTitle(Tr::tr("Select JDK Path"));
|
||||||
|
|
||||||
if (androidConfig().sdkLocation().isEmpty())
|
if (AndroidConfig::sdkLocation().isEmpty())
|
||||||
androidConfig().setSdkLocation(AndroidConfig::defaultSdkPath());
|
AndroidConfig::setSdkLocation(AndroidConfig::defaultSdkPath());
|
||||||
m_sdkLocationPathChooser->setFilePath(androidConfig().sdkLocation());
|
m_sdkLocationPathChooser->setFilePath(AndroidConfig::sdkLocation());
|
||||||
m_sdkLocationPathChooser->setPromptDialogTitle(Tr::tr("Select Android SDK Folder"));
|
m_sdkLocationPathChooser->setPromptDialogTitle(Tr::tr("Select Android SDK Folder"));
|
||||||
|
|
||||||
m_openSslPathChooser->setPromptDialogTitle(Tr::tr("Select OpenSSL Include Project File"));
|
m_openSslPathChooser->setPromptDialogTitle(Tr::tr("Select OpenSSL Include Project File"));
|
||||||
if (androidConfig().openSslLocation().isEmpty())
|
if (AndroidConfig::openSslLocation().isEmpty())
|
||||||
androidConfig().setOpenSslLocation(androidConfig().sdkLocation() / ("android_openssl"));
|
AndroidConfig::setOpenSslLocation(AndroidConfig::sdkLocation() / ("android_openssl"));
|
||||||
m_openSslPathChooser->setFilePath(androidConfig().openSslLocation());
|
m_openSslPathChooser->setFilePath(AndroidConfig::openSslLocation());
|
||||||
|
|
||||||
m_createKitCheckBox->setChecked(androidConfig().automaticKitCreation());
|
m_createKitCheckBox->setChecked(AndroidConfig::automaticKitCreation());
|
||||||
|
|
||||||
downloadNdkToolButton->setIcon(downloadIcon);
|
downloadNdkToolButton->setIcon(downloadIcon);
|
||||||
|
|
||||||
@@ -454,21 +454,21 @@ AndroidSettingsWidget::AndroidSettingsWidget()
|
|||||||
connect(m_ndkListWidget, &QListWidget::currentTextChanged,
|
connect(m_ndkListWidget, &QListWidget::currentTextChanged,
|
||||||
this, [this, removeCustomNdkButton](const QString &ndk) {
|
this, [this, removeCustomNdkButton](const QString &ndk) {
|
||||||
updateUI();
|
updateUI();
|
||||||
removeCustomNdkButton->setEnabled(androidConfig().getCustomNdkList().contains(ndk));
|
removeCustomNdkButton->setEnabled(AndroidConfig::getCustomNdkList().contains(ndk));
|
||||||
});
|
});
|
||||||
connect(addCustomNdkButton, &QPushButton::clicked, this,
|
connect(addCustomNdkButton, &QPushButton::clicked, this,
|
||||||
&AndroidSettingsWidget::addCustomNdkItem);
|
&AndroidSettingsWidget::addCustomNdkItem);
|
||||||
connect(removeCustomNdkButton, &QPushButton::clicked, this, [this] {
|
connect(removeCustomNdkButton, &QPushButton::clicked, this, [this] {
|
||||||
if (isDefaultNdkSelected())
|
if (isDefaultNdkSelected())
|
||||||
androidConfig().setDefaultNdk({});
|
AndroidConfig::setDefaultNdk({});
|
||||||
androidConfig().removeCustomNdk(m_ndkListWidget->currentItem()->text());
|
AndroidConfig::removeCustomNdk(m_ndkListWidget->currentItem()->text());
|
||||||
m_ndkListWidget->takeItem(m_ndkListWidget->currentRow());
|
m_ndkListWidget->takeItem(m_ndkListWidget->currentRow());
|
||||||
});
|
});
|
||||||
connect(m_makeDefaultNdkButton, &QPushButton::clicked, this, [this] {
|
connect(m_makeDefaultNdkButton, &QPushButton::clicked, this, [this] {
|
||||||
const FilePath defaultNdk = isDefaultNdkSelected()
|
const FilePath defaultNdk = isDefaultNdkSelected()
|
||||||
? FilePath()
|
? FilePath()
|
||||||
: FilePath::fromUserInput(m_ndkListWidget->currentItem()->text());
|
: FilePath::fromUserInput(m_ndkListWidget->currentItem()->text());
|
||||||
androidConfig().setDefaultNdk(defaultNdk);
|
AndroidConfig::setDefaultNdk(defaultNdk);
|
||||||
updateUI();
|
updateUI();
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -503,7 +503,7 @@ AndroidSettingsWidget::AndroidSettingsWidget()
|
|||||||
if (result != Tasking::DoneWith::Success)
|
if (result != Tasking::DoneWith::Success)
|
||||||
return;
|
return;
|
||||||
// Make sure the sdk path is created before installing packages
|
// Make sure the sdk path is created before installing packages
|
||||||
const FilePath sdkPath = androidConfig().sdkLocation();
|
const FilePath sdkPath = AndroidConfig::sdkLocation();
|
||||||
if (!sdkPath.createDir()) {
|
if (!sdkPath.createDir()) {
|
||||||
QMessageBox::warning(this, Android::Internal::dialogTitle(),
|
QMessageBox::warning(this, Android::Internal::dialogTitle(),
|
||||||
Tr::tr("Failed to create the SDK Tools path %1.")
|
Tr::tr("Failed to create the SDK Tools path %1.")
|
||||||
@@ -543,12 +543,12 @@ void AndroidSettingsWidget::updateNdkList()
|
|||||||
ndk->installedLocation().toUserOutput()));
|
ndk->installedLocation().toUserOutput()));
|
||||||
}
|
}
|
||||||
|
|
||||||
const auto customNdks = androidConfig().getCustomNdkList();
|
const auto customNdks = AndroidConfig::getCustomNdkList();
|
||||||
for (const QString &ndk : customNdks) {
|
for (const QString &ndk : customNdks) {
|
||||||
if (AndroidConfig::isValidNdk(ndk)) {
|
if (AndroidConfig::isValidNdk(ndk)) {
|
||||||
m_ndkListWidget->addItem(new QListWidgetItem(Icons::UNLOCKED.icon(), ndk));
|
m_ndkListWidget->addItem(new QListWidgetItem(Icons::UNLOCKED.icon(), ndk));
|
||||||
} else {
|
} else {
|
||||||
androidConfig().removeCustomNdk(ndk);
|
AndroidConfig::removeCustomNdk(ndk);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -564,7 +564,7 @@ void AndroidSettingsWidget::addCustomNdkItem()
|
|||||||
const QString ndkPath = QFileDialog::getExistingDirectory(this, Tr::tr("Select an NDK"), homePath);
|
const QString ndkPath = QFileDialog::getExistingDirectory(this, Tr::tr("Select an NDK"), homePath);
|
||||||
|
|
||||||
if (AndroidConfig::isValidNdk(ndkPath)) {
|
if (AndroidConfig::isValidNdk(ndkPath)) {
|
||||||
androidConfig().addCustomNdk(ndkPath);
|
AndroidConfig::addCustomNdk(ndkPath);
|
||||||
if (m_ndkListWidget->findItems(ndkPath, Qt::MatchExactly).size() == 0) {
|
if (m_ndkListWidget->findItems(ndkPath, Qt::MatchExactly).size() == 0) {
|
||||||
m_ndkListWidget->addItem(new QListWidgetItem(Icons::UNLOCKED.icon(), ndkPath));
|
m_ndkListWidget->addItem(new QListWidgetItem(Icons::UNLOCKED.icon(), ndkPath));
|
||||||
}
|
}
|
||||||
@@ -582,9 +582,9 @@ void AndroidSettingsWidget::addCustomNdkItem()
|
|||||||
|
|
||||||
bool AndroidSettingsWidget::isDefaultNdkSelected() const
|
bool AndroidSettingsWidget::isDefaultNdkSelected() const
|
||||||
{
|
{
|
||||||
if (!androidConfig().defaultNdk().isEmpty()) {
|
if (!AndroidConfig::defaultNdk().isEmpty()) {
|
||||||
if (const QListWidgetItem *item = m_ndkListWidget->currentItem()) {
|
if (const QListWidgetItem *item = m_ndkListWidget->currentItem()) {
|
||||||
return FilePath::fromUserInput(item->text()) == androidConfig().defaultNdk();
|
return FilePath::fromUserInput(item->text()) == AndroidConfig::defaultNdk();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@@ -592,8 +592,8 @@ bool AndroidSettingsWidget::isDefaultNdkSelected() const
|
|||||||
|
|
||||||
void AndroidSettingsWidget::validateJdk()
|
void AndroidSettingsWidget::validateJdk()
|
||||||
{
|
{
|
||||||
androidConfig().setOpenJDKLocation(m_openJdkLocationPathChooser->filePath());
|
AndroidConfig::setOpenJDKLocation(m_openJdkLocationPathChooser->filePath());
|
||||||
expected_str<void> test = testJavaC(androidConfig().openJDKLocation());
|
expected_str<void> test = testJavaC(AndroidConfig::openJDKLocation());
|
||||||
|
|
||||||
m_androidSummary->setPointValid(JavaPathExistsAndWritableRow, test);
|
m_androidSummary->setPointValid(JavaPathExistsAndWritableRow, test);
|
||||||
|
|
||||||
@@ -605,14 +605,14 @@ void AndroidSettingsWidget::validateJdk()
|
|||||||
|
|
||||||
void AndroidSettingsWidget::validateOpenSsl()
|
void AndroidSettingsWidget::validateOpenSsl()
|
||||||
{
|
{
|
||||||
androidConfig().setOpenSslLocation(m_openSslPathChooser->filePath());
|
AndroidConfig::setOpenSslLocation(m_openSslPathChooser->filePath());
|
||||||
|
|
||||||
m_openSslSummary->setPointValid(OpenSslPathExistsRow, androidConfig().openSslLocation().exists());
|
m_openSslSummary->setPointValid(OpenSslPathExistsRow, AndroidConfig::openSslLocation().exists());
|
||||||
|
|
||||||
const bool priFileExists = androidConfig().openSslLocation().pathAppended("openssl.pri").exists();
|
const bool priFileExists = AndroidConfig::openSslLocation().pathAppended("openssl.pri").exists();
|
||||||
m_openSslSummary->setPointValid(OpenSslPriPathExists, priFileExists);
|
m_openSslSummary->setPointValid(OpenSslPriPathExists, priFileExists);
|
||||||
const bool cmakeListsExists
|
const bool cmakeListsExists
|
||||||
= androidConfig().openSslLocation().pathAppended("CMakeLists.txt").exists();
|
= AndroidConfig::openSslLocation().pathAppended("CMakeLists.txt").exists();
|
||||||
m_openSslSummary->setPointValid(OpenSslCmakeListsPathExists, cmakeListsExists);
|
m_openSslSummary->setPointValid(OpenSslCmakeListsPathExists, cmakeListsExists);
|
||||||
|
|
||||||
updateUI();
|
updateUI();
|
||||||
@@ -621,8 +621,8 @@ void AndroidSettingsWidget::validateOpenSsl()
|
|||||||
void AndroidSettingsWidget::onSdkPathChanged()
|
void AndroidSettingsWidget::onSdkPathChanged()
|
||||||
{
|
{
|
||||||
const FilePath sdkPath = m_sdkLocationPathChooser->filePath().cleanPath();
|
const FilePath sdkPath = m_sdkLocationPathChooser->filePath().cleanPath();
|
||||||
androidConfig().setSdkLocation(sdkPath);
|
AndroidConfig::setSdkLocation(sdkPath);
|
||||||
FilePath currentOpenSslPath = androidConfig().openSslLocation();
|
FilePath currentOpenSslPath = AndroidConfig::openSslLocation();
|
||||||
if (currentOpenSslPath.isEmpty() || !currentOpenSslPath.exists())
|
if (currentOpenSslPath.isEmpty() || !currentOpenSslPath.exists())
|
||||||
currentOpenSslPath = sdkPath.pathAppended("android_openssl");
|
currentOpenSslPath = sdkPath.pathAppended("android_openssl");
|
||||||
m_openSslPathChooser->setFilePath(currentOpenSslPath);
|
m_openSslPathChooser->setFilePath(currentOpenSslPath);
|
||||||
@@ -633,24 +633,24 @@ void AndroidSettingsWidget::onSdkPathChanged()
|
|||||||
void AndroidSettingsWidget::validateSdk()
|
void AndroidSettingsWidget::validateSdk()
|
||||||
{
|
{
|
||||||
const FilePath sdkPath = m_sdkLocationPathChooser->filePath().cleanPath();
|
const FilePath sdkPath = m_sdkLocationPathChooser->filePath().cleanPath();
|
||||||
androidConfig().setSdkLocation(sdkPath);
|
AndroidConfig::setSdkLocation(sdkPath);
|
||||||
|
|
||||||
const FilePath path = androidConfig().sdkLocation();
|
const FilePath path = AndroidConfig::sdkLocation();
|
||||||
m_androidSummary->setPointValid(SdkPathExistsAndWritableRow,
|
m_androidSummary->setPointValid(SdkPathExistsAndWritableRow,
|
||||||
path.exists() && path.isWritableDir());
|
path.exists() && path.isWritableDir());
|
||||||
m_androidSummary->setPointValid(SdkToolsInstalledRow,
|
m_androidSummary->setPointValid(SdkToolsInstalledRow,
|
||||||
!androidConfig().sdkToolsVersion().isNull());
|
!AndroidConfig::sdkToolsVersion().isNull());
|
||||||
m_androidSummary->setPointValid(PlatformToolsInstalledRow,
|
m_androidSummary->setPointValid(PlatformToolsInstalledRow,
|
||||||
androidConfig().adbToolPath().exists());
|
AndroidConfig::adbToolPath().exists());
|
||||||
m_androidSummary->setPointValid(BuildToolsInstalledRow,
|
m_androidSummary->setPointValid(BuildToolsInstalledRow,
|
||||||
!androidConfig().buildToolsVersion().isNull());
|
!AndroidConfig::buildToolsVersion().isNull());
|
||||||
m_androidSummary->setPointValid(SdkManagerSuccessfulRow, m_sdkManager.packageListingSuccessful());
|
m_androidSummary->setPointValid(SdkManagerSuccessfulRow, m_sdkManager.packageListingSuccessful());
|
||||||
// installedSdkPlatforms should not trigger a package reload as validate SDK is only called
|
// installedSdkPlatforms should not trigger a package reload as validate SDK is only called
|
||||||
// after AndroidSdkManager::packageReloadFinished.
|
// after AndroidSdkManager::packageReloadFinished.
|
||||||
m_androidSummary->setPointValid(PlatformSdkInstalledRow,
|
m_androidSummary->setPointValid(PlatformSdkInstalledRow,
|
||||||
!m_sdkManager.installedSdkPlatforms().isEmpty());
|
!m_sdkManager.installedSdkPlatforms().isEmpty());
|
||||||
m_androidSummary->setPointValid(AllEssentialsInstalledRow,
|
m_androidSummary->setPointValid(AllEssentialsInstalledRow,
|
||||||
androidConfig().allEssentialsInstalled(&m_sdkManager));
|
AndroidConfig::allEssentialsInstalled(&m_sdkManager));
|
||||||
|
|
||||||
const bool sdkToolsOk = m_androidSummary->rowsOk({SdkPathExistsAndWritableRow,
|
const bool sdkToolsOk = m_androidSummary->rowsOk({SdkPathExistsAndWritableRow,
|
||||||
SdkToolsInstalledRow,
|
SdkToolsInstalledRow,
|
||||||
@@ -659,7 +659,7 @@ void AndroidSettingsWidget::validateSdk()
|
|||||||
BuildToolsInstalledRow,
|
BuildToolsInstalledRow,
|
||||||
PlatformSdkInstalledRow,
|
PlatformSdkInstalledRow,
|
||||||
AllEssentialsInstalledRow});
|
AllEssentialsInstalledRow});
|
||||||
androidConfig().setSdkFullyConfigured(sdkToolsOk && componentsOk);
|
AndroidConfig::setSdkFullyConfigured(sdkToolsOk && componentsOk);
|
||||||
if (sdkToolsOk && !componentsOk) {
|
if (sdkToolsOk && !componentsOk) {
|
||||||
const QStringList notFoundEssentials = m_sdkManager.notFoundEssentialSdkPackages();
|
const QStringList notFoundEssentials = m_sdkManager.notFoundEssentialSdkPackages();
|
||||||
if (!notFoundEssentials.isEmpty()) {
|
if (!notFoundEssentials.isEmpty()) {
|
||||||
@@ -783,7 +783,7 @@ void AndroidSettingsWidget::downloadOpenSslRepo(const bool silent)
|
|||||||
|
|
||||||
void AndroidSettingsWidget::createKitToggled()
|
void AndroidSettingsWidget::createKitToggled()
|
||||||
{
|
{
|
||||||
androidConfig().setAutomaticKitCreation(m_createKitCheckBox->isChecked());
|
AndroidConfig::setAutomaticKitCreation(m_createKitCheckBox->isChecked());
|
||||||
}
|
}
|
||||||
|
|
||||||
void AndroidSettingsWidget::updateUI()
|
void AndroidSettingsWidget::updateUI()
|
||||||
@@ -794,7 +794,7 @@ void AndroidSettingsWidget::updateUI()
|
|||||||
const QListWidgetItem *currentItem = m_ndkListWidget->currentItem();
|
const QListWidgetItem *currentItem = m_ndkListWidget->currentItem();
|
||||||
const FilePath currentNdk = FilePath::fromUserInput(currentItem ? currentItem->text() : "");
|
const FilePath currentNdk = FilePath::fromUserInput(currentItem ? currentItem->text() : "");
|
||||||
const QString infoText = Tr::tr("(SDK Version: %1, NDK Version: %2)")
|
const QString infoText = Tr::tr("(SDK Version: %1, NDK Version: %2)")
|
||||||
.arg(androidConfig().sdkToolsVersion().toString())
|
.arg(AndroidConfig::sdkToolsVersion().toString())
|
||||||
.arg(currentNdk.isEmpty() ? "" : AndroidConfig::ndkVersion(currentNdk).toString());
|
.arg(currentNdk.isEmpty() ? "" : AndroidConfig::ndkVersion(currentNdk).toString());
|
||||||
m_androidSummary->setInfoText(androidSetupOk ? infoText : "");
|
m_androidSummary->setInfoText(androidSetupOk ? infoText : "");
|
||||||
|
|
||||||
@@ -809,7 +809,7 @@ void AndroidSettingsWidget::updateUI()
|
|||||||
for (int row = 0; row < m_ndkListWidget->count(); ++row) {
|
for (int row = 0; row < m_ndkListWidget->count(); ++row) {
|
||||||
QListWidgetItem *item = m_ndkListWidget->item(row);
|
QListWidgetItem *item = m_ndkListWidget->item(row);
|
||||||
const bool isDefaultNdk =
|
const bool isDefaultNdk =
|
||||||
FilePath::fromUserInput(item->text()) == androidConfig().defaultNdk();
|
FilePath::fromUserInput(item->text()) == AndroidConfig::defaultNdk();
|
||||||
item->setFont(isDefaultNdk ? markedFont : font);
|
item->setFont(isDefaultNdk ? markedFont : font);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -821,7 +821,7 @@ void AndroidSettingsWidget::updateUI()
|
|||||||
|
|
||||||
void AndroidSettingsWidget::downloadSdk()
|
void AndroidSettingsWidget::downloadSdk()
|
||||||
{
|
{
|
||||||
if (androidConfig().sdkToolsOk()) {
|
if (AndroidConfig::sdkToolsOk()) {
|
||||||
QMessageBox::warning(this, Android::Internal::dialogTitle(),
|
QMessageBox::warning(this, Android::Internal::dialogTitle(),
|
||||||
Tr::tr("The selected path already has a valid SDK Tools package."));
|
Tr::tr("The selected path already has a valid SDK Tools package."));
|
||||||
validateSdk();
|
validateSdk();
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ namespace Android {
|
|||||||
namespace Internal {
|
namespace Internal {
|
||||||
|
|
||||||
AndroidSignalOperation::AndroidSignalOperation()
|
AndroidSignalOperation::AndroidSignalOperation()
|
||||||
: m_adbPath(androidConfig().adbToolPath())
|
: m_adbPath(AndroidConfig::adbToolPath())
|
||||||
, m_timeout(new QTimer(this))
|
, m_timeout(new QTimer(this))
|
||||||
{
|
{
|
||||||
m_timeout->setInterval(5000);
|
m_timeout->setInterval(5000);
|
||||||
|
|||||||
@@ -77,7 +77,7 @@ bool AndroidToolchain::isValid() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
const bool isChildofNdk = compilerCommand().isChildOf(m_ndkLocation);
|
const bool isChildofNdk = compilerCommand().isChildOf(m_ndkLocation);
|
||||||
const bool isChildofSdk = compilerCommand().isChildOf(androidConfig().sdkLocation());
|
const bool isChildofSdk = compilerCommand().isChildOf(AndroidConfig::sdkLocation());
|
||||||
|
|
||||||
return GccToolchain::isValid() && typeId() == Constants::ANDROID_TOOLCHAIN_TYPEID
|
return GccToolchain::isValid() && typeId() == Constants::ANDROID_TOOLCHAIN_TYPEID
|
||||||
&& targetAbi().isValid() && (isChildofNdk || isChildofSdk)
|
&& targetAbi().isValid() && (isChildofNdk || isChildofSdk)
|
||||||
@@ -86,9 +86,8 @@ bool AndroidToolchain::isValid() const
|
|||||||
|
|
||||||
void AndroidToolchain::addToEnvironment(Environment &env) const
|
void AndroidToolchain::addToEnvironment(Environment &env) const
|
||||||
{
|
{
|
||||||
const AndroidConfig &config = androidConfig();
|
|
||||||
env.set(QLatin1String("ANDROID_NDK_HOST"), AndroidConfig::toolchainHostFromNdk(m_ndkLocation));
|
env.set(QLatin1String("ANDROID_NDK_HOST"), AndroidConfig::toolchainHostFromNdk(m_ndkLocation));
|
||||||
const FilePath javaHome = config.openJDKLocation();
|
const FilePath javaHome = AndroidConfig::openJDKLocation();
|
||||||
if (javaHome.exists()) {
|
if (javaHome.exists()) {
|
||||||
env.set(Constants::JAVA_HOME_ENV_VAR, javaHome.toUserOutput());
|
env.set(Constants::JAVA_HOME_ENV_VAR, javaHome.toUserOutput());
|
||||||
const FilePath javaBin = javaHome.pathAppended("bin");
|
const FilePath javaBin = javaHome.pathAppended("bin");
|
||||||
@@ -97,8 +96,8 @@ void AndroidToolchain::addToEnvironment(Environment &env) const
|
|||||||
if (!currentJavaFilePath.isChildOf(javaBin))
|
if (!currentJavaFilePath.isChildOf(javaBin))
|
||||||
env.prependOrSetPath(javaBin);
|
env.prependOrSetPath(javaBin);
|
||||||
}
|
}
|
||||||
env.set(QLatin1String("ANDROID_HOME"), config.sdkLocation().toUserOutput());
|
env.set(QLatin1String("ANDROID_HOME"), AndroidConfig::sdkLocation().toUserOutput());
|
||||||
env.set(QLatin1String("ANDROID_SDK_ROOT"), config.sdkLocation().toUserOutput());
|
env.set(QLatin1String("ANDROID_SDK_ROOT"), AndroidConfig::sdkLocation().toUserOutput());
|
||||||
}
|
}
|
||||||
|
|
||||||
void AndroidToolchain::fromMap(const Store &data)
|
void AndroidToolchain::fromMap(const Store &data)
|
||||||
@@ -147,7 +146,7 @@ static FilePaths uniqueNdksForCurrentQtVersions()
|
|||||||
|
|
||||||
FilePaths uniqueNdks;
|
FilePaths uniqueNdks;
|
||||||
for (const QtSupport::QtVersion *version : androidQtVersions) {
|
for (const QtSupport::QtVersion *version : androidQtVersions) {
|
||||||
FilePath ndk = androidConfig().ndkLocation(version);
|
FilePath ndk = AndroidConfig::ndkLocation(version);
|
||||||
if (!uniqueNdks.contains(ndk))
|
if (!uniqueNdks.contains(ndk))
|
||||||
uniqueNdks.append(ndk);
|
uniqueNdks.append(ndk);
|
||||||
}
|
}
|
||||||
@@ -161,8 +160,6 @@ ToolchainList autodetectToolchainsFromNdks(
|
|||||||
const bool isCustom)
|
const bool isCustom)
|
||||||
{
|
{
|
||||||
QList<Toolchain *> result;
|
QList<Toolchain *> result;
|
||||||
const AndroidConfig config = androidConfig();
|
|
||||||
|
|
||||||
const Id LanguageIds[] {
|
const Id LanguageIds[] {
|
||||||
ProjectExplorer::Constants::CXX_LANGUAGE_ID,
|
ProjectExplorer::Constants::CXX_LANGUAGE_ID,
|
||||||
ProjectExplorer::Constants::C_LANGUAGE_ID
|
ProjectExplorer::Constants::C_LANGUAGE_ID
|
||||||
|
|||||||
@@ -169,9 +169,9 @@ AvdDialog::DeviceType AvdDialog::tagToDeviceType(const QString &type_tag)
|
|||||||
|
|
||||||
static bool avdManagerCommand(const QStringList &args, QString *output)
|
static bool avdManagerCommand(const QStringList &args, QString *output)
|
||||||
{
|
{
|
||||||
CommandLine cmd(androidConfig().avdManagerToolPath(), args);
|
CommandLine cmd(AndroidConfig::avdManagerToolPath(), args);
|
||||||
Process proc;
|
Process proc;
|
||||||
proc.setEnvironment(androidConfig().toolsEnvironment());
|
proc.setEnvironment(AndroidConfig::toolsEnvironment());
|
||||||
qCDebug(avdDialogLog).noquote() << "Running AVD Manager command:" << cmd.toUserOutput();
|
qCDebug(avdDialogLog).noquote() << "Running AVD Manager command:" << cmd.toUserOutput();
|
||||||
proc.setCommand(cmd);
|
proc.setCommand(cmd);
|
||||||
proc.runBlocking();
|
proc.runBlocking();
|
||||||
@@ -189,7 +189,7 @@ void AvdDialog::parseDeviceDefinitionsList()
|
|||||||
|
|
||||||
if (!avdManagerCommand({"list", "device"}, &output)) {
|
if (!avdManagerCommand({"list", "device"}, &output)) {
|
||||||
qCDebug(avdDialogLog) << "Avd list command failed" << output
|
qCDebug(avdDialogLog) << "Avd list command failed" << output
|
||||||
<< androidConfig().sdkToolsVersion();
|
<< AndroidConfig::sdkToolsVersion();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -20,7 +20,6 @@ QT_END_NAMESPACE
|
|||||||
namespace Utils { class InfoLabel; }
|
namespace Utils { class InfoLabel; }
|
||||||
|
|
||||||
namespace Android {
|
namespace Android {
|
||||||
class AndroidConfig;
|
|
||||||
class SdkPlatform;
|
class SdkPlatform;
|
||||||
|
|
||||||
namespace Internal {
|
namespace Internal {
|
||||||
|
|||||||
@@ -305,7 +305,7 @@ void JLSClient::updateProjectFiles()
|
|||||||
|
|
||||||
const QStringList classPaths = node->data(Constants::AndroidClassPaths).toStringList();
|
const QStringList classPaths = node->data(Constants::AndroidClassPaths).toStringList();
|
||||||
|
|
||||||
const FilePath &sdkLocation = androidConfig().sdkLocation();
|
const FilePath &sdkLocation = AndroidConfig::sdkLocation();
|
||||||
const QString &targetSDK = AndroidManager::buildTargetSDK(m_currentTarget);
|
const QString &targetSDK = AndroidManager::buildTargetSDK(m_currentTarget);
|
||||||
const FilePath androidJar = sdkLocation / QString("platforms/%2/android.jar")
|
const FilePath androidJar = sdkLocation / QString("platforms/%2/android.jar")
|
||||||
.arg(targetSDK);
|
.arg(targetSDK);
|
||||||
|
|||||||
Reference in New Issue
Block a user