From 674ec5efa98286b609862d2b9bcadde624bb7a5c Mon Sep 17 00:00:00 2001 From: BogDan Vatra Date: Sun, 6 Jan 2013 16:23:08 +0200 Subject: [PATCH] Send static_init_classes paratemer to Android application Change-Id: I3eba3413464bd0e503f24817769bd3062be0eeb2 Reviewed-by: Daniel Teske --- src/plugins/android/androidmanager.cpp | 13 ++++++++++--- src/plugins/android/androidmanager.h | 3 ++- src/plugins/android/androidrunner.cpp | 3 +++ src/plugins/android/androidrunner.h | 1 + 4 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/plugins/android/androidmanager.cpp b/src/plugins/android/androidmanager.cpp index 36e8b7beee1..5cf685fab0b 100644 --- a/src/plugins/android/androidmanager.cpp +++ b/src/plugins/android/androidmanager.cpp @@ -570,6 +570,11 @@ QString AndroidManager::loadLocalJars(ProjectExplorer::Target *target, int apiLe return loadLocal(target, apiLevel, Jar); } +QString AndroidManager::loadLocalJarsInitClasses(ProjectExplorer::Target *target, int apiLevel) +{ + return loadLocal(target, apiLevel, Jar, QLatin1String("initClass")); +} + QStringList AndroidManager::availableQtLibs(ProjectExplorer::Target *target) { QtSupport::BaseQtVersion *version = QtSupport::QtKitInformation::qtVersion(target->kit()); @@ -686,7 +691,7 @@ void AndroidManager::raiseError(const QString &reason) QMessageBox::critical(0, tr("Error creating Android templates"), reason); } -QString AndroidManager::loadLocal(ProjectExplorer::Target *target, int apiLevel, ItemType item) +QString AndroidManager::loadLocal(ProjectExplorer::Target *target, int apiLevel, ItemType item, const QString &attribute) { QString itemType; if (item == Lib) @@ -717,13 +722,15 @@ QString AndroidManager::loadLocal(ProjectExplorer::Target *target, int apiLevel, if (libs.contains(element.attribute(QLatin1String("name")))) { QDomElement libElement = element.firstChildElement(QLatin1String("depends")).firstChildElement(itemType); while (!libElement.isNull()) { - localLibs += libElement.attribute(QLatin1String("file")).arg(apiLevel) + QLatin1Char(':'); + if (libElement.hasAttribute(attribute)) + localLibs += libElement.attribute(attribute).arg(apiLevel) + QLatin1Char(':'); libElement = libElement.nextSiblingElement(itemType); } libElement = element.firstChildElement(QLatin1String("replaces")).firstChildElement(itemType); while (!libElement.isNull()) { - localLibs.replace(libElement.attribute(QLatin1String("file")).arg(apiLevel) + QLatin1Char(':'), QString()); + if (libElement.hasAttribute(attribute)) + localLibs.replace(libElement.attribute(attribute).arg(apiLevel) + QLatin1Char(':'), QString()); libElement = libElement.nextSiblingElement(itemType); } } diff --git a/src/plugins/android/androidmanager.h b/src/plugins/android/androidmanager.h index cd22b1d7fd7..0e12d6571b7 100644 --- a/src/plugins/android/androidmanager.h +++ b/src/plugins/android/androidmanager.h @@ -102,6 +102,7 @@ public: static Utils::FileName localLibsRulesFilePath(ProjectExplorer::Target *target); static QString loadLocalLibs(ProjectExplorer::Target *target, int apiLevel); static QString loadLocalJars(ProjectExplorer::Target *target, int apiLevel); + static QString loadLocalJarsInitClasses(ProjectExplorer::Target *target, int apiLevel); static QStringList availableQtLibs(ProjectExplorer::Target *target); static QStringList qtLibs(ProjectExplorer::Target *target); @@ -127,7 +128,7 @@ private: Lib, Jar }; - static QString loadLocal(ProjectExplorer::Target *target, int apiLevel, ItemType item); + static QString loadLocal(ProjectExplorer::Target *target, int apiLevel, ItemType item, const QString &attribute=QLatin1String("file")); class Library { diff --git a/src/plugins/android/androidrunner.cpp b/src/plugins/android/androidrunner.cpp index 0df3536f6f2..2a9a4bb7188 100644 --- a/src/plugins/android/androidrunner.cpp +++ b/src/plugins/android/androidrunner.cpp @@ -55,6 +55,7 @@ AndroidRunner::AndroidRunner(QObject *parent, AndroidRunConfiguration *runConfig if ((m_useLocalQtLibs = ds->useLocalQtLibs())) { m_localLibs = AndroidManager::loadLocalLibs(target, ds->deviceAPILevel()); m_localJars = AndroidManager::loadLocalJars(target, ds->deviceAPILevel()); + m_localJarsInitClasses = AndroidManager::loadLocalJarsInitClasses(target, ds->deviceAPILevel()); } m_intentName = AndroidManager::intentName(target); m_packageName = m_intentName.left(m_intentName.indexOf(QLatin1Char('/'))); @@ -198,6 +199,8 @@ void AndroidRunner::asyncStart() extraParams += QLatin1String(" -e libs_prefix /data/local/qt/"); extraParams += QLatin1String(" -e load_local_libs ") + m_localLibs; extraParams += QLatin1String(" -e load_local_jars ") + m_localJars; + if (!m_localJarsInitClasses.isEmpty()) + extraParams += QLatin1String(" -e static_init_classes ") + m_localJarsInitClasses; } extraParams = extraParams.trimmed(); diff --git a/src/plugins/android/androidrunner.h b/src/plugins/android/androidrunner.h index 24be23db8b5..c66525f16af 100644 --- a/src/plugins/android/androidrunner.h +++ b/src/plugins/android/androidrunner.h @@ -92,6 +92,7 @@ private: bool m_useLocalQtLibs; QString m_localLibs; QString m_localJars; + QString m_localJarsInitClasses; QMutex m_mutex; };