forked from qt-creator/qt-creator
Say hello to Android CMake support
Requirements: - NDKr19 or newer - Qt 5.12.1 or newer QtCreator supports the following variables: - ANDROID_PACKAGE_SOURCE_DIR - ANDROID_EXTRA_LIBS Be aware, that there is a lot of magic done on QtCreator side, and you can't use only cmake to build an Android APK. [ChangeLog][Android][CMake] Add Android support for CMake projects. Change-Id: I1d351976ed56f424c2bc972f4ff7b5968147a2ed Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
@@ -258,12 +258,40 @@ QString AndroidManager::buildTargetSDK(ProjectExplorer::Target *target)
|
||||
return fallback;
|
||||
}
|
||||
|
||||
QString AndroidManager::targetArch(ProjectExplorer::Target *target)
|
||||
QString AndroidManager::targetArch(const Target *target)
|
||||
{
|
||||
auto qt = static_cast<AndroidQtVersion *>(QtSupport::QtKitAspect::qtVersion(target->kit()));
|
||||
return qt->targetArch();
|
||||
}
|
||||
|
||||
QJsonObject AndroidManager::deploymentSettings(const Target *target)
|
||||
{
|
||||
QtSupport::BaseQtVersion *qt = QtSupport::QtKitAspect::qtVersion(target->kit());
|
||||
if (!qt)
|
||||
return {};
|
||||
|
||||
auto tc = ProjectExplorer::ToolChainKitAspect::toolChain(target->kit(), ProjectExplorer::Constants::CXX_LANGUAGE_ID);
|
||||
if (!tc || tc->typeId() != Constants::ANDROID_TOOLCHAIN_ID)
|
||||
return {};
|
||||
QJsonObject settings;
|
||||
settings["description"] = "This file is generated by QtCreator to be read by androiddeployqt and should not be modified by hand.";
|
||||
settings["qt"] = qt->qmakeProperty("QT_INSTALL_PREFIX");
|
||||
settings["ndk"] = AndroidConfigurations::currentConfig().ndkLocation().toString();
|
||||
settings["sdk"] = AndroidConfigurations::currentConfig().sdkLocation().toString();
|
||||
settings["sdkBuildToolsRevision"] = AndroidConfigurations::currentConfig().buildToolsVersion().toString();
|
||||
settings["application-binary"] = target->activeRunConfiguration()->buildTargetInfo().targetFilePath.toString();
|
||||
settings["target-architecture"] = targetArch(target);
|
||||
settings["toolchain-prefix"] = "llvm";
|
||||
settings["tool-prefix"] = "llvm";
|
||||
settings["useLLVM"] = true;
|
||||
settings["ndk-host"] = AndroidConfigurations::currentConfig().toolchainHost();
|
||||
settings["stdcpp-path"] = AndroidConfigurations::currentConfig().ndkLocation()
|
||||
.appendPath("/sources/cxx-stl/llvm-libc++/libs/")
|
||||
.appendString(targetArch(target))
|
||||
.appendPath("libc++_shared.so").toString();
|
||||
return settings;
|
||||
}
|
||||
|
||||
Utils::FileName AndroidManager::dirPath(const ProjectExplorer::Target *target)
|
||||
{
|
||||
if (target->activeBuildConfiguration())
|
||||
@@ -605,7 +633,8 @@ bool AndroidManager::updateGradleProperties(ProjectExplorer::Target *target)
|
||||
if (!node)
|
||||
return false;
|
||||
|
||||
QFileInfo sourceDirInfo(node->data(Constants::AndroidPackageSourceDir).toString());
|
||||
const QString sourceDirName = node->data(Constants::AndroidPackageSourceDir).toString();
|
||||
QFileInfo sourceDirInfo(sourceDirName);
|
||||
FileName packageSourceDir = FileName::fromString(sourceDirInfo.canonicalFilePath());
|
||||
if (!packageSourceDir.appendPath("gradlew").exists())
|
||||
return false;
|
||||
|
||||
Reference in New Issue
Block a user