From ca486ad0b138d75a6ef73bfc2517424406155d7c Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Fri, 22 Jan 2021 15:42:55 +0100 Subject: Qt/Android: Extend rule cycle prevention hack After we did remove the hpp tag from the java-generated header, it was re-added by a file tagger in the cpp modules file, leading to an unexpected state on rebuilding. Fix this by replacing the tag, rather than removing it. Fixes: QBS-1628 Change-Id: I9d182cd30cf9a637733b84234e7a0b37f7583334 Reviewed-by: Ivan Komissarov --- share/qbs/modules/java/JavaModule.qbs | 8 +++- .../blackbox/testdata-android/qt-app/Test.java | 54 ++++++++++++++++++++++ .../blackbox/testdata-android/qt-app/qt-app.qbs | 2 +- tests/auto/blackbox/tst_blackboxandroid.cpp | 19 ++++++-- 4 files changed, 77 insertions(+), 6 deletions(-) create mode 100644 tests/auto/blackbox/testdata-android/qt-app/Test.java diff --git a/share/qbs/modules/java/JavaModule.qbs b/share/qbs/modules/java/JavaModule.qbs index 71f7d8432..ad055fe34 100644 --- a/share/qbs/modules/java/JavaModule.qbs +++ b/share/qbs/modules/java/JavaModule.qbs @@ -234,14 +234,18 @@ Module { inputsFromDependencies: ["java.jar"] explicitlyDependsOn: ["java.class-internal"] - outputFileTags: ["java.class"].concat(_tagJniHeaders ? ["hpp"] : []) // Annotations can produce additional java source files. Ignored for now. + outputFileTags: ["java.class"].concat(_tagJniHeaders ? ["hpp"] : ["java.jni-hpp"]) // Annotations can produce additional java source files. Ignored for now. outputArtifacts: { var artifacts = JavaUtils.outputArtifacts(product, inputs); if (!product.java._tagJniHeaders) { for (var i = 0; i < artifacts.length; ++i) { var a = artifacts[i]; if (Array.isArray(a.fileTags)) - a.fileTags = a.fileTags.filter(function(tag) { return tag != "hpp"; }); + a.fileTags = a.fileTags.map(function(tag) { + if (tag === "hpp") + return "java.jni-hpp"; + return tag; + }); } } return artifacts; diff --git a/tests/auto/blackbox/testdata-android/qt-app/Test.java b/tests/auto/blackbox/testdata-android/qt-app/Test.java new file mode 100644 index 000000000..c57486d56 --- /dev/null +++ b/tests/auto/blackbox/testdata-android/qt-app/Test.java @@ -0,0 +1,54 @@ +package org.qbs.example; + +import org.qtproject.qt5.android.bindings.QtActivity; +import android.os.*; +import android.content.*; +import android.app.*; +import android.util.Log; + +import java.lang.String; +import android.content.Intent; + +import org.qbs.example.*; + + +public class Test extends QtActivity +{ + public static native void testFunc(String test); + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + Log.d("qbs", "onCreate Test"); + Intent theIntent = getIntent(); + if (theIntent != null) { + String theAction = theIntent.getAction(); + if (theAction != null) { + Log.d("qbs onCreate ", theAction); + } + } + } + + @Override + public void onDestroy() { + Log.d("qbs", "onDestroy"); + System.exit(0); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + Log.d("qbs onActivityResult", "requestCode: "+requestCode); + if (resultCode == RESULT_OK) { + Log.d("qbs onActivityResult - resultCode: ", "SUCCESS"); + } else { + Log.d("qbs onActivityResult - resultCode: ", "CANCEL"); + } + } + + @Override + public void onNewIntent(Intent intent) { + Log.d("qbs", "onNewIntent"); + super.onNewIntent(intent); + setIntent(intent); + } +} diff --git a/tests/auto/blackbox/testdata-android/qt-app/qt-app.qbs b/tests/auto/blackbox/testdata-android/qt-app/qt-app.qbs index 981c9eb3d..94093af64 100644 --- a/tests/auto/blackbox/testdata-android/qt-app/qt-app.qbs +++ b/tests/auto/blackbox/testdata-android/qt-app/qt-app.qbs @@ -1,7 +1,7 @@ Project { QtGuiApplication { Depends { name: "Lib" } - files: ["main.cpp", "MainWindow.cpp", "MainWindow.h"] + files: ["main.cpp", "MainWindow.cpp", "MainWindow.h", "Test.java"] Android.sdk.packageName: "my.qtapp" Android.sdk.apkBaseName: name Depends { name: "Qt"; submodules: ["core", "widgets"] } diff --git a/tests/auto/blackbox/tst_blackboxandroid.cpp b/tests/auto/blackbox/tst_blackboxandroid.cpp index 291960792..a03c9e318 100644 --- a/tests/auto/blackbox/tst_blackboxandroid.cpp +++ b/tests/auto/blackbox/tst_blackboxandroid.cpp @@ -79,7 +79,7 @@ void TestBlackboxAndroid::android() QFETCH(QString, projectDir); QFETCH(QStringList, productNames); QFETCH(QList, expectedFilesLists); - QFETCH(QStringList, qmlAppCustomProperties); + QFETCH(QStringList, customProperties); QFETCH(bool, enableAapt2); QFETCH(bool, generateAab); QFETCH(bool, isIncrementalBuild); @@ -112,6 +112,8 @@ void TestBlackboxAndroid::android() const QString buildSubDir = enableAapt2 ? (generateAab ? "aab" : "aapt2") : "aapt"; QDir::setCurrent(testDataDir + "/" + projectDir); + if (!isIncrementalBuild) + rmDirR(relativeBuildDir(buildSubDir)); static const QStringList configNames { "debug", "release" }; for (const QString &configName : configNames) { @@ -119,7 +121,7 @@ void TestBlackboxAndroid::android() const QString configArgument = "config:" + configName; QbsRunParameters resolveParams("resolve"); resolveParams.buildDirectory = buildSubDir; - resolveParams.arguments << configArgument << qmlAppCustomProperties; + resolveParams.arguments << configArgument << customProperties; resolveParams.profile = p.name(); QCOMPARE(runQbs(resolveParams), 0); QbsRunParameters buildParams(QStringList{"--command-echo-mode", "command-line", @@ -279,7 +281,7 @@ void TestBlackboxAndroid::android_data() QTest::addColumn("projectDir"); QTest::addColumn("productNames"); QTest::addColumn>("expectedFilesLists"); - QTest::addColumn("qmlAppCustomProperties"); + QTest::addColumn("customProperties"); QTest::addColumn("enableAapt2"); QTest::addColumn("generateAab"); QTest::addColumn("isIncrementalBuild"); @@ -351,6 +353,17 @@ void TestBlackboxAndroid::android_data() << QStringList{aaptVersion(enableAapt2), packageType(generateAab)} << enableAapt2 << generateAab << isIncrementalBuild; + const QByteArrayList ndkArchsForQtSave = ndkArchsForQt; + ndkArchsForQt = {ndkArchsForQt.first()}; + QTest::newRow("qt app (single arch)") + << "qt-app" << QStringList("qt-app") + << (QList() << (QByteArrayList() << qtAppExpectedFiles(generateAab, + enableAapt2))) + << QStringList{aaptVersion(enableAapt2), packageType(generateAab), + "modules.qbs.architectures:" + archsForQt.first()} + << enableAapt2 << generateAab << isIncrementalBuild; + ndkArchsForQt = ndkArchsForQtSave; + auto teaPotAppExpectedFiles = [&](const QByteArrayList &archs, bool generateAab) { QByteArrayList expectedFile; expectedFile << commonFiles(generateAab) + expandArchs(archs, { -- cgit v1.2.3