Core::GeneratedFiles ClassWizard::generateFiles(const QWizard *w, QString *errorMessage) const { Q_UNUSED(errorMessage); const ClassWizardDialog *wizard = qobject_cast<const ClassWizardDialog *>(w); const ClassWizardParameters params = wizard->parameters(); const QString fileName = Core::BaseFileWizard::buildFileName( params.path, params.fileName, QLatin1String(Constants::C_PY_EXTENSION)); Core::GeneratedFile sourceFile(fileName); SourceGenerator generator; generator.setPythonQtBinding(SourceGenerator::PySide); Kit *kit = kitForWizard(wizard); if (kit) { QtSupport::BaseQtVersion *baseVersion = QtSupport::QtKitInformation::qtVersion(kit); if (baseVersion && baseVersion->qtVersion().majorVersion == 5) generator.setPythonQtVersion(SourceGenerator::Qt5); else generator.setPythonQtVersion(SourceGenerator::Qt4); } QString sourceContent = generator.generateClass( params.className, params.baseClass, params.classType ); sourceFile.setContents(sourceContent); sourceFile.setAttributes(Core::GeneratedFile::OpenEditorAttribute); return Core::GeneratedFiles() << sourceFile; }
QMakeStepConfig QMakeStep::deducedArguments() { ProjectExplorer::Kit *kit = target()->kit(); QMakeStepConfig config; ProjectExplorer::ToolChain *tc = ProjectExplorer::ToolChainKitInformation::toolChain(kit); ProjectExplorer::Abi targetAbi; if (tc) targetAbi = tc->targetAbi(); QtSupport::BaseQtVersion *version = QtSupport::QtKitInformation::qtVersion(target()->kit()); config.archConfig = QMakeStepConfig::targetArchFor(targetAbi, version); config.osType = QMakeStepConfig::osTypeFor(targetAbi, version); if (linkQmlDebuggingLibrary() && version && version->qtVersion().majorVersion >= 5) config.linkQmlDebuggingQQ2 = true; if (useQtQuickCompiler() && version) config.useQtQuickCompiler = true; if (separateDebugInfo()) config.separateDebugInfo = true; return config; }
QList<Core::Id> QmlProjectRunConfigurationFactory::availableCreationIds(ProjectExplorer::Target *parent) const { if (!canHandle(parent)) return QList<Core::Id>(); QtSupport::BaseQtVersion *version = QtSupport::QtKitInformation::qtVersion(parent->kit()); // First id will be the default run configuration QList<Core::Id> list; if (version && version->qtVersion() >= QtSupport::QtVersionNumber(5, 0, 0)) { QmlProject *project = static_cast<QmlProject*>(parent->project()); switch (project->defaultImport()) { case QmlProject::QtQuick1Import: list << Core::Id(Constants::QML_VIEWER_RC_ID); break; case QmlProject::QtQuick2Import: list << Core::Id(Constants::QML_SCENE_RC_ID); break; case QmlProject::UnknownImport: default: list << Core::Id(Constants::QML_SCENE_RC_ID); list << Core::Id(Constants::QML_VIEWER_RC_ID); break; } } else { list << Core::Id(Constants::QML_VIEWER_RC_ID); } return list; }
QString DesignDocumentController::pathToQt() const { QtSupport::BaseQtVersion *activeQtVersion = QtSupport::QtVersionManager::instance()->version(d->qt_versionId); if (activeQtVersion && (activeQtVersion->qtVersion().majorVersion > 3) && (activeQtVersion->type() == QLatin1String(QtSupport::Constants::DESKTOPQT) || activeQtVersion->type() == QLatin1String(QtSupport::Constants::SIMULATORQT))) return activeQtVersion->qmakeProperty("QT_INSTALL_DATA"); return QString(); }
QString DesignDocumentController::pathToQt() const { QtSupport::BaseQtVersion *activeQtVersion = QtSupport::QtVersionManager::instance()->version(d->qt_versionId); if (activeQtVersion && (activeQtVersion->qtVersion().majorVersion > 3) && (activeQtVersion->supportsTargetId(Qt4ProjectManager::Constants::QT_SIMULATOR_TARGET_ID) || activeQtVersion->supportsTargetId(Qt4ProjectManager::Constants::DESKTOP_TARGET_ID))) return activeQtVersion->versionInfo().value("QT_INSTALL_DATA"); return QString(); }
QString DesignDocument::pathToQt() const { QtSupport::BaseQtVersion *activeQtVersion = QtSupport::QtVersionManager::version(m_qtVersionId); if (activeQtVersion && (activeQtVersion->qtVersion() >= QtSupport::QtVersionNumber(4, 7, 1)) && (activeQtVersion->type() == QLatin1String(QtSupport::Constants::DESKTOPQT) || activeQtVersion->type() == QLatin1String(QtSupport::Constants::SIMULATORQT))) return activeQtVersion->qmakeProperty("QT_INSTALL_DATA"); return QString(); }
/// /// moreArguments, /// -unix for Maemo /// QMAKE_VAR_QMLJSDEBUGGER_PATH QStringList QMakeStep::deducedArguments() { QStringList arguments; ProjectExplorer::ToolChain *tc = ProjectExplorer::ToolChainProfileInformation::toolChain(target()->profile()); ProjectExplorer::Abi targetAbi; if (tc) targetAbi = tc->targetAbi(); #if defined(Q_OS_WIN) || defined(Q_OS_MAC) if ((targetAbi.osFlavor() == ProjectExplorer::Abi::HarmattanLinuxFlavor || targetAbi.osFlavor() == ProjectExplorer::Abi::MaemoLinuxFlavor)) arguments << QLatin1String("-unix"); #endif // explicitly add architecture to CONFIG if ((targetAbi.os() == ProjectExplorer::Abi::MacOS) && (targetAbi.binaryFormat() == ProjectExplorer::Abi::MachOFormat)) { if (targetAbi.architecture() == ProjectExplorer::Abi::X86Architecture) { if (targetAbi.wordWidth() == 32) arguments << QLatin1String("CONFIG+=x86"); else if (targetAbi.wordWidth() == 64) arguments << QLatin1String("CONFIG+=x86_64"); } else if (targetAbi.architecture() == ProjectExplorer::Abi::PowerPCArchitecture) { if (targetAbi.wordWidth() == 32) arguments << QLatin1String("CONFIG+=ppc"); else if (targetAbi.wordWidth() == 64) arguments << QLatin1String("CONFIG+=ppc64"); } } QtSupport::BaseQtVersion *version = QtSupport::QtProfileInformation::qtVersion(target()->profile()); if (linkQmlDebuggingLibrary() && version) { if (!version->needsQmlDebuggingLibrary()) { // This Qt version has the QML debugging services built in, however // they still need to be enabled at compile time arguments << (version->qtVersion().majorVersion >= 5 ? QLatin1String(Constants::QMAKEVAR_DECLARATIVE_DEBUG5) : QLatin1String(Constants::QMAKEVAR_DECLARATIVE_DEBUG4)); } else { const QString qmlDebuggingHelperLibrary = version->qmlDebuggingHelperLibrary(true); if (!qmlDebuggingHelperLibrary.isEmpty()) { // Do not turn debugger path into native path separators: Qmake does not like that! const QString debuggingHelperPath = QFileInfo(qmlDebuggingHelperLibrary).dir().path(); arguments << QLatin1String(Constants::QMAKEVAR_QMLJSDEBUGGER_PATH) + QLatin1Char('=') + debuggingHelperPath; } } } return arguments; }
bool AndroidDeployStep::fromMap(const QVariantMap &map) { m_deployAction = AndroidDeployAction(map.value(QLatin1String(DEPLOY_ACTION_KEY), NoDeploy).toInt()); QVariant useLocalQt = map.value(QLatin1String(USE_LOCAL_QT_KEY)); if (useLocalQt.isValid()) { // old settings if (useLocalQt.toBool() && m_deployAction == NoDeploy) m_deployAction = BundleLibraries; } if (m_deployAction == InstallQASI) m_deployAction = NoDeploy; QtSupport::BaseQtVersion *qtVersion = QtSupport::QtKitInformation::qtVersion(target()->kit()); if (m_deployAction == BundleLibraries) if (!qtVersion || qtVersion->qtVersion() < QtSupport::QtVersionNumber(5, 0, 0)) m_deployAction = NoDeploy; // the kit changed to a non qt5 kit m_bundleQtAvailable = qtVersion && qtVersion->qtVersion() >= QtSupport::QtVersionNumber(5, 0, 0); return ProjectExplorer::BuildStep::fromMap(map); }
bool PuppetCreator::qtIsSupported() const { QtSupport::BaseQtVersion *currentQtVersion = QtSupport::QtKitInformation::qtVersion(m_kit); if (currentQtVersion && currentQtVersion->isValid() && currentQtVersion->qtVersion() >= QtSupport::QtVersionNumber(5, 2, 0) && (currentQtVersion->type() == QLatin1String(QtSupport::Constants::DESKTOPQT) || currentQtVersion->type() == QLatin1String(QtSupport::Constants::SIMULATORQT))) return true; return false; }
QList<Core::Id> AndroidDeployQtStepFactory::availableCreationIds(ProjectExplorer::BuildStepList *parent) const { if (parent->id() != ProjectExplorer::Constants::BUILDSTEPS_DEPLOY) return QList<Core::Id>(); if (!AndroidManager::supportsAndroid(parent->target())) return QList<Core::Id>(); if (parent->contains(AndroidDeployQtStep::Id)) return QList<Core::Id>(); QtSupport::BaseQtVersion *qtVersion = QtSupport::QtKitInformation::qtVersion(parent->target()->kit()); if (!qtVersion || qtVersion->qtVersion() < QtSupport::QtVersionNumber(5, 2, 0)) return QList<Core::Id>(); return QList<Core::Id>() << AndroidDeployQtStep::Id; }
bool GoProject::supportsKit(ProjectExplorer::Kit *k, QString *errorMessage) const { Id deviceType = ProjectExplorer::DeviceTypeKitInformation::deviceTypeId(k); if (deviceType != ProjectExplorer::Constants::DESKTOP_DEVICE_TYPE) { if (errorMessage) *errorMessage = tr("Device type is not desktop."); return false; } QtSupport::BaseQtVersion *version = QtSupport::QtKitInformation::qtVersion(k); if (!version) { if (errorMessage) *errorMessage = tr("No Qt version set in kit."); return false; } #if 0 if (version->qtVersion() < QtSupport::QtVersionNumber(4, 7, 0)) { if (errorMessage) *errorMessage = tr("Qt version is too old."); return false; } if (version->qtVersion() < QtSupport::QtVersionNumber(5, 0, 0) && defaultImport() == QtQuick2Import) { if (errorMessage) *errorMessage = tr("Qt version is too old."); return false; } #endif if (!GoToolChainKitInformation::toolChain(k)) { if (errorMessage) *errorMessage = tr("No Go toolchain is set in the Kit."); return false; } return true; }
IAnalyzerEngine *QmlProfilerTool::createEngine(const AnalyzerStartParameters &sp, RunConfiguration *runConfiguration) { QmlProfilerEngine *engine = new QmlProfilerEngine(this, sp, runConfiguration); engine->registerProfilerStateManager(d->m_profilerState); bool isTcpConnection = true; if (runConfiguration) { // Check minimum Qt Version. We cannot really be sure what the Qt version // at runtime is, but guess that the active build configuraiton has been used. QtSupport::QtVersionNumber minimumVersion(4, 7, 4); QtSupport::BaseQtVersion *version = QtSupport::QtKitInformation::qtVersion(runConfiguration->target()->kit()); if (version) { if (version->isValid() && version->qtVersion() < minimumVersion) { int result = QMessageBox::warning(QApplication::activeWindow(), tr("QML Profiler"), tr("The QML profiler requires Qt 4.7.4 or newer.\n" "The Qt version configured in your active build configuration is too old.\n" "Do you want to continue?"), QMessageBox::Yes, QMessageBox::No); if (result == QMessageBox::No) return 0; } } } // FIXME: Check that there's something sensible in sp.connParams if (isTcpConnection) { d->m_profilerConnections->setTcpConnection(sp.connParams.host, sp.connParams.port); } d->m_runConfiguration = runConfiguration; // // Initialize m_projectFinder // QString projectDirectory; if (d->m_runConfiguration) { Project *project = d->m_runConfiguration->target()->project(); projectDirectory = project->projectDirectory(); } populateFileFinder(projectDirectory, sp.sysroot); connect(engine, SIGNAL(processRunning(quint16)), d->m_profilerConnections, SLOT(connectClient(quint16))); connect(d->m_profilerConnections, SIGNAL(connectionFailed()), engine, SLOT(cancelProcess())); return engine; }
void AndroidDeployStep::kitUpdated(Kit *kit) { if (kit != target()->kit()) return; QtSupport::BaseQtVersion *qtVersion = QtSupport::QtKitInformation::qtVersion(target()->kit()); bool newBundleQtAvailable = qtVersion && qtVersion->qtVersion() >= QtSupport::QtVersionNumber(5, 0, 0); if (m_bundleQtAvailable != newBundleQtAvailable) { m_bundleQtAvailable = newBundleQtAvailable; if (!m_bundleQtAvailable && m_deployAction == BundleLibraries) m_deployAction = NoDeploy; // the kit changed to a non qt5 kit emit deployOptionsChanged(); } }
bool QmlProjectRunConfigurationFactory::canCreate(ProjectExplorer::Target *parent, const Core::Id id) const { if (!canHandle(parent)) return false; if (id == Constants::QML_VIEWER_RC_ID) return true; if (id == Constants::QML_SCENE_RC_ID) { // only support qmlscene if it's Qt5 QtSupport::BaseQtVersion *version = QtSupport::QtKitInformation::qtVersion(parent->kit()); return version && version->qtVersion() >= QtSupport::QtVersionNumber(5, 0, 0); } return false; }
/// /// moreArguments, /// iphoneos/iphonesimulator for ios /// QMAKE_VAR_QMLJSDEBUGGER_PATH QStringList QMakeStep::deducedArguments() { QStringList arguments; ProjectExplorer::ToolChain *tc = ProjectExplorer::ToolChainKitInformation::toolChain(target()->kit()); ProjectExplorer::Abi targetAbi; if (tc) targetAbi = tc->targetAbi(); // explicitly add architecture to CONFIG if ((targetAbi.os() == ProjectExplorer::Abi::MacOS) && (targetAbi.binaryFormat() == ProjectExplorer::Abi::MachOFormat)) { if (targetAbi.architecture() == ProjectExplorer::Abi::X86Architecture) { if (targetAbi.wordWidth() == 32) arguments << QLatin1String("CONFIG+=x86"); else if (targetAbi.wordWidth() == 64) arguments << QLatin1String("CONFIG+=x86_64"); const char IOSQT[] = "Qt4ProjectManager.QtVersion.Ios"; // from Ios::Constants (include header?) QtSupport::BaseQtVersion *version = QtSupport::QtKitInformation::qtVersion(target()->kit()); if (version && version->type() == QLatin1String(IOSQT)) arguments << QLatin1String("CONFIG+=iphonesimulator"); } else if (targetAbi.architecture() == ProjectExplorer::Abi::PowerPCArchitecture) { if (targetAbi.wordWidth() == 32) arguments << QLatin1String("CONFIG+=ppc"); else if (targetAbi.wordWidth() == 64) arguments << QLatin1String("CONFIG+=ppc64"); } else if (targetAbi.architecture() == ProjectExplorer::Abi::ArmArchitecture) { arguments << QLatin1String("CONFIG+=iphoneos"); } } QtSupport::BaseQtVersion *version = QtSupport::QtKitInformation::qtVersion(target()->kit()); if (linkQmlDebuggingLibrary() && version) { arguments << QLatin1String(Constants::QMAKEVAR_QUICK1_DEBUG); if (version->qtVersion().majorVersion >= 5) arguments << QLatin1String(Constants::QMAKEVAR_QUICK2_DEBUG); } return arguments; }
/// /// moreArguments, /// iphoneos/iphonesimulator for ios /// QMAKE_VAR_QMLJSDEBUGGER_PATH QStringList QMakeStep::deducedArguments() { QStringList arguments; ProjectExplorer::ToolChain *tc = ProjectExplorer::ToolChainKitInformation::toolChain(target()->kit()); ProjectExplorer::Abi targetAbi; if (tc) targetAbi = tc->targetAbi(); // explicitly add architecture to CONFIG QtSupport::BaseQtVersion *version = QtSupport::QtKitInformation::qtVersion(target()->kit()); arguments << QmakeBuildConfiguration::deduceArgumnetsForTargetAbi(targetAbi, version); if (linkQmlDebuggingLibrary() && version && !useQtQuickCompiler()) { arguments << QLatin1String(Constants::QMAKEVAR_QUICK1_DEBUG); if (version->qtVersion().majorVersion >= 5) arguments << QLatin1String(Constants::QMAKEVAR_QUICK2_DEBUG); } if (useQtQuickCompiler() && version) arguments << QLatin1String("CONFIG+=qtquickcompiler"); return arguments; }
AndroidBuildApkWidget::AndroidBuildApkWidget(AndroidBuildApkStep *step) : ProjectExplorer::BuildStepConfigWidget(), m_ui(new Ui::AndroidBuildApkWidget), m_step(step) { m_ui->setupUi(this); // Target sdk combobox int minApiLevel = 9; QStringList targets = AndroidConfig::apiLevelNamesFor(AndroidConfigurations::currentConfig().sdkTargets(minApiLevel)); m_ui->targetSDKComboBox->addItems(targets); m_ui->targetSDKComboBox->setCurrentIndex(targets.indexOf(AndroidManager::buildTargetSDK(step->target()))); // deployment option switch (m_step->deployAction()) { case AndroidBuildApkStep::MinistroDeployment: m_ui->ministroOption->setChecked(true); break; case AndroidBuildApkStep::DebugDeployment: m_ui->temporaryQtOption->setChecked(true); break; case AndroidBuildApkStep::BundleLibrariesDeployment: m_ui->bundleQtOption->setChecked(true); break; default: // can't happen break; } // signing m_ui->signPackageCheckBox->setChecked(m_step->signPackage()); m_ui->KeystoreLocationPathChooser->setExpectedKind(Utils::PathChooser::File); m_ui->KeystoreLocationPathChooser->lineEdit()->setReadOnly(true); m_ui->KeystoreLocationPathChooser->setPath(m_step->keystorePath().toUserOutput()); m_ui->KeystoreLocationPathChooser->setInitialBrowsePathBackup(QDir::homePath()); m_ui->KeystoreLocationPathChooser->setPromptDialogFilter(tr("Keystore files (*.keystore *.jks)")); m_ui->KeystoreLocationPathChooser->setPromptDialogTitle(tr("Select Keystore File")); m_ui->signingDebugWarningIcon->hide(); m_ui->signingDebugWarningLabel->hide(); signPackageCheckBoxToggled(m_step->signPackage()); m_ui->useGradleCheckBox->setChecked(m_step->useGradle()); m_ui->verboseOutputCheckBox->setChecked(m_step->verboseOutput()); m_ui->openPackageLocationCheckBox->setChecked(m_step->openPackageLocation()); // target sdk connect(m_ui->targetSDKComboBox, SIGNAL(activated(QString)), SLOT(setTargetSdk(QString))); // deployment options connect(m_ui->ministroOption, SIGNAL(clicked()), SLOT(setMinistro())); connect(m_ui->temporaryQtOption, SIGNAL(clicked()), SLOT(setDeployLocalQtLibs())); connect(m_ui->bundleQtOption, SIGNAL(clicked()), SLOT(setBundleQtLibs())); connect(m_ui->ministroOption, SIGNAL(clicked()), SLOT(updateDebugDeploySigningWarning())); connect(m_ui->temporaryQtOption, SIGNAL(clicked()), SLOT(updateDebugDeploySigningWarning())); connect(m_ui->bundleQtOption, SIGNAL(clicked()), SLOT(updateDebugDeploySigningWarning())); connect(m_ui->useGradleCheckBox, SIGNAL(toggled(bool)), this, SLOT(useGradleCheckBoxToggled(bool))); connect(m_ui->openPackageLocationCheckBox, SIGNAL(toggled(bool)), this, SLOT(openPackageLocationCheckBoxToggled(bool))); connect(m_ui->verboseOutputCheckBox, SIGNAL(toggled(bool)), this, SLOT(verboseOutputCheckBoxToggled(bool))); //signing connect(m_ui->signPackageCheckBox, SIGNAL(toggled(bool)), this, SLOT(signPackageCheckBoxToggled(bool))); connect(m_ui->KeystoreCreatePushButton, SIGNAL(clicked()), this, SLOT(createKeyStore())); connect(m_ui->KeystoreLocationPathChooser, SIGNAL(pathChanged(QString)), SLOT(updateKeyStorePath(QString))); connect(m_ui->certificatesAliasComboBox, SIGNAL(activated(QString)), this, SLOT(certificatesAliasComboBoxActivated(QString))); connect(m_ui->certificatesAliasComboBox, SIGNAL(currentIndexChanged(QString)), this, SLOT(certificatesAliasComboBoxCurrentIndexChanged(QString))); connect(m_step->buildConfiguration(), SIGNAL(buildTypeChanged()), this, SLOT(updateSigningWarning())); updateSigningWarning(); updateDebugDeploySigningWarning(); QtSupport::BaseQtVersion *qt = QtSupport::QtKitInformation::qtVersion(step->target()->kit()); bool qt54 = qt->qtVersion() >= QtSupport::QtVersionNumber(5, 4, 0); m_ui->temporaryQtOption->setVisible(qt54); m_ui->useGradleCheckBox->setVisible(qt54); }
bool QmakeAndroidBuildApkStep::init(QList<const BuildStep *> &earlierSteps) { if (AndroidManager::checkForQt51Files(project()->projectDirectory())) emit addOutput(tr("Found old folder \"android\" in source directory. Qt 5.2 does not use that folder by default."), ErrorOutput); if (!AndroidBuildApkStep::init(earlierSteps)) return false; QtSupport::BaseQtVersion *version = QtSupport::QtKitInformation::qtVersion(target()->kit()); if (!version) return false; QString command = version->qmakeProperty("QT_HOST_BINS"); if (!command.endsWith(QLatin1Char('/'))) command += QLatin1Char('/'); command += QLatin1String("androiddeployqt"); if (Utils::HostOsInfo::isWindowsHost()) command += QLatin1String(".exe"); QString deploymentMethod; if (m_deployAction == MinistroDeployment) deploymentMethod = QLatin1String("ministro"); else if (m_deployAction == DebugDeployment) deploymentMethod = QLatin1String("debug"); else if (m_deployAction == BundleLibrariesDeployment) deploymentMethod = QLatin1String("bundled"); ProjectExplorer::BuildConfiguration *bc = buildConfiguration(); QString outputDir = bc->buildDirectory().appendPath(QLatin1String(Constants::ANDROID_BUILDDIRECTORY)).toString(); const auto *pro = static_cast<QmakeProjectManager::QmakeProject *>(project()); const QmakeProjectManager::QmakeProFileNode *node = pro->rootProjectNode()->findProFileFor(proFilePathForInputFile()); m_skipBuilding = !node; if (m_skipBuilding) return true; QString inputFile = node->singleVariableValue(QmakeProjectManager::AndroidDeploySettingsFile); if (inputFile.isEmpty()) { m_skipBuilding = true; return true; } QStringList arguments; arguments << QLatin1String("--input") << inputFile << QLatin1String("--output") << outputDir << QLatin1String("--deployment") << deploymentMethod << QLatin1String("--android-platform") << AndroidManager::buildTargetSDK(target()) << QLatin1String("--jdk") << AndroidConfigurations::currentConfig().openJDKLocation().toString(); if (m_verbose) arguments << QLatin1String("--verbose"); if (m_useGradle) arguments << QLatin1String("--gradle"); else arguments << QLatin1String("--ant") << AndroidConfigurations::currentConfig().antToolPath().toString(); QStringList argumentsPasswordConcealed = arguments; if (version->qtVersion() >= QtSupport::QtVersionNumber(5, 6, 0)) { if (bc->buildType() == ProjectExplorer::BuildConfiguration::Debug) arguments << QLatin1String("--gdbserver"); else arguments << QLatin1String("--no-gdbserver"); } if (m_signPackage) { arguments << QLatin1String("--sign") << m_keystorePath.toString() << m_certificateAlias << QLatin1String("--storepass") << m_keystorePasswd; argumentsPasswordConcealed << QLatin1String("--sign") << QLatin1String("******") << QLatin1String("--storepass") << QLatin1String("******"); if (!m_certificatePasswd.isEmpty()) { arguments << QLatin1String("--keypass") << m_certificatePasswd; argumentsPasswordConcealed << QLatin1String("--keypass") << QLatin1String("******"); } } ProjectExplorer::ProcessParameters *pp = processParameters(); setupProcessParameters(pp, bc, arguments, command); // Generate arguments with keystore password concealed ProjectExplorer::ProcessParameters pp2; setupProcessParameters(&pp2, bc, argumentsPasswordConcealed, command); m_command = pp2.effectiveCommand(); m_argumentsPasswordConcealed = pp2.prettyArguments(); return true; }
bool AndroidDeployQtStep::init() { if (AndroidManager::checkForQt51Files(project()->projectDirectory())) emit addOutput(tr("Found old folder \"android\" in source directory. Qt 5.2 does not use that folder by default."), ErrorOutput); m_targetArch = AndroidManager::targetArch(target()); if (m_targetArch.isEmpty()) { emit addOutput(tr("No Android arch set by the .pro file."), ErrorOutput); return false; } m_deviceAPILevel = AndroidManager::minimumSDK(target()); AndroidDeviceInfo info = AndroidConfigurations::showDeviceDialog(project(), m_deviceAPILevel, m_targetArch); if (info.serialNumber.isEmpty()) // aborted return false; if (info.type == AndroidDeviceInfo::Emulator) { m_avdName = info.serialNumber; m_serialNumber.clear(); m_deviceAPILevel = info.sdk; } else { m_avdName.clear(); m_serialNumber = info.serialNumber; } AndroidManager::setDeviceSerialNumber(target(), m_serialNumber); ProjectExplorer::BuildConfiguration *bc = target()->activeBuildConfiguration(); QtSupport::BaseQtVersion *version = QtSupport::QtKitInformation::qtVersion(target()->kit()); if (!version) return false; m_uninstallPreviousPackageRun = m_uninstallPreviousPackage || m_uninstallPreviousPackageTemp; m_uninstallPreviousPackageTemp = false; if (m_uninstallPreviousPackageRun) { m_packageName = AndroidManager::packageName(target()); if (m_packageName.isEmpty()){ emit addOutput(tr("Cannot find the package name."), ErrorOutput); return false; } } ProjectExplorer::ProcessParameters *pp = processParameters(); m_useAndroiddeployqt = version->qtVersion() >= QtSupport::QtVersionNumber(5, 4, 0); if (m_useAndroiddeployqt) { AndroidBuildApkStep *androidBuildApkStep = AndroidGlobal::buildStep<AndroidBuildApkStep>(target()->activeBuildConfiguration()); if (!androidBuildApkStep) { emit addOutput(tr("Cannot find the android build step."), ErrorOutput); return false; } Utils::FileName tmp = AndroidManager::androidQtSupport(target())->androiddeployqtPath(target()); if (tmp.isEmpty()) { emit addOutput(tr("Cannot find the androiddeployqt tool."), ErrorOutput); return false; } pp->setCommand(tmp.toString()); const QString output(bc->buildDirectory().appendPath(QLatin1String(Constants::ANDROID_BUILDDIRECTORY)).toString()); pp->setWorkingDirectory(output); Utils::QtcProcess::addArg(&m_androiddeployqtArgs, QLatin1String("--verbose")); Utils::QtcProcess::addArg(&m_androiddeployqtArgs, QLatin1String("--output")); Utils::QtcProcess::addArg(&m_androiddeployqtArgs, output); Utils::QtcProcess::addArg(&m_androiddeployqtArgs, QLatin1String("--no-build")); Utils::QtcProcess::addArg(&m_androiddeployqtArgs, QLatin1String("--input")); tmp = AndroidManager::androidQtSupport(target())->androiddeployJsonPath(target()); if (tmp.isEmpty()) { emit addOutput(tr("Cannot find the androiddeploy Json file."), ErrorOutput); return false; } Utils::QtcProcess::addArg(&m_androiddeployqtArgs, tmp.toString()); if (m_uninstallPreviousPackageRun) Utils::QtcProcess::addArg(&m_androiddeployqtArgs, QLatin1String("--install")); else Utils::QtcProcess::addArg(&m_androiddeployqtArgs, QLatin1String("--reinstall")); Utils::QtcProcess::addArg(&m_androiddeployqtArgs, QLatin1String("--deployment")); switch (androidBuildApkStep->deployAction()) { case AndroidBuildApkStep::MinistroDeployment: Utils::QtcProcess::addArg(&m_androiddeployqtArgs, QLatin1String("ministro")); break; case AndroidBuildApkStep::DebugDeployment: Utils::QtcProcess::addArg(&m_androiddeployqtArgs, QLatin1String("debug")); break; case AndroidBuildApkStep::BundleLibrariesDeployment: Utils::QtcProcess::addArg(&m_androiddeployqtArgs, QLatin1String("bundled")); break; } } else { pp->setCommand(AndroidConfigurations::currentConfig().adbToolPath().toString()); m_apkPath = AndroidManager::androidQtSupport(target())->apkPath(target(), AndroidManager::signPackage(target()) ? AndroidQtSupport::ReleaseBuildSigned : AndroidQtSupport::DebugBuild).toString(); pp->setWorkingDirectory(bc->buildDirectory().toString()); } pp->setMacroExpander(bc->macroExpander()); Utils::Environment env = bc->environment(); pp->setEnvironment(env); m_buildDirectory = bc->buildDirectory().toString(); bool result = AbstractProcessStep::init(); if (!result) return false; if (AndroidConfigurations::currentConfig().findAvd(m_deviceAPILevel, m_targetArch).isEmpty()) AndroidConfigurations::currentConfig().startAVDAsync(m_avdName); return true; }
AndroidRunnerWorker::AndroidRunnerWorker(RunWorker *runner, const QString &packageName) : m_packageName(packageName) , m_adbLogcatProcess(nullptr, deleter) , m_psIsAlive(nullptr, deleter) , m_logCatRegExp(regExpLogcat) , m_gdbServerProcess(nullptr, deleter) , m_jdbProcess(nullptr, deleter) { auto runConfig = runner->runControl()->runConfiguration(); auto aspect = runConfig->aspect<Debugger::DebuggerRunConfigurationAspect>(); Core::Id runMode = runner->runMode(); const bool debuggingMode = runMode == ProjectExplorer::Constants::DEBUG_RUN_MODE; m_useCppDebugger = debuggingMode && aspect->useCppDebugger(); if (debuggingMode && aspect->useQmlDebugger()) m_qmlDebugServices = QmlDebug::QmlDebuggerServices; else if (runMode == ProjectExplorer::Constants::QML_PROFILER_RUN_MODE) m_qmlDebugServices = QmlDebug::QmlProfilerServices; else if (runMode == ProjectExplorer::Constants::QML_PREVIEW_RUN_MODE) m_qmlDebugServices = QmlDebug::QmlPreviewServices; else m_qmlDebugServices = QmlDebug::NoQmlDebugServices; m_localGdbServerPort = Utils::Port(5039); QTC_CHECK(m_localGdbServerPort.isValid()); if (m_qmlDebugServices != QmlDebug::NoQmlDebugServices) { qCDebug(androidRunWorkerLog) << "QML debugging enabled"; QTcpServer server; QTC_ASSERT(server.listen(QHostAddress::LocalHost), qDebug() << tr("No free ports available on host for QML debugging.")); m_qmlServer.setScheme(Utils::urlTcpScheme()); m_qmlServer.setHost(server.serverAddress().toString()); m_qmlServer.setPort(server.serverPort()); qCDebug(androidRunWorkerLog) << "QML server:" << m_qmlServer.toDisplayString(); } m_localJdbServerPort = Utils::Port(5038); QTC_CHECK(m_localJdbServerPort.isValid()); auto target = runConfig->target(); m_deviceSerialNumber = AndroidManager::deviceSerialNumber(target); m_apiLevel = AndroidManager::deviceApiLevel(target); m_extraEnvVars = runConfig->aspect<EnvironmentAspect>()->environment(); qCDebug(androidRunWorkerLog) << "Environment variables for the app" << m_extraEnvVars.toStringList(); m_extraAppParams = runConfig->runnable().commandLineArguments; if (auto aspect = runConfig->aspect(Constants::ANDROID_AMSTARTARGS)) m_amStartExtraArgs = static_cast<BaseStringAspect *>(aspect)->value().split(' '); if (auto aspect = runConfig->aspect(Constants::ANDROID_PRESTARTSHELLCMDLIST)) { for (const QString &shellCmd : static_cast<BaseStringListAspect *>(aspect)->value()) m_beforeStartAdbCommands.append(QString("shell %1").arg(shellCmd)); } for (const QString &shellCmd : runner->recordedData(Constants::ANDROID_PRESTARTSHELLCMDLIST).toStringList()) m_beforeStartAdbCommands.append(QString("shell %1").arg(shellCmd)); if (auto aspect = runConfig->aspect(Constants::ANDROID_POSTFINISHSHELLCMDLIST)) { for (const QString &shellCmd : static_cast<BaseStringListAspect *>(aspect)->value()) m_afterFinishAdbCommands.append(QString("shell %1").arg(shellCmd)); } for (const QString &shellCmd : runner->recordedData(Constants::ANDROID_POSTFINISHSHELLCMDLIST).toStringList()) m_afterFinishAdbCommands.append(QString("shell %1").arg(shellCmd)); qCDebug(androidRunWorkerLog) << "Device Serial:" << m_deviceSerialNumber << "API level:" << m_apiLevel << "Extra Start Args:" << m_amStartExtraArgs << "Before Start ADB cmds:" << m_beforeStartAdbCommands << "After finish ADB cmds:" << m_afterFinishAdbCommands; m_gdbserverPath = AndroidGdbServerKitAspect::gdbServer(target->kit()).toString(); QtSupport::BaseQtVersion *version = QtSupport::QtKitAspect::qtVersion(target->kit()); m_useAppParamsForQmlDebugger = version->qtVersion() >= QtSupport::QtVersionNumber(5, 12); }
bool AndroidDeployQtStep::init() { m_androiddeployqtArgs.clear(); if (AndroidManager::checkForQt51Files(project()->projectDirectory())) emit addOutput(tr("Found old folder \"android\" in source directory. Qt 5.2 does not use that folder by default."), ErrorOutput); m_targetArch = AndroidManager::targetArch(target()); if (m_targetArch.isEmpty()) { emit addOutput(tr("No Android arch set by the .pro file."), ErrorOutput); return false; } AndroidBuildApkStep *androidBuildApkStep = AndroidGlobal::buildStep<AndroidBuildApkStep>(target()->activeBuildConfiguration()); if (!androidBuildApkStep) { emit addOutput(tr("Cannot find the android build step."), ErrorOutput); return false; } m_deviceAPILevel = AndroidManager::minimumSDK(target()); AndroidConfigurations::Options options = AndroidConfigurations::None; if (androidBuildApkStep->deployAction() == AndroidBuildApkStep::DebugDeployment) options = AndroidConfigurations::FilterAndroid5; AndroidDeviceInfo info = AndroidConfigurations::showDeviceDialog(project(), m_deviceAPILevel, m_targetArch, options); if (info.serialNumber.isEmpty()) // aborted return false; if (info.type == AndroidDeviceInfo::Emulator) { m_avdName = info.serialNumber; m_serialNumber.clear(); m_deviceAPILevel = info.sdk; } else { m_avdName.clear(); m_serialNumber = info.serialNumber; } AndroidManager::setDeviceSerialNumber(target(), m_serialNumber); ProjectExplorer::BuildConfiguration *bc = target()->activeBuildConfiguration(); QtSupport::BaseQtVersion *version = QtSupport::QtKitInformation::qtVersion(target()->kit()); if (!version) return false; m_uninstallPreviousPackageRun = m_uninstallPreviousPackage; if (m_uninstallPreviousPackageRun) m_manifestName = AndroidManager::manifestPath(target()); m_useAndroiddeployqt = version->qtVersion() >= QtSupport::QtVersionNumber(5, 4, 0); if (m_useAndroiddeployqt) { Utils::FileName tmp = AndroidManager::androidQtSupport(target())->androiddeployqtPath(target()); if (tmp.isEmpty()) { emit addOutput(tr("Cannot find the androiddeployqt tool."), ErrorOutput); return false; } m_command = tmp.toString(); m_workingDirectory = bc->buildDirectory().appendPath(QLatin1String(Constants::ANDROID_BUILDDIRECTORY)).toString(); Utils::QtcProcess::addArg(&m_androiddeployqtArgs, QLatin1String("--verbose")); Utils::QtcProcess::addArg(&m_androiddeployqtArgs, QLatin1String("--output")); Utils::QtcProcess::addArg(&m_androiddeployqtArgs, m_workingDirectory); Utils::QtcProcess::addArg(&m_androiddeployqtArgs, QLatin1String("--no-build")); Utils::QtcProcess::addArg(&m_androiddeployqtArgs, QLatin1String("--input")); tmp = AndroidManager::androidQtSupport(target())->androiddeployJsonPath(target()); if (tmp.isEmpty()) { emit addOutput(tr("Cannot find the androiddeploy Json file."), ErrorOutput); return false; } Utils::QtcProcess::addArg(&m_androiddeployqtArgs, tmp.toString()); Utils::QtcProcess::addArg(&m_androiddeployqtArgs, QLatin1String("--deployment")); switch (androidBuildApkStep->deployAction()) { case AndroidBuildApkStep::MinistroDeployment: Utils::QtcProcess::addArg(&m_androiddeployqtArgs, QLatin1String("ministro")); break; case AndroidBuildApkStep::DebugDeployment: Utils::QtcProcess::addArg(&m_androiddeployqtArgs, QLatin1String("debug")); break; case AndroidBuildApkStep::BundleLibrariesDeployment: Utils::QtcProcess::addArg(&m_androiddeployqtArgs, QLatin1String("bundled")); break; } if (androidBuildApkStep->useGradle()) Utils::QtcProcess::addArg(&m_androiddeployqtArgs, QLatin1String("--gradle")); if (androidBuildApkStep->signPackage()) { // The androiddeployqt tool is not really written to do stand-alone installations. // This hack forces it to use the correct filename for the apk file when installing // as a temporary fix until androiddeployqt gets the support. Since the --sign is // only used to get the correct file name of the apk, its parameters are ignored. Utils::QtcProcess::addArg(&m_androiddeployqtArgs, QLatin1String("--sign")); Utils::QtcProcess::addArg(&m_androiddeployqtArgs, QLatin1String("foo")); Utils::QtcProcess::addArg(&m_androiddeployqtArgs, QLatin1String("bar")); } } else { m_uninstallPreviousPackageRun = true; m_command = AndroidConfigurations::currentConfig().adbToolPath().toString(); m_apkPath = AndroidManager::androidQtSupport(target())->apkPath(target()).toString(); m_workingDirectory = bc->buildDirectory().toString(); } m_environment = bc->environment(); m_buildDirectory = bc->buildDirectory().toString(); m_adbPath = AndroidConfigurations::currentConfig().adbToolPath().toString(); if (AndroidConfigurations::currentConfig().findAvd(m_deviceAPILevel, m_targetArch).isEmpty()) AndroidConfigurations::currentConfig().startAVDAsync(m_avdName); return true; }
void BasicBundleProvider::mergeBundlesForKit(ProjectExplorer::Kit *kit , QmlLanguageBundles &bundles , const QHash<QString,QString> &replacements) { QHash<QString,QString> myReplacements = replacements; bundles.mergeBundleForLanguage(Dialect::QmlQbs, defaultQbsBundle()); bundles.mergeBundleForLanguage(Dialect::QmlTypeInfo, defaultQmltypesBundle()); bundles.mergeBundleForLanguage(Dialect::QmlProject, defaultQmlprojectBundle()); QtSupport::BaseQtVersion *qtVersion = QtSupport::QtKitInformation::qtVersion(kit); if (!qtVersion) { QmlBundle b1(defaultQt4QtQuick1Bundle()); bundles.mergeBundleForLanguage(Dialect::Qml, b1); bundles.mergeBundleForLanguage(Dialect::QmlQtQuick1, b1); QmlBundle b11(defaultQt5QtQuick1Bundle()); bundles.mergeBundleForLanguage(Dialect::Qml, b11); bundles.mergeBundleForLanguage(Dialect::QmlQtQuick1, b11); QmlBundle b2(defaultQt5QtQuick2Bundle()); bundles.mergeBundleForLanguage(Dialect::Qml, b2); bundles.mergeBundleForLanguage(Dialect::QmlQtQuick2, b2); bundles.mergeBundleForLanguage(Dialect::QmlQtQuick2Ui, b2); return; } QString qtImportsPath = qtVersion->qmakeProperty("QT_INSTALL_IMPORTS"); QString qtQmlPath = qtVersion->qmakeProperty("QT_INSTALL_QML"); Core::FeatureSet features = qtVersion->availableFeatures(); if (features.contains(Core::Feature(QtSupport::Constants::FEATURE_QT_QUICK)) || features.contains(Core::Feature(QtSupport::Constants::FEATURE_QT_QUICK_1)) || features.contains(Core::Feature(QtSupport::Constants::FEATURE_QT_QUICK_1_1))) { myReplacements.insert(QLatin1String("$(CURRENT_DIRECTORY)"), qtImportsPath); QDir qtQuick1Bundles(qtImportsPath); qtQuick1Bundles.setNameFilters(QStringList(QLatin1String("*-bundle.json"))); QmlBundle qtQuick1Bundle; QFileInfoList list = qtQuick1Bundles.entryInfoList(); for (int i = 0; i < list.size(); ++i) { QmlBundle bAtt; QStringList errors; if (!bAtt.readFrom(list.value(i).filePath(), &errors)) qWarning() << "BasicBundleProvider: ERROR reading " << list[i].filePath() << " : " << errors; qtQuick1Bundle.merge(bAtt); } if (!qtQuick1Bundle.supportedImports().contains(QLatin1String("QtQuick 1."), PersistentTrie::Partial)) { if (qtVersion->qtVersion().majorVersion == 4) qtQuick1Bundle.merge(defaultQt4QtQuick1Bundle()); else if (qtVersion->qtVersion().majorVersion > 4) qtQuick1Bundle.merge(defaultQt5QtQuick1Bundle()); } qtQuick1Bundle.replaceVars(myReplacements); bundles.mergeBundleForLanguage(Dialect::Qml, qtQuick1Bundle); bundles.mergeBundleForLanguage(Dialect::QmlQtQuick1, qtQuick1Bundle); } if (features.contains(Core::Feature(QtSupport::Constants::FEATURE_QT_QUICK_2))) { myReplacements.insert(QLatin1String("$(CURRENT_DIRECTORY)"), qtQmlPath); QDir qtQuick2Bundles(qtQmlPath); qtQuick2Bundles.setNameFilters(QStringList(QLatin1String("*-bundle.json"))); QmlBundle qtQuick2Bundle; QFileInfoList list = qtQuick2Bundles.entryInfoList(); for (int i = 0; i < list.size(); ++i) { QmlBundle bAtt; QStringList errors; if (!bAtt.readFrom(list.value(i).filePath(), &errors)) qWarning() << "BasicBundleProvider: ERROR reading " << list[i].filePath() << " : " << errors; qtQuick2Bundle.merge(bAtt); } if (!qtQuick2Bundle.supportedImports().contains(QLatin1String("QtQuick 2."), PersistentTrie::Partial)) { qtQuick2Bundle.merge(defaultQt5QtQuick2Bundle()); } qtQuick2Bundle.replaceVars(myReplacements); bundles.mergeBundleForLanguage(Dialect::Qml, qtQuick2Bundle); bundles.mergeBundleForLanguage(Dialect::QmlQtQuick2, qtQuick2Bundle); bundles.mergeBundleForLanguage(Dialect::QmlQtQuick2Ui, qtQuick2Bundle); } }