From eb7adb8d9787dddef89e46f7bf6e594d0b5faf4b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Cotty?= Date: Sun, 6 Sep 2020 15:18:51 +0200 Subject: Android: Allow exporting of Qt modules by using importingProduct The product variable in the Export item refers to the exporting item. If a qbs property is changed (example: qbs.architecture for the multiplexing in Android) then the Depend failed because the qbs module was not loaded yet for the exporting item. Fixes: QBS-1576 Change-Id: I220c47b3094727fe169d3dccd244ab2785a782b7 Reviewed-by: Ivan Komissarov --- .../Qt/templates/android_support.qbs | 12 ++++- .../auto/blackbox/testdata-android/qt-app/main.cpp | 10 ++++ .../blackbox/testdata-android/qt-app/qt-app.qbs | 18 ++++++++ tests/auto/blackbox/tst_blackboxandroid.cpp | 53 +++++++++++++++++++++- 4 files changed, 90 insertions(+), 3 deletions(-) create mode 100644 tests/auto/blackbox/testdata-android/qt-app/main.cpp create mode 100644 tests/auto/blackbox/testdata-android/qt-app/qt-app.qbs diff --git a/share/qbs/module-providers/Qt/templates/android_support.qbs b/share/qbs/module-providers/Qt/templates/android_support.qbs index 410b05ff9..a7eb8fdcf 100644 --- a/share/qbs/module-providers/Qt/templates/android_support.qbs +++ b/share/qbs/module-providers/Qt/templates/android_support.qbs @@ -18,9 +18,17 @@ Module { property string _androidDeployQtFilePath: FileInfo.joinPaths(_qtInstallDir, "bin", "androiddeployqt") property string _qtInstallDir - property bool _enableSdkSupport: product.type && product.type.contains("android.package") + // TODO: Remove in 1.20 + // From 1.20 product property used from an export item will point to the + // importingProduct property. So using the importingProduct property will be useless + // and the change will be reverted + property var _importingProduct: (typeof importingProduct !== "undefined") ? importingProduct : + product + property bool _enableSdkSupport: _importingProduct.type + && _importingProduct.type.contains("android.package") && !consoleApplication - property bool _enableNdkSupport: !product.aggregate || product.multiplexConfigurationId + property bool _enableNdkSupport: !_importingProduct.aggregate + || _importingProduct.multiplexConfigurationId property string _templatesBaseDir: FileInfo.joinPaths(_qtInstallDir, "src", "android") property string _deployQtOutDir: FileInfo.joinPaths(product.buildDirectory, "deployqt_out") diff --git a/tests/auto/blackbox/testdata-android/qt-app/main.cpp b/tests/auto/blackbox/testdata-android/qt-app/main.cpp new file mode 100644 index 000000000..6278e2924 --- /dev/null +++ b/tests/auto/blackbox/testdata-android/qt-app/main.cpp @@ -0,0 +1,10 @@ +#include +#include + +int main(int argc, char *argv[]) +{ + QApplication a(argc, argv); + QMainWindow w; + w.show(); + return 0; +} diff --git a/tests/auto/blackbox/testdata-android/qt-app/qt-app.qbs b/tests/auto/blackbox/testdata-android/qt-app/qt-app.qbs new file mode 100644 index 000000000..ceeda2dc3 --- /dev/null +++ b/tests/auto/blackbox/testdata-android/qt-app/qt-app.qbs @@ -0,0 +1,18 @@ +Project { + QtGuiApplication { + Depends { name: "Lib" } + files: "main.cpp" + Android.sdk.packageName: "my.qtapp" + Android.sdk.apkBaseName: name + Depends { name: "Qt"; submodules: ["core", "widgets"] } + } + + StaticLibrary { + name: "Lib" + Export { + Depends { + name: "Qt.android_support"; + } + } + } +} diff --git a/tests/auto/blackbox/tst_blackboxandroid.cpp b/tests/auto/blackbox/tst_blackboxandroid.cpp index 5e850874e..95e9997bc 100644 --- a/tests/auto/blackbox/tst_blackboxandroid.cpp +++ b/tests/auto/blackbox/tst_blackboxandroid.cpp @@ -85,7 +85,7 @@ void TestBlackboxAndroid::android() QFETCH(bool, isIncrementalBuild); const SettingsPtr s = settings(); - Profile p(theProfileName(projectDir == "qml-app"), s.get()); + Profile p(theProfileName(projectDir == "qml-app" || projectDir == "qt-app"), s.get()); if (!p.exists()) p = Profile("none", s.get()); int status; @@ -292,6 +292,57 @@ void TestBlackboxAndroid::android_data() bool generateAab = false; bool isIncrementalBuild = false; + auto qtAppExpectedFiles = [&](bool generateAab) { + QByteArrayList expectedFile; + if (usingOldQt) { + expectedFile << commonFiles(generateAab) + expandArchs(ndkArchsForQt, { + cxxLibPath("libgnustl_shared.so", true), + "assets/--Added-by-androiddeployqt--/qt_cache_pregenerated_file_list", + "lib/${ARCH}/libplugins_imageformats_libqgif.so", + "lib/${ARCH}/libplugins_imageformats_libqicns.so", + "lib/${ARCH}/libplugins_imageformats_libqico.so", + "lib/${ARCH}/libplugins_imageformats_libqjpeg.so", + "lib/${ARCH}/libplugins_imageformats_libqtga.so", + "lib/${ARCH}/libplugins_imageformats_libqtiff.so", + "lib/${ARCH}/libplugins_imageformats_libqwbmp.so", + "lib/${ARCH}/libplugins_imageformats_libqwebp.so", + "lib/${ARCH}/libplugins_platforms_android_libqtforandroid.so", + "lib/${ARCH}/libplugins_styles_libqandroidstyle.so", + "lib/${ARCH}/libQt5Core.so", + "lib/${ARCH}/libQt5Gui.so", + "lib/${ARCH}/libQt5Widgets.so", + "lib/${ARCH}/libqt-app.so"}, generateAab); + } else { + expectedFile << commonFiles(generateAab) + expandArchs(ndkArchsForQt, { + cxxLibPath("libgnustl_shared.so", true), + "lib/${ARCH}/libplugins_imageformats_qgif_${ARCH}.so", + "lib/${ARCH}/libplugins_imageformats_qicns_${ARCH}.so", + "lib/${ARCH}/libplugins_imageformats_qico_${ARCH}.so", + "lib/${ARCH}/libplugins_imageformats_qjpeg_${ARCH}.so", + "lib/${ARCH}/libplugins_imageformats_qtga_${ARCH}.so", + "lib/${ARCH}/libplugins_imageformats_qtiff_${ARCH}.so", + "lib/${ARCH}/libplugins_imageformats_qwbmp_${ARCH}.so", + "lib/${ARCH}/libplugins_imageformats_qwebp_${ARCH}.so", + "lib/${ARCH}/libplugins_platforms_qtforandroid_${ARCH}.so", + "lib/${ARCH}/libplugins_styles_qandroidstyle_${ARCH}.so", + "lib/${ARCH}/libQt5Core_${ARCH}.so", + "lib/${ARCH}/libQt5Gui_${ARCH}.so", + "lib/${ARCH}/libQt5Widgets_${ARCH}.so", + "lib/${ARCH}/libqt-app_${ARCH}.so"}, generateAab); + } + if (generateAab) + expectedFile << "base/resources.pb" << "base/assets.pb" << "base/native.pb"; + else + expectedFile << "resources.arsc"; + return expectedFile; + }; + QTest::newRow("qt app") + << "qt-app" << QStringList("qt-app") + << (QList() << (QByteArrayList() << qtAppExpectedFiles(generateAab) + << "res/layout/splash.xml")) + << QStringList{aaptVersion(enableAapt2), packageType(generateAab)} + << enableAapt2 << generateAab << isIncrementalBuild; + auto teaPotAppExpectedFiles = [&](const QByteArrayList &archs, bool generateAab) { QByteArrayList expectedFile; expectedFile << commonFiles(generateAab) + expandArchs(archs, { -- cgit v1.2.3