From a268ff2ed68cc40ef3dbe43a9d523762d22b0843 Mon Sep 17 00:00:00 2001 From: Burak Hancerli Date: Mon, 8 Apr 2024 12:19:08 +0200 Subject: [PATCH 1/2] Fix build issues and create APK for the Android with Qt6 --- androidnsd.cpp | 3 ++- example/CMakeLists.txt | 46 +++++++++++++++++++++++++++++++++++------- example/window.cpp | 21 ++++++++++++++----- 3 files changed, 57 insertions(+), 13 deletions(-) diff --git a/androidnsd.cpp b/androidnsd.cpp index 69de66b..fe0968c 100644 --- a/androidnsd.cpp +++ b/androidnsd.cpp @@ -60,7 +60,8 @@ QZeroConfPrivate::QZeroConfPrivate(QZeroConf *parent) #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) nsdManager = QAndroidJniObject("qtzeroconf/QZeroConfNsdManager", "(JLandroid/content/Context;)V", reinterpret_cast(this), QtAndroid::androidActivity().object()); #else - nsdManager = QAndroidJniObject("qtzeroconf/QZeroConfNsdManager", "(JLandroid/content/Context;)V", reinterpret_cast(this), QNativeInterface::QAndroidApplication::context()); + nsdManager = QAndroidJniObject("qtzeroconf/QZeroConfNsdManager", "(JLandroid/content/Context;)V", reinterpret_cast(this), + QNativeInterface::QAndroidApplication::context().object()); #endif if (nsdManager.isValid()) { jclass objectClass = env->GetObjectClass(nsdManager.object()); diff --git a/example/CMakeLists.txt b/example/CMakeLists.txt index 3166ccf..4a175fa 100644 --- a/example/CMakeLists.txt +++ b/example/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.4) +cmake_minimum_required(VERSION 3.14) project(QtZeroConfExample) find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Core Network) @@ -14,13 +14,45 @@ if(NOT TARGET QtZeroConf) find_package(QtZeroConf CONFIG REQUIRED) endif() -add_executable(QtZeroConfExample - window.h - window.cpp - main.cpp -) +# Check if it's Android and if Qt is >= 6.6.0 +if(ANDROID AND QT_VERSION_MAJOR GREATER_EQUAL 6 AND QT_VERSION_MINOR GREATER_EQUAL 6) + qt_add_executable(${PROJECT_NAME} + window.h + window.cpp + main.cpp + ) + + if(NOT EXISTS ${ANDROID_OPENSSL_PATH}) + message(WARNING "Cannot find OpenSSL for Android. Path: ${ANDROID_OPENSSL_PATH}") + message(FATAL_ERROR "Please set ANDROID_OPENSSL_PATH to the path of OpenSSL for Android.") + endif() + + message(STATUS "Found OpenSSL for Android. Path: ${ANDROID_OPENSSL_PATH}") + set_property(TARGET ${PROJECT_NAME} + PROPERTY QT_ANDROID_TARGET_SDK_VERSION + 34 + ) + + set_property(TARGET ${PROJECT_NAME} + PROPERTY QT_ANDROID_EXTRA_LIBS + ${ANDROID_OPENSSL_PATH}/libcrypto_3.so + ${ANDROID_OPENSSL_PATH}/libssl_3.so + ) + + set_property(TARGET ${PROJECT_NAME} + APPEND PROPERTY QT_ANDROID_PACKAGE_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/android + ) + + set_directory_properties(PROPERTIES ADDITIONAL_CLEAN_FILES ${CMAKE_BINARY_DIR}/src/android-build) +else () + add_executable(${PROJECT_NAME} + window.h + window.cpp + main.cpp + ) +endif() -target_link_libraries(QtZeroConfExample +target_link_libraries(${PROJECT_NAME} PRIVATE QtZeroConf Qt${QT_VERISON_MAJOR}::Gui Qt${QT_VERSION_MAJOR}::Widgets ) diff --git a/example/window.cpp b/example/window.cpp index 90e7d95..641044f 100644 --- a/example/window.cpp +++ b/example/window.cpp @@ -80,14 +80,24 @@ void mainWindow::buildGUI() connect(button, &QPushButton::clicked, this, &mainWindow::stopPublishClicked); table.verticalHeader()->hide(); - table.horizontalHeader()->hide(); + // table.horizontalHeader()->hide(); table.setColumnCount(2); - layout->addWidget(&table); //table.setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + // set up the table + table.setHorizontalHeaderLabels(QStringList() << "Name" + << "IP Address"); + table.horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); + table.horizontalHeader()->setStretchLastSection(true); + table.setEditTriggers(QAbstractItemView::NoEditTriggers); + table.setSelectionBehavior(QAbstractItemView::SelectRows); + table.setSelectionMode(QAbstractItemView::SingleSelection); + layout->addWidget(&table); + QWidget *widget = new QWidget; widget->setLayout(layout); setCentralWidget(widget); + show(); } @@ -160,9 +170,10 @@ void mainWindow::addService(QZeroConfService zcs) cell = new QTableWidgetItem(zcs->ip().toString()); table.setItem(row, 1, cell); table.resizeColumnsToContents(); - #if !(defined(Q_OS_IOS) || defined(Q_OS_ANDROID)) - setFixedSize(table.horizontalHeader()->length() + 60, table.verticalHeader()->length() + 100); - #endif + +#if !(defined(Q_OS_IOS) || defined(Q_OS_ANDROID)) + setFixedSize(table.horizontalHeader()->length() + 200, table.verticalHeader()->length() + 100); +#endif } void mainWindow::removeService(QZeroConfService zcs) From a0aa0f4f6148edacbe04eab29a59f94bdf42e7ea Mon Sep 17 00:00:00 2001 From: Burak Hancerli Date: Thu, 11 Apr 2024 08:50:10 +0200 Subject: [PATCH 2/2] fix: support Qt 6.7.0 --- androidnsd.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/androidnsd.cpp b/androidnsd.cpp index fe0968c..61f4dfe 100644 --- a/androidnsd.cpp +++ b/androidnsd.cpp @@ -59,6 +59,9 @@ QZeroConfPrivate::QZeroConfPrivate(QZeroConf *parent) // Note: needs to be quint64 as uintptr_t might be 32 or 64 bit depending on the system, while Java expects a jlong which is always 64 bit. #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) nsdManager = QAndroidJniObject("qtzeroconf/QZeroConfNsdManager", "(JLandroid/content/Context;)V", reinterpret_cast(this), QtAndroid::androidActivity().object()); +#elif QT_VERSION < QT_VERSION_CHECK(6, 7, 0) + nsdManager + = QAndroidJniObject("qtzeroconf/QZeroConfNsdManager", "(JLandroid/content/Context;)V", reinterpret_cast(this), QNativeInterface::QAndroidApplication::context()); #else nsdManager = QAndroidJniObject("qtzeroconf/QZeroConfNsdManager", "(JLandroid/content/Context;)V", reinterpret_cast(this), QNativeInterface::QAndroidApplication::context().object());