bool AndroidBuildApkStep::init(QList<const BuildStep *> &earlierSteps) { ProjectExplorer::BuildConfiguration *bc = buildConfiguration(); if (m_signPackage) { // check keystore and certificate passwords while (!AndroidManager::checkKeystorePassword(m_keystorePath.toString(), m_keystorePasswd)) { if (!keystorePassword()) return false; // user canceled } while (!AndroidManager::checkCertificatePassword(m_keystorePath.toString(), m_keystorePasswd, m_certificateAlias, m_certificatePasswd)) { if (!certificatePassword()) return false; // user canceled } if (bc->buildType() != ProjectExplorer::BuildConfiguration::Release) emit addOutput(tr("Warning: Signing a debug or profile package."), BuildStep::ErrorMessageOutput); } QtSupport::BaseQtVersion *version = QtSupport::QtKitInformation::qtVersion(target()->kit()); if (!version) return false; JavaParser *parser = new JavaParser; parser->setProjectFileList(target()->project()->files(ProjectExplorer::Project::AllFiles)); parser->setSourceDirectory(androidPackageSourceDir()); parser->setBuildDirectory(Utils::FileName::fromString(bc->buildDirectory().appendPath(QLatin1String(Constants::ANDROID_BUILDDIRECTORY)).toString())); setOutputParser(parser); m_openPackageLocationForRun = m_openPackageLocation; m_apkPath = AndroidManager::androidQtSupport(target())->apkPath(target()).toString(); bool result = AbstractProcessStep::init(earlierSteps); if (!result) return false; return true; }
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; }