Android: Set correct ANDROID_NDK_PLATFORM

Introduce the class AndroidQmakeBuildConfiguration whose purpose is
to set the environment variable. Modify the Factory to create
buildconfigurations of that type and fix restore/clone to also
take the factories' priorities into account.

Change-Id: Icb377fa9211cd3564c36b60cf7c5f7dd84fcab50
Reviewed-by: BogDan Vatra <bogdan@kde.org>
This commit is contained in:
Daniel Teske
2015-01-27 18:46:40 +01:00
parent 5442d144b6
commit e7b90b8681
15 changed files with 193 additions and 66 deletions

View File

@@ -149,7 +149,7 @@ QString AndroidManager::activityName(ProjectExplorer::Target *target)
int AndroidManager::minimumSDK(ProjectExplorer::Target *target)
{
QDomDocument doc;
if (!openManifest(target, doc))
if (!openXmlFile(doc, AndroidManager::manifestSourcePath(target)))
return 0;
QDomElement manifestElem = doc.documentElement();
QDomElement usesSdk = manifestElem.firstChildElement(QLatin1String("uses-sdk"));
@@ -192,7 +192,18 @@ QString AndroidManager::targetArch(ProjectExplorer::Target *target)
Utils::FileName AndroidManager::dirPath(ProjectExplorer::Target *target)
{
return target->activeBuildConfiguration()->buildDirectory().appendPath(QLatin1String(Constants::ANDROID_BUILDDIRECTORY));
if (target->activeBuildConfiguration())
return target->activeBuildConfiguration()->buildDirectory().appendPath(QLatin1String(Constants::ANDROID_BUILDDIRECTORY));
return Utils::FileName();
}
Utils::FileName AndroidManager::manifestSourcePath(ProjectExplorer::Target *target)
{
AndroidQtSupport *androidQtSupport = AndroidManager::androidQtSupport(target);
Utils::FileName source = androidQtSupport->manifestSourcePath(target);
if (!source.isEmpty())
return source;
return manifestPath(target);
}
Utils::FileName AndroidManager::manifestPath(ProjectExplorer::Target *target)

View File

@@ -77,6 +77,7 @@ public:
static Utils::FileName dirPath(ProjectExplorer::Target *target);
static Utils::FileName manifestPath(ProjectExplorer::Target *target);
static Utils::FileName manifestSourcePath(ProjectExplorer::Target *target);
static Utils::FileName libsPath(ProjectExplorer::Target *target);
static Utils::FileName defaultPropertiesPath(ProjectExplorer::Target *target);

View File

@@ -51,7 +51,9 @@ AndroidManifestDocument::AndroidManifestDocument(AndroidManifestEditorWidget *ed
bool AndroidManifestDocument::save(QString *errorString, const QString &fileName, bool autoSave)
{
m_editorWidget->preSave();
return TextDocument::save(errorString, fileName, autoSave);
bool result = TextDocument::save(errorString, fileName, autoSave);
m_editorWidget->postSave();
return result;
}
QString AndroidManifestDocument::defaultPath() const

View File

@@ -617,6 +617,16 @@ void AndroidManifestEditorWidget::preSave()
updateInfoBar();
}
void AndroidManifestEditorWidget::postSave()
{
const QString docPath(m_textEditorWidget->textDocument()->filePath().toString());
ProjectExplorer::Project *project = androidProject(docPath);
if (Target *target = project->activeTarget()) {
AndroidQtSupport *androidQtSupport = AndroidManager::androidQtSupport(target);
androidQtSupport->manifestSaved(target);
}
}
Core::IEditor *AndroidManifestEditorWidget::editor() const
{
return m_editor;

View File

@@ -105,6 +105,7 @@ public:
bool setActivePage(EditorPage page);
void preSave();
void postSave();
Core::IEditor *editor() const;
TextEditor::TextEditorWidget *textEditorWidget() const;

View File

@@ -66,7 +66,8 @@ public:
virtual Utils::FileName apkPath(ProjectExplorer::Target *target) const;
virtual Utils::FileName androiddeployqtPath(ProjectExplorer::Target *target) const = 0;
virtual Utils::FileName androiddeployJsonPath(ProjectExplorer::Target *target) const = 0;
virtual void resetBuild(const ProjectExplorer::Target *target) = 0;
virtual void manifestSaved(const ProjectExplorer::Target *target) = 0;
virtual Utils::FileName manifestSourcePath(const ProjectExplorer::Target *target) = 0;
};
} // namespace Android

View File

@@ -103,24 +103,10 @@ QList<Abi> AndroidQtVersion::detectQtAbis() const
void AndroidQtVersion::addToEnvironment(const Kit *k, Utils::Environment &env) const
{
Q_UNUSED(k);
// 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"), AndroidConfigurations::currentConfig().toolchainHost());
env.set(QLatin1String("ANDROID_NDK_ROOT"), AndroidConfigurations::currentConfig().ndkLocation().toUserOutput());
Project *project = ProjectTree::currentProject();
if (!project || !project->activeTarget()
|| QtSupport::QtKitInformation::qtVersion(k)->type() != QLatin1String(Constants::ANDROIDQT))
return;
Target *target = project->activeTarget();
if (DeviceTypeKitInformation::deviceTypeId(target->kit()) != Constants::ANDROID_DEVICE_TYPE)
return;
if (AndroidConfigurations::currentConfig().ndkLocation().isEmpty()
|| AndroidConfigurations::currentConfig().sdkLocation().isEmpty())
return;
env.set(QLatin1String("ANDROID_NDK_PLATFORM"),
AndroidConfigurations::currentConfig().bestNdkPlatformMatch(AndroidManager::minimumSDK(target)));
}
Utils::Environment AndroidQtVersion::qmakeRunEnvironment() const