From 75be0186e437f6d198f3d51c46361ce46edc1f2a Mon Sep 17 00:00:00 2001 From: shyamnathp Date: Thu, 11 Jan 2024 18:53:31 +0100 Subject: [PATCH] Initial support for PySide6 and Qt bootstrap (#2918) * Initial support for PySide6 - Add a new bootstrap for Qt - This bootstrap will be used by `pyside6-android-deploy` tool shipped with PySide6, which interally calls pythonforandroid using buildozer. - The Qt bootstrap depends on recipes PySide6 and shiboken6 among other mandatory recipes. The recipes for PySide6 and shiboken6 resides in the PySide repository - https://code.qt.io/cgit/pyside/pyside-setup.git/tree/sources/pyside-tools/deploy_lib/android/recipes - The PythonActivity entrypoint class is derived from QtActivity class which is the main acitivty class when a Qt C++ application is packaged for Android. The jar containing QtActivity class is supplied through buildozer `android.add_jars` option. - The C wrapper binary to the application main.py is named as `main_{abi_name}` instead of just `main` for other bootstraps. - Multi architecture deployment is not supported at the moment. - Adapt tests based on the new Qt bootstrap * Add Qt boostrap to docs - update the docs to include sections depicting the Qt boostrap. * Tweak gradle build properties for Qt bootstrap - Sometimes a flaky Java heap out of memory error is throw. By, tweaking the memory setting we can get rid of that error. * Fix bug - check for main.py - Qt boostrap removed from comparison in the changed line because its expects a value is args.launcher, which is not applicable for Qt boostrap. Hence, it exits with an value not found exception. - Removing Qt boostrap from the comparison leads to checking for main.py or --private, which is to be done for the Qt boostrap. * Make --init-classes truly optional - check if empty, otherwise store empty string * Add a non-gui test app build to CI that uses Qt bootstrap - for the purpose of testing, the pyside6 and shiboken6 wheels, the extra .jar files needed and the recipes for pyside6 and shiboken6 are manually added into testapps/on_device_unit_tests/test_qt. These files are normally generated by the `pyside6-android-deploy` tool that is shipped with PySide. Generating the wheels and the .jar files belongs to the scope of PySide and not python-for-android. Hence, they are not done here. This also reduces the load on the CI which will otherwise have to cross-compile CPython and PySide. - The Android aarch64 wheels for testing are downloaded from Qt servers. These wheels are for testing purposes only and the download link will be updated when official PySide6 Android wheels are generated. - Tests were added in test_requirements.py so that when running the apk the current date and time are printed on the terminal. The tests also checks shiboken6 and PySide6 module imports. * Remove superfluous whitespace removal - This was introduced by a VSCode setting and is unrealated to this patch. Although this might be good, this has to be introduced through a different patch. - pyside6 recipe typo adapted in buildoptions.rst * Add aab generation to test app with Qt bootstrap * Fix typo in doc/source/buildoptions.rst Co-authored-by: Mirko Galimberti --------- Co-authored-by: Shyamnath Premnadh Co-authored-by: Mirko Galimberti --- .github/workflows/push.yml | 2 + Makefile | 20 ++ doc/source/buildoptions.rst | 43 +++ doc/source/commands.rst | 8 +- doc/source/quickstart.rst | 7 +- .../bootstraps/common/build/build.py | 34 ++- .../build/templates/gradle.tmpl.properties | 5 + pythonforandroid/bootstraps/qt/__init__.py | 53 ++++ .../bootstraps/qt/build/.gitignore | 14 + .../bootstraps/qt/build/blacklist.txt | 70 +++++ .../bootstraps/qt/build/jni/Application.mk | 8 + .../qt/build/jni/application/src/Android.mk | 18 ++ .../jni/application/src/Android_static.mk | 9 + .../jni/application/src/bootstrap_name.h | 4 + .../qt/build/src/main/assets/.gitkeep | 0 .../qt/build/src/main/java/.gitkeep | 0 .../java/org/kivy/android/PythonActivity.java | 245 ++++++++++++++++++ .../qt/build/src/main/jniLibs/.gitkeep | 0 .../qt/build/src/main/libs/.gitkeep | 0 .../qt/build/src/main/res/drawable/.gitkeep | 0 .../qt/build/src/main/res/mipmap/.gitkeep | 0 .../build/templates/AndroidManifest.tmpl.xml | 106 ++++++++ .../qt/build/templates/libs.tmpl.xml | 27 ++ .../qt/build/templates/strings.tmpl.xml | 6 + pythonforandroid/recipe.py | 5 +- pythonforandroid/recipes/android/__init__.py | 2 +- .../recipes/genericndkbuild/__init__.py | 2 + .../on_device_unit_tests/test_app/main.py | 1 + .../test_app/tests/test_requirements.py | 22 ++ .../test_qt/jar/PySide6/jar/Qt6Android.jar | Bin 0 -> 134543 bytes .../jar/PySide6/jar/Qt6AndroidBindings.jar | Bin 0 -> 23527 bytes .../test_qt/recipes/PySide6/__init__.py | 63 +++++ .../test_qt/recipes/shiboken6/__init__.py | 39 +++ tests/test_bootstrap.py | 20 +- 34 files changed, 819 insertions(+), 14 deletions(-) create mode 100644 pythonforandroid/bootstraps/qt/__init__.py create mode 100644 pythonforandroid/bootstraps/qt/build/.gitignore create mode 100644 pythonforandroid/bootstraps/qt/build/blacklist.txt create mode 100644 pythonforandroid/bootstraps/qt/build/jni/Application.mk create mode 100644 pythonforandroid/bootstraps/qt/build/jni/application/src/Android.mk create mode 100644 pythonforandroid/bootstraps/qt/build/jni/application/src/Android_static.mk create mode 100644 pythonforandroid/bootstraps/qt/build/jni/application/src/bootstrap_name.h create mode 100644 pythonforandroid/bootstraps/qt/build/src/main/assets/.gitkeep create mode 100644 pythonforandroid/bootstraps/qt/build/src/main/java/.gitkeep create mode 100644 pythonforandroid/bootstraps/qt/build/src/main/java/org/kivy/android/PythonActivity.java create mode 100644 pythonforandroid/bootstraps/qt/build/src/main/jniLibs/.gitkeep create mode 100644 pythonforandroid/bootstraps/qt/build/src/main/libs/.gitkeep create mode 100644 pythonforandroid/bootstraps/qt/build/src/main/res/drawable/.gitkeep create mode 100644 pythonforandroid/bootstraps/qt/build/src/main/res/mipmap/.gitkeep create mode 100644 pythonforandroid/bootstraps/qt/build/templates/AndroidManifest.tmpl.xml create mode 100644 pythonforandroid/bootstraps/qt/build/templates/libs.tmpl.xml create mode 100644 pythonforandroid/bootstraps/qt/build/templates/strings.tmpl.xml create mode 100644 testapps/on_device_unit_tests/test_qt/jar/PySide6/jar/Qt6Android.jar create mode 100644 testapps/on_device_unit_tests/test_qt/jar/PySide6/jar/Qt6AndroidBindings.jar create mode 100644 testapps/on_device_unit_tests/test_qt/recipes/PySide6/__init__.py create mode 100644 testapps/on_device_unit_tests/test_qt/recipes/shiboken6/__init__.py diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml index d7f789aaaf..4eff5d0f61 100644 --- a/.github/workflows/push.yml +++ b/.github/workflows/push.yml @@ -70,6 +70,8 @@ jobs: target: testapps-webview - name: service_library target: testapps-service_library-aar + - name: qt + target: testapps-qt steps: - name: Checkout python-for-android uses: actions/checkout@v4 diff --git a/Makefile b/Makefile index 9747c6c43d..b894bed3ea 100644 --- a/Makefile +++ b/Makefile @@ -82,6 +82,26 @@ testapps-service_library-aar: virtualenv --requirements python3 \ --arch=arm64-v8a --arch=x86 --release +testapps-qt: testapps-qt/debug/apk testapps-qt/release/aab + +# testapps-webview/MODE/ARTIFACT +testapps-qt/%: virtualenv + $(eval MODE := $(word 2, $(subst /, ,$@))) + $(eval ARTIFACT := $(word 3, $(subst /, ,$@))) + @echo Building testapps-qt for $(MODE) mode and $(ARTIFACT) artifact + . $(ACTIVATE) && cd testapps/on_device_unit_tests/ && \ + python setup.py $(ARTIFACT) --$(MODE) --sdk-dir $(ANDROID_SDK_HOME) --ndk-dir $(ANDROID_NDK_HOME) \ + --bootstrap qt \ + --requirements python3,shiboken6,pyside6 \ + --arch=arm64-v8a \ + --local-recipes ./test_qt/recipes \ + --qt-libs Core \ + --load-local-libs plugins_platforms_qtforandroid \ + --add-jar ./test_qt/jar/PySide6/jar/Qt6Android.jar \ + --add-jar ./test_qt/jar/PySide6/jar/Qt6AndroidBindings.jar \ + --permission android.permission.WRITE_EXTERNAL_STORAGE \ + --permission android.permission.INTERNET + testapps/%: virtualenv $(eval $@_APP_ARCH := $(shell basename $*)) . $(ACTIVATE) && cd testapps/on_device_unit_tests/ && \ diff --git a/doc/source/buildoptions.rst b/doc/source/buildoptions.rst index 44bae679c1..782bd67295 100644 --- a/doc/source/buildoptions.rst +++ b/doc/source/buildoptions.rst @@ -204,6 +204,49 @@ systems and frameworks. include multiple jar files, pass this argument multiple times. - ``add-source``: Add a source directory to the app's Java code. +Qt +~~ + +This bootstrap can be used with ``--bootstrap=qt`` or by including the ``PySide6`` or +``shiboken6`` recipe, e.g. ``--requirements=pyside6,shiboken6``. Currently, the only way +to use this bootstrap is through `pyside6-android-deploy `__ +tool shipped with ``PySide6``, as the recipes for ``PySide6`` and ``shiboken6`` are created +dynamically. The tool builds ``PySide6`` and ``shiboken6`` wheels for a specific Android platform +and the recipes simply unpack the built wheels. You can see the recipes `here `__. + +.. note:: + The ``pyside6-android-deploy`` tool and hence the Qt bootstrap does not support multi-architecture + builds currently. + +What are Qt and PySide? +%%%%%%%%%%%%%%%%%%%%%%%% + +`Qt `__ is a popularly used cross-platform C++ framework for developing +GUI applications. `PySide6 `__ refers to the +Python bindings for Qt6, and enables the Python developers access to the Qt6 API. +`Shiboken6 `__ is the binding generator +tool used for generating the Python bindings from C++ code. + +.. note:: The `shiboken6` recipe is for the `Shiboken Python module `__ + which includes a couple of utility functions for inspecting and debugging PySide6 code. + +Build Options +%%%%%%%%%%%%% + +``pyside6-android-deploy`` works by generating a ``buildozer.spec`` file and thereby using +`buildozer `__ to control the build options used by +``python-for-android`` with the Qt bootstrap. Apart from the general build options that works +across all the other bootstraps, the Qt bootstrap introduces the following 3 new build options. + +- ``--qt-libs``: list of Qt libraries(modules) to be loaded. +- ``--load-local-libs``: list of Qt plugin libraries to be loaded. +- ``--init-classes``: list of Java class names to the loaded from the Qt jar files supplied through + the ``--add-jar`` option. + +These build options are automatically populated by the ``pyside6-android-deploy`` tool, but can be +modified by updating the ``buildozer.spec`` file. Apart from the above 3 build options, the tool +also automatically identifies the values to be fed into the cli options ``--permission``, ``--add-jar`` +depending on the PySide6 modules used by the applicaiton. Requirements blacklist (APK size optimization) ---------------------------------------------- diff --git a/doc/source/commands.rst b/doc/source/commands.rst index 5a0884aa5e..dda644e47a 100644 --- a/doc/source/commands.rst +++ b/doc/source/commands.rst @@ -26,7 +26,7 @@ behaviour, though not all commands make use of them. ``--debug`` Print extra debug information about the build, including all compilation output. - + ``--sdk_dir`` The filepath where the Android SDK is installed. This can alternatively be set in several other ways. @@ -34,7 +34,7 @@ behaviour, though not all commands make use of them. ``--android_api`` The Android API level to target; python-for-android will check if the platform tools for this level are installed. - + ``--ndk_dir`` The filepath where the Android NDK is installed. This can alternatively be set in several other ways. @@ -74,12 +74,12 @@ supply those that you need. The architecture to build for. You can specify multiple architectures to build for at the same time. As an example ``p4a ... --arch arm64-v8a --arch armeabi-v7a ...`` will build a distribution for both ``arm64-v8a`` and ``armeabi-v7a``. - + ``--bootstrap BOOTSTRAP`` The Java bootstrap to use for your application. You mostly don't need to worry about this or set it manually, as an appropriate bootstrap will be chosen from your ``--requirements``. Current - choices are ``sdl2`` (used with Kivy and most other apps) or ``webview``. + choices are ``sdl2`` (used with Kivy and most other apps), ``webview`` or ``qt``. .. note:: These options are preliminary. Others will include toggles diff --git a/doc/source/quickstart.rst b/doc/source/quickstart.rst index 95c4eefc4e..987a00cddb 100644 --- a/doc/source/quickstart.rst +++ b/doc/source/quickstart.rst @@ -26,8 +26,8 @@ Concepts - **bootstrap:** A bootstrap is the app backend that will start your application. The default for graphical applications is SDL2. - You can also use e.g. the webview for web apps, or service_only/service_library for - background services. Different bootstraps have different additional + You can also use e.g. the webview for web apps, or service_only/service_library for + background services, or qt for PySide6 apps. Different bootstraps have different additional build options. *Advanced:* @@ -281,7 +281,7 @@ Recipe management You can see the list of the available recipes with:: p4a recipes - + If you are contributing to p4a and want to test a recipes again, you need to clean the build and rebuild your distribution:: @@ -295,7 +295,6 @@ it (edit the ``__init__.py``):: mkdir -p p4a-recipes/myrecipe touch p4a-recipes/myrecipe/__init__.py - Distribution management ~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/pythonforandroid/bootstraps/common/build/build.py b/pythonforandroid/bootstraps/common/build/build.py index eced5886c8..29d16ea9f2 100644 --- a/pythonforandroid/bootstraps/common/build/build.py +++ b/pythonforandroid/bootstraps/common/build/build.py @@ -83,7 +83,7 @@ def get_bootstrap_name(): if PYTHON is not None and not exists(PYTHON): PYTHON = None -if _bootstrap_name in ('sdl2', 'webview', 'service_only'): +if _bootstrap_name in ('sdl2', 'webview', 'service_only', 'qt'): WHITELIST_PATTERNS.append('pyconfig.h') environment = jinja2.Environment(loader=jinja2.FileSystemLoader( @@ -543,6 +543,7 @@ def make_package(args): } if get_bootstrap_name() == "sdl2": render_args["url_scheme"] = url_scheme + render( 'AndroidManifest.tmpl.xml', manifest_path, @@ -571,7 +572,8 @@ def make_package(args): render( 'gradle.tmpl.properties', 'gradle.properties', - args=args) + args=args, + bootstrap_name=get_bootstrap_name()) # ant build templates render( @@ -601,6 +603,26 @@ def make_package(args): join(res_dir, 'values/strings.xml'), **render_args) + # Library resources from Qt + # These are referred by QtLoader.java in Qt6AndroidBindings.jar + # qt_libs and load_local_libs are loaded at App startup + if get_bootstrap_name() == "qt": + qt_libs = args.qt_libs.split(",") + load_local_libs = args.load_local_libs.split(",") + init_classes = args.init_classes + if init_classes: + init_classes = init_classes.split(",") + init_classes = ":".join(init_classes) + arch = get_dist_info_for("archs")[0] + render( + 'libs.tmpl.xml', + join(res_dir, 'values/libs.xml'), + qt_libs=qt_libs, + load_local_libs=load_local_libs, + init_classes=init_classes, + arch=arch + ) + if exists(join("templates", "custom_rules.tmpl.xml")): render( 'custom_rules.tmpl.xml', @@ -951,6 +973,14 @@ def create_argument_parser(): help='Use that parameter if you need to implement your own PythonServive Java class') ap.add_argument('--activity-class-name', dest='activity_class_name', default=DEFAULT_PYTHON_ACTIVITY_JAVA_CLASS, help='The full java class name of the main activity') + if get_bootstrap_name() == "qt": + ap.add_argument('--qt-libs', dest='qt_libs', required=True, + help='comma separated list of Qt libraries to be loaded') + ap.add_argument('--load-local-libs', dest='load_local_libs', required=True, + help='comma separated list of Qt plugin libraries to be loaded') + ap.add_argument('--init-classes', dest='init_classes', default='', + help='comma separated list of java class names to be loaded from the Qt jar files, ' + 'specified through add_jar cli option') return ap diff --git a/pythonforandroid/bootstraps/common/build/templates/gradle.tmpl.properties b/pythonforandroid/bootstraps/common/build/templates/gradle.tmpl.properties index f99dd5a052..cea16375d2 100644 --- a/pythonforandroid/bootstraps/common/build/templates/gradle.tmpl.properties +++ b/pythonforandroid/bootstraps/common/build/templates/gradle.tmpl.properties @@ -1,3 +1,8 @@ +{% if bootstrap_name == "qt" %} +# For tweaking memory settings. Otherwise, a p4a session with Qt bootstrap and PySide6 recipe +# terminates with a Java out of memory exception +org.gradle.jvmargs=-Xmx2500m -XX:MaxMetaspaceSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 +{% endif %} {% if args.enable_androidx %} android.useAndroidX=true android.enableJetifier=true diff --git a/pythonforandroid/bootstraps/qt/__init__.py b/pythonforandroid/bootstraps/qt/__init__.py new file mode 100644 index 0000000000..9a6e03f064 --- /dev/null +++ b/pythonforandroid/bootstraps/qt/__init__.py @@ -0,0 +1,53 @@ +import sh +from os.path import join +from pythonforandroid.toolchain import ( + Bootstrap, current_directory, info, info_main, shprint) +from pythonforandroid.util import ensure_dir, rmdir + + +class QtBootstrap(Bootstrap): + name = 'qt' + recipe_depends = ['python3', 'genericndkbuild', 'PySide6', 'shiboken6'] + # this is needed because the recipes PySide6 and shiboken6 resides in the PySide Qt repository + # - https://code.qt.io/cgit/pyside/pyside-setup.git/ + # Without this some tests will error because it cannot find the recipes within pythonforandroid + # repository + can_be_chosen_automatically = False + + def assemble_distribution(self): + info_main("# Creating Android project using Qt bootstrap") + + rmdir(self.dist_dir) + info("Copying gradle build") + shprint(sh.cp, '-r', self.build_dir, self.dist_dir) + + with current_directory(self.dist_dir): + with open('local.properties', 'w') as fileh: + fileh.write('sdk.dir={}'.format(self.ctx.sdk_dir)) + + arch = self.ctx.archs[0] + if len(self.ctx.archs) > 1: + raise ValueError("Trying to build for more than one arch. Qt bootstrap cannot handle that yet") + + info(f"Bootstrap running with arch {arch}") + + with current_directory(self.dist_dir): + info("Copying Python distribution") + + self.distribute_libs(arch, [self.ctx.get_libs_dir(arch.arch)]) + self.distribute_aars(arch) + self.distribute_javaclasses(self.ctx.javaclass_dir, + dest_dir=join("src", "main", "java")) + + python_bundle_dir = join(f'_python_bundle__{arch.arch}', '_python_bundle') + ensure_dir(python_bundle_dir) + site_packages_dir = self.ctx.python_recipe.create_python_bundle( + join(self.dist_dir, python_bundle_dir), arch) + + if not self.ctx.with_debug_symbols: + self.strip_libraries(arch) + self.fry_eggs(site_packages_dir) + super().assemble_distribution() + + +bootstrap = QtBootstrap() diff --git a/pythonforandroid/bootstraps/qt/build/.gitignore b/pythonforandroid/bootstraps/qt/build/.gitignore new file mode 100644 index 0000000000..a1fc39c070 --- /dev/null +++ b/pythonforandroid/bootstraps/qt/build/.gitignore @@ -0,0 +1,14 @@ +.gradle +/build/ + +# Ignore Gradle GUI config +gradle-app.setting + +# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored) +!gradle-wrapper.jar + +# Cache of project +.gradletasknamecache + +# # Work around https://youtrack.jetbrains.com/issue/IDEA-116898 +# gradle/wrapper/gradle-wrapper.properties diff --git a/pythonforandroid/bootstraps/qt/build/blacklist.txt b/pythonforandroid/bootstraps/qt/build/blacklist.txt new file mode 100644 index 0000000000..65f6e4df2e --- /dev/null +++ b/pythonforandroid/bootstraps/qt/build/blacklist.txt @@ -0,0 +1,70 @@ +# prevent user to include invalid extensions +*.apk +*.aab +*.apks +*.pxd + +# eggs +*.egg-info + +# unit test +unittest/* + +# python config +config/makesetup + +# unused encodings +lib-dynload/*codec* +encodings/cp*.pyo +encodings/tis* +encodings/shift* +encodings/bz2* +encodings/iso* +encodings/undefined* +encodings/johab* +encodings/p* +encodings/m* +encodings/euc* +encodings/k* +encodings/unicode_internal* +encodings/quo* +encodings/gb* +encodings/big5* +encodings/hp* +encodings/hz* + +# unused python modules +bsddb/* +wsgiref/* +hotshot/* +pydoc_data/* +tty.pyo +anydbm.pyo +nturl2path.pyo +LICENCE.txt +macurl2path.pyo +dummy_threading.pyo +audiodev.pyo +antigravity.pyo +dumbdbm.pyo +sndhdr.pyo +__phello__.foo.pyo +sunaudio.pyo +os2emxpath.pyo +multiprocessing/dummy* + +# unused binaries python modules +lib-dynload/termios.so +lib-dynload/_lsprof.so +lib-dynload/*audioop.so +lib-dynload/_hotshot.so +lib-dynload/_heapq.so +lib-dynload/_json.so +lib-dynload/grp.so +lib-dynload/resource.so +lib-dynload/pyexpat.so +lib-dynload/_ctypes_test.so +lib-dynload/_testcapi.so + +# odd files +plat-linux3/regen diff --git a/pythonforandroid/bootstraps/qt/build/jni/Application.mk b/pythonforandroid/bootstraps/qt/build/jni/Application.mk new file mode 100644 index 0000000000..e3d23e5be1 --- /dev/null +++ b/pythonforandroid/bootstraps/qt/build/jni/Application.mk @@ -0,0 +1,8 @@ + +# Uncomment this if you're using STL in your project +# See CPLUSPLUS-SUPPORT.html in the NDK documentation for more information +# APP_STL := stlport_static + +# APP_ABI := armeabi armeabi-v7a x86 +APP_ABI := $(ARCH) +APP_PLATFORM := $(NDK_API) diff --git a/pythonforandroid/bootstraps/qt/build/jni/application/src/Android.mk b/pythonforandroid/bootstraps/qt/build/jni/application/src/Android.mk new file mode 100644 index 0000000000..aebe3f623b --- /dev/null +++ b/pythonforandroid/bootstraps/qt/build/jni/application/src/Android.mk @@ -0,0 +1,18 @@ +LOCAL_PATH := $(call my-dir) + +include $(CLEAR_VARS) + +LOCAL_MODULE := main_$(PREFERRED_ABI) + +# Add your application source files here... +LOCAL_SRC_FILES := start.c + +LOCAL_CFLAGS += -I$(PYTHON_INCLUDE_ROOT) $(EXTRA_CFLAGS) + +LOCAL_SHARED_LIBRARIES := python_shared + +LOCAL_LDLIBS := -llog $(EXTRA_LDLIBS) + +LOCAL_LDFLAGS += -L$(PYTHON_LINK_ROOT) $(APPLICATION_ADDITIONAL_LDFLAGS) + +include $(BUILD_SHARED_LIBRARY) diff --git a/pythonforandroid/bootstraps/qt/build/jni/application/src/Android_static.mk b/pythonforandroid/bootstraps/qt/build/jni/application/src/Android_static.mk new file mode 100644 index 0000000000..1bb58cb76d --- /dev/null +++ b/pythonforandroid/bootstraps/qt/build/jni/application/src/Android_static.mk @@ -0,0 +1,9 @@ +LOCAL_PATH := $(call my-dir) + +include $(CLEAR_VARS) + +LOCAL_MODULE := main_$(PREFERRED_ABI) + +LOCAL_SRC_FILES := start.c + +include $(BUILD_SHARED_LIBRARY) diff --git a/pythonforandroid/bootstraps/qt/build/jni/application/src/bootstrap_name.h b/pythonforandroid/bootstraps/qt/build/jni/application/src/bootstrap_name.h new file mode 100644 index 0000000000..8a4d8aa464 --- /dev/null +++ b/pythonforandroid/bootstraps/qt/build/jni/application/src/bootstrap_name.h @@ -0,0 +1,4 @@ + +#define BOOTSTRAP_USES_NO_SDL_HEADERS + +const char bootstrap_name[] = "qt"; diff --git a/pythonforandroid/bootstraps/qt/build/src/main/assets/.gitkeep b/pythonforandroid/bootstraps/qt/build/src/main/assets/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/pythonforandroid/bootstraps/qt/build/src/main/java/.gitkeep b/pythonforandroid/bootstraps/qt/build/src/main/java/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/pythonforandroid/bootstraps/qt/build/src/main/java/org/kivy/android/PythonActivity.java b/pythonforandroid/bootstraps/qt/build/src/main/java/org/kivy/android/PythonActivity.java new file mode 100644 index 0000000000..81cad01616 --- /dev/null +++ b/pythonforandroid/bootstraps/qt/build/src/main/java/org/kivy/android/PythonActivity.java @@ -0,0 +1,245 @@ +package org.kivy.android; + +import android.os.SystemClock; + +import java.io.File; +import java.util.Collections; +import java.util.Iterator; +import java.util.List; +import java.util.ArrayList; + +import android.app.Activity; +import android.app.AlertDialog; +import android.content.DialogInterface; +import android.content.Intent; +import android.view.KeyEvent; +import android.util.Log; +import android.widget.Toast; +import android.os.Bundle; +import android.os.PowerManager; +import android.content.Context; +import android.content.pm.PackageManager; + +import org.qtproject.qt.android.bindings.QtActivity; +import org.qtproject.qt.android.QtNative; + +public class PythonActivity extends QtActivity { + + private static final String TAG = "PythonActivity"; + + public static PythonActivity mActivity = null; + + private Bundle mMetaData = null; + private PowerManager.WakeLock mWakeLock = null; + + public String getAppRoot() { + String app_root = getFilesDir().getAbsolutePath() + "/app"; + return app_root; + } + + public String getEntryPoint(String search_dir) { + /* Get the main file (.pyc|.py) depending on if we + * have a compiled version or not. + */ + List entryPoints = new ArrayList(); + entryPoints.add("main.pyc"); // python 3 compiled files + for (String value : entryPoints) { + File mainFile = new File(search_dir + "/" + value); + if (mainFile.exists()) { + return value; + } + } + return "main.py"; + } + + @Override + public void onCreate(Bundle savedInstanceState) { + this.mActivity = this; + Log.v(TAG, "Ready to unpack"); + File app_root_file = new File(getAppRoot()); + PythonUtil.unpackAsset(mActivity, "private", app_root_file, true); + PythonUtil.unpackPyBundle(mActivity, getApplicationInfo().nativeLibraryDir + "/" + "libpybundle", app_root_file, false); + + Log.v("Python", "Device: " + android.os.Build.DEVICE); + Log.v("Python", "Model: " + android.os.Build.MODEL); + + // Set up the Python environment + String app_root_dir = getAppRoot(); + String mFilesDirectory = mActivity.getFilesDir().getAbsolutePath(); + String entry_point = getEntryPoint(app_root_dir); + + Log.v(TAG, "Setting env vars for start.c and Python to use"); + QtNative.setEnvironmentVariable("ANDROID_ENTRYPOINT", entry_point); + QtNative.setEnvironmentVariable("ANDROID_ARGUMENT", app_root_dir); + QtNative.setEnvironmentVariable("ANDROID_APP_PATH", app_root_dir); + QtNative.setEnvironmentVariable("ANDROID_PRIVATE", mFilesDirectory); + QtNative.setEnvironmentVariable("ANDROID_UNPACK", app_root_dir); + QtNative.setEnvironmentVariable("PYTHONHOME", app_root_dir); + QtNative.setEnvironmentVariable("PYTHONPATH", app_root_dir + ":" + app_root_dir + "/lib"); + QtNative.setEnvironmentVariable("PYTHONOPTIMIZE", "2"); + + Log.v(TAG, "About to do super onCreate"); + super.onCreate(savedInstanceState); + Log.v(TAG, "Did super onCreate"); + + this.mActivity = this; + try { + Log.v(TAG, "Access to our meta-data..."); + mActivity.mMetaData = mActivity.getPackageManager().getApplicationInfo( + mActivity.getPackageName(), PackageManager.GET_META_DATA).metaData; + + PowerManager pm = (PowerManager) mActivity.getSystemService(Context.POWER_SERVICE); + if ( mActivity.mMetaData.getInt("wakelock") == 1 ) { + mActivity.mWakeLock = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK, "Screen On"); + mActivity.mWakeLock.acquire(); + } + } catch (PackageManager.NameNotFoundException e) { + } + } + + @Override + public void onDestroy() { + Log.i("Destroy", "end of app"); + super.onDestroy(); + + // make sure all child threads (python_thread) are stopped + android.os.Process.killProcess(android.os.Process.myPid()); + } + + long lastBackClick = SystemClock.elapsedRealtime(); + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) { + // If it wasn't the Back key or there's no web page history, bubble up to the default + // system behavior (probably exit the activity) + if (SystemClock.elapsedRealtime() - lastBackClick > 2000){ + lastBackClick = SystemClock.elapsedRealtime(); + Toast.makeText(this, "Click again to close the app", + Toast.LENGTH_LONG).show(); + return true; + } + + lastBackClick = SystemClock.elapsedRealtime(); + return super.onKeyDown(keyCode, event); + } + + + //---------------------------------------------------------------------------- + // Listener interface for onNewIntent + // + + public interface NewIntentListener { + void onNewIntent(Intent intent); + } + + private List newIntentListeners = null; + + public void registerNewIntentListener(NewIntentListener listener) { + if ( this.newIntentListeners == null ) + this.newIntentListeners = Collections.synchronizedList(new ArrayList()); + this.newIntentListeners.add(listener); + } + + public void unregisterNewIntentListener(NewIntentListener listener) { + if ( this.newIntentListeners == null ) + return; + this.newIntentListeners.remove(listener); + } + + @Override + protected void onNewIntent(Intent intent) { + if ( this.newIntentListeners == null ) + return; + this.onResume(); + synchronized ( this.newIntentListeners ) { + Iterator iterator = this.newIntentListeners.iterator(); + while ( iterator.hasNext() ) { + (iterator.next()).onNewIntent(intent); + } + } + } + + //---------------------------------------------------------------------------- + // Listener interface for onActivityResult + // + + public interface ActivityResultListener { + void onActivityResult(int requestCode, int resultCode, Intent data); + } + + private List activityResultListeners = null; + + public void registerActivityResultListener(ActivityResultListener listener) { + if ( this.activityResultListeners == null ) + this.activityResultListeners = Collections.synchronizedList(new ArrayList()); + this.activityResultListeners.add(listener); + } + + public void unregisterActivityResultListener(ActivityResultListener listener) { + if ( this.activityResultListeners == null ) + return; + this.activityResultListeners.remove(listener); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent intent) { + if ( this.activityResultListeners == null ) + return; + this.onResume(); + synchronized ( this.activityResultListeners ) { + Iterator iterator = this.activityResultListeners.iterator(); + while ( iterator.hasNext() ) + (iterator.next()).onActivityResult(requestCode, resultCode, intent); + } + } + + public static void start_service( + String serviceTitle, + String serviceDescription, + String pythonServiceArgument + ) { + _do_start_service( + serviceTitle, serviceDescription, pythonServiceArgument, true + ); + } + + public static void start_service_not_as_foreground( + String serviceTitle, + String serviceDescription, + String pythonServiceArgument + ) { + _do_start_service( + serviceTitle, serviceDescription, pythonServiceArgument, false + ); + } + + public static void _do_start_service( + String serviceTitle, + String serviceDescription, + String pythonServiceArgument, + boolean showForegroundNotification + ) { + Intent serviceIntent = new Intent(PythonActivity.mActivity, PythonService.class); + String argument = PythonActivity.mActivity.getFilesDir().getAbsolutePath(); + String app_root_dir = PythonActivity.mActivity.getAppRoot(); + String entry_point = PythonActivity.mActivity.getEntryPoint(app_root_dir + "/service"); + serviceIntent.putExtra("androidPrivate", argument); + serviceIntent.putExtra("androidArgument", app_root_dir); + serviceIntent.putExtra("serviceEntrypoint", "service/" + entry_point); + serviceIntent.putExtra("pythonName", "python"); + serviceIntent.putExtra("pythonHome", app_root_dir); + serviceIntent.putExtra("pythonPath", app_root_dir + ":" + app_root_dir + "/lib"); + serviceIntent.putExtra("serviceStartAsForeground", + (showForegroundNotification ? "true" : "false") + ); + serviceIntent.putExtra("serviceTitle", serviceTitle); + serviceIntent.putExtra("serviceDescription", serviceDescription); + serviceIntent.putExtra("pythonServiceArgument", pythonServiceArgument); + PythonActivity.mActivity.startService(serviceIntent); + } + + public static void stop_service() { + Intent serviceIntent = new Intent(PythonActivity.mActivity, PythonService.class); + PythonActivity.mActivity.stopService(serviceIntent); + } + +} diff --git a/pythonforandroid/bootstraps/qt/build/src/main/jniLibs/.gitkeep b/pythonforandroid/bootstraps/qt/build/src/main/jniLibs/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/pythonforandroid/bootstraps/qt/build/src/main/libs/.gitkeep b/pythonforandroid/bootstraps/qt/build/src/main/libs/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/pythonforandroid/bootstraps/qt/build/src/main/res/drawable/.gitkeep b/pythonforandroid/bootstraps/qt/build/src/main/res/drawable/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/pythonforandroid/bootstraps/qt/build/src/main/res/mipmap/.gitkeep b/pythonforandroid/bootstraps/qt/build/src/main/res/mipmap/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/pythonforandroid/bootstraps/qt/build/templates/AndroidManifest.tmpl.xml b/pythonforandroid/bootstraps/qt/build/templates/AndroidManifest.tmpl.xml new file mode 100644 index 0000000000..057794e4ed --- /dev/null +++ b/pythonforandroid/bootstraps/qt/build/templates/AndroidManifest.tmpl.xml @@ -0,0 +1,106 @@ + + + + = 9 %} + android:xlargeScreens="true" + {% endif %} + /> + + + + + + {% for perm in args.permissions %} + + {% endfor %} + + {% if args.wakelock %} + + {% endif %} + + {% if args.billing_pubkey %} + + {% endif %} + + {{ args.extra_manifest_xml }} + + + + {% for l in args.android_used_libs %} + + {% endfor %} + + {% for m in args.meta_data %} + {% endfor %} + + + + + + + + + + {%- if args.intent_filters -%} + {{- args.intent_filters -}} + {%- endif -%} + + + + + + + + + {% if service or args.launcher %} + + {% endif %} + {% for name in service_names %} + + {% endfor %} + {% for name in native_services %} + + {% endfor %} + + {% for a in args.add_activity %} + + {% endfor %} + + + diff --git a/pythonforandroid/bootstraps/qt/build/templates/libs.tmpl.xml b/pythonforandroid/bootstraps/qt/build/templates/libs.tmpl.xml new file mode 100644 index 0000000000..d423f4152b --- /dev/null +++ b/pythonforandroid/bootstraps/qt/build/templates/libs.tmpl.xml @@ -0,0 +1,27 @@ + + + + {{ arch }};c++_shared + {%- for qt_lib in qt_libs %} + {{ arch }};Qt6{{ qt_lib }}_{{ arch }} + {%- endfor -%} + + + + {%- for load_local_lib in load_local_libs %} + {{ arch }};lib{{ load_local_lib }}_{{ arch }}.so + {%- endfor -%} + {{ arch }};libshiboken6.abi3.so + {{ arch }};libpyside6.abi3.so + {%- for qt_lib in qt_libs %} + {{ arch }};Qt{{ qt_lib }}.abi3.so + {% if qt_lib == "Qml" -%} + {{ arch }};libpyside6qml.abi3.so + {% endif %} + {%- endfor -%} + + + {{ init_classes }} + 1 + 1 + diff --git a/pythonforandroid/bootstraps/qt/build/templates/strings.tmpl.xml b/pythonforandroid/bootstraps/qt/build/templates/strings.tmpl.xml new file mode 100644 index 0000000000..41c20ac663 --- /dev/null +++ b/pythonforandroid/bootstraps/qt/build/templates/strings.tmpl.xml @@ -0,0 +1,6 @@ + + + {{ args.name }} + {{ private_version }} + {{ args.presplash_color }} + diff --git a/pythonforandroid/recipe.py b/pythonforandroid/recipe.py index dc53fd4337..bbd61e603d 100644 --- a/pythonforandroid/recipe.py +++ b/pythonforandroid/recipe.py @@ -449,7 +449,7 @@ def unpack(self, arch): extraction_filename = join( self.ctx.packages_path, self.name, filename) if isfile(extraction_filename): - if extraction_filename.endswith('.zip'): + if extraction_filename.endswith(('.zip', '.whl')): try: sh.unzip(extraction_filename) except (sh.ErrorReturnCode_1, sh.ErrorReturnCode_2): @@ -1171,6 +1171,9 @@ def reduce_object_file_names(self, dirn): parts = file_basename.split('.') if len(parts) <= 2: continue + # PySide6 libraries end with .abi3.so + if parts[1] == "abi3": + continue move(filen, join(file_dirname, parts[0] + '.so')) diff --git a/pythonforandroid/recipes/android/__init__.py b/pythonforandroid/recipes/android/__init__.py index e568ac8d9e..608d9ee738 100644 --- a/pythonforandroid/recipes/android/__init__.py +++ b/pythonforandroid/recipes/android/__init__.py @@ -35,7 +35,7 @@ def prebuild_arch(self, arch): ctx_bootstrap = ctx_bootstrap.decode('utf-8') bootstrap = bootstrap_name = ctx_bootstrap is_sdl2 = (bootstrap_name == "sdl2") - if bootstrap_name in ["sdl2", "webview", "service_only", "service_library"]: + if bootstrap_name in ["sdl2", "webview", "service_only", "service_library", "qt"]: java_ns = u'org.kivy.android' jni_ns = u'org/kivy/android' else: diff --git a/pythonforandroid/recipes/genericndkbuild/__init__.py b/pythonforandroid/recipes/genericndkbuild/__init__.py index 901f208986..8b2a9c26a2 100644 --- a/pythonforandroid/recipes/genericndkbuild/__init__.py +++ b/pythonforandroid/recipes/genericndkbuild/__init__.py @@ -21,6 +21,8 @@ def get_recipe_env(self, arch=None, with_flags_in_cc=True, with_python=True): with_python=with_python, ) env['APP_ALLOW_MISSING_DEPS'] = 'true' + # required for Qt bootstrap + env['PREFERRED_ABI'] = arch.arch return env def build_arch(self, arch): diff --git a/testapps/on_device_unit_tests/test_app/main.py b/testapps/on_device_unit_tests/test_app/main.py index 48bf0dc33d..31422e8939 100644 --- a/testapps/on_device_unit_tests/test_app/main.py +++ b/testapps/on_device_unit_tests/test_app/main.py @@ -13,6 +13,7 @@ - A kivy unittest app (sdl2 bootstrap) - A unittest app (webview bootstrap) - A non-gui unittests app + - A non-gui Qt app (qt bootstrap) If you install/build this app via the `setup.py` file, a file named `app_requirements.txt` will be generated which will contain the requirements diff --git a/testapps/on_device_unit_tests/test_app/tests/test_requirements.py b/testapps/on_device_unit_tests/test_app/tests/test_requirements.py index e4104f8300..451f9fbf0c 100644 --- a/testapps/on_device_unit_tests/test_app/tests/test_requirements.py +++ b/testapps/on_device_unit_tests/test_app/tests/test_requirements.py @@ -251,3 +251,25 @@ def test_run_module(self): import libtorrent as lt print('Imported libtorrent version {}'.format(lt.version)) + + +class Pyside6TestCase(PythonTestMixIn, TestCase): + module_import = 'PySide6' + + def test_run_module(self): + import PySide6 + from PySide6.QtCore import QDateTime + from PySide6 import QtWidgets + + print(f"Imported PySide6 version {PySide6.__version__}") + print(f"Current date and time obtained from PySide6 : {QDateTime.currentDateTime().toString()}") + + +class Shiboken6TestCase(PythonTestMixIn, TestCase): + module_import = 'shiboken6' + + def test_run_module(self): + import shiboken6 + from shiboken6 import Shiboken + + print('Imported shiboken6 version {}'.format(shiboken6.__version__)) diff --git a/testapps/on_device_unit_tests/test_qt/jar/PySide6/jar/Qt6Android.jar b/testapps/on_device_unit_tests/test_qt/jar/PySide6/jar/Qt6Android.jar new file mode 100644 index 0000000000000000000000000000000000000000..c09f18fa6bed03ca8d2e778f3d834eaf68812a7c GIT binary patch literal 134543 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 literal 0 HcmV?d00001 diff --git a/testapps/on_device_unit_tests/test_qt/recipes/PySide6/__init__.py b/testapps/on_device_unit_tests/test_qt/recipes/PySide6/__init__.py new file mode 100644 index 0000000000..6c795746ee --- /dev/null +++ b/testapps/on_device_unit_tests/test_qt/recipes/PySide6/__init__.py @@ -0,0 +1,63 @@ +# Copyright (C) 2023 The Qt Company Ltd. +# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only + +import shutil +import zipfile +from os.path import join +from pathlib import Path + +from pythonforandroid.logger import info +from pythonforandroid.recipe import PythonRecipe + + +class PySideRecipe(PythonRecipe): + version = '6.6.0a1' + # This will download the aarch64 wheel from the Qt servers. + # This wheel is only for testing purposes. This test will be update when PySide releases + # official PySide6 Android wheels. + url = ("https://download.qt.io/snapshots/ci/pyside/test/Android/aarch64/" + "PySide6-6.6.0a1-6.6.0-cp37-abi3-android_aarch64.whl") + wheel_name = 'PySide6-6.6.0a1-6.6.0-cp37-abi3-android_aarch64.whl' + depends = ["shiboken6"] + call_hostpython_via_targetpython = False + install_in_hostpython = False + + def build_arch(self, arch): + """Unzip the wheel and copy into site-packages of target""" + + self.wheel_path = join(self.ctx.packages_path, self.name, self.wheel_name) + info("Copying libc++_shared.so from SDK to be loaded on startup") + libcpp_path = f"{self.ctx.ndk.sysroot_lib_dir}/{arch.command_prefix}/libc++_shared.so" + shutil.copyfile(libcpp_path, Path(self.ctx.get_libs_dir(arch.arch)) / "libc++_shared.so") + + info(f"Installing {self.name} into site-packages") + with zipfile.ZipFile(self.wheel_path, "r") as zip_ref: + info("Unzip wheels and copy into {}".format(self.ctx.get_python_install_dir(arch.arch))) + zip_ref.extractall(self.ctx.get_python_install_dir(arch.arch)) + + lib_dir = Path(f"{self.ctx.get_python_install_dir(arch.arch)}/PySide6/Qt/lib") + + info("Copying Qt libraries to be loaded on startup") + shutil.copytree(lib_dir, self.ctx.get_libs_dir(arch.arch), dirs_exist_ok=True) + shutil.copyfile(lib_dir.parent.parent / "libpyside6.abi3.so", + Path(self.ctx.get_libs_dir(arch.arch)) / "libpyside6.abi3.so") + + shutil.copyfile(lib_dir.parent.parent / "QtCore.abi3.so", + Path(self.ctx.get_libs_dir(arch.arch)) / "QtCore.abi3.so") + + shutil.copyfile(lib_dir.parent.parent / "QtWidgets.abi3.so", + Path(self.ctx.get_libs_dir(arch.arch)) / "QtWidgets.abi3.so") + + shutil.copyfile(lib_dir.parent.parent / "QtGui.abi3.so", + Path(self.ctx.get_libs_dir(arch.arch)) / "QtGui.abi3.so") + + plugin_path = (lib_dir.parent / "plugins" / "platforms" / + f"libplugins_platforms_qtforandroid_{arch.arch}.so") + + if plugin_path.exists(): + shutil.copyfile(plugin_path, + (Path(self.ctx.get_libs_dir(arch.arch)) / + f"libplugins_platforms_qtforandroid_{arch.arch}.so")) + + +recipe = PySideRecipe() diff --git a/testapps/on_device_unit_tests/test_qt/recipes/shiboken6/__init__.py b/testapps/on_device_unit_tests/test_qt/recipes/shiboken6/__init__.py new file mode 100644 index 0000000000..71feb18d27 --- /dev/null +++ b/testapps/on_device_unit_tests/test_qt/recipes/shiboken6/__init__.py @@ -0,0 +1,39 @@ +# Copyright (C) 2023 The Qt Company Ltd. +# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only + +import shutil +import zipfile +from os.path import join +from pathlib import Path + +from pythonforandroid.logger import info +from pythonforandroid.recipe import PythonRecipe + + +class ShibokenRecipe(PythonRecipe): + version = '6.6.0a1' + # This will download the aarch64 wheel from the Qt servers. + # This wheel is only for testing purposes. This test will be update when PySide releases + # official shiboken6 Android wheels. + url = ("https://download.qt.io/snapshots/ci/pyside/test/Android/aarch64/" + "shiboken6-6.6.0a1-6.6.0-cp37-abi3-android_aarch64.whl") + wheel_name = 'shiboken6-6.6.0a1-6.6.0-cp37-abi3-android_aarch64.whl' + + call_hostpython_via_targetpython = False + install_in_hostpython = False + + def build_arch(self, arch): + ''' Unzip the wheel and copy into site-packages of target''' + + self.wheel_path = join(self.ctx.packages_path, self.name, self.wheel_name) + info('Installing {} into site-packages'.format(self.name)) + with zipfile.ZipFile(self.wheel_path, 'r') as zip_ref: + info('Unzip wheels and copy into {}'.format(self.ctx.get_python_install_dir(arch.arch))) + zip_ref.extractall(self.ctx.get_python_install_dir(arch.arch)) + + lib_dir = Path(f"{self.ctx.get_python_install_dir(arch.arch)}/shiboken6") + shutil.copyfile(lib_dir / "libshiboken6.abi3.so", + Path(self.ctx.get_libs_dir(arch.arch)) / "libshiboken6.abi3.so") + + +recipe = ShibokenRecipe() diff --git a/tests/test_bootstrap.py b/tests/test_bootstrap.py index 1e17a9bd18..742ea0ba73 100644 --- a/tests/test_bootstrap.py +++ b/tests/test_bootstrap.py @@ -144,9 +144,9 @@ def test_all_bootstraps(self): """A test which will initialize a bootstrap and will check if the method :meth:`~pythonforandroid.bootstrap.Bootstrap.all_bootstraps ` returns the expected values, which should be: `empty", `service_only`, - `webview` and `sdl2` + `webview`, `sdl2` and `qt` """ - expected_bootstraps = {"empty", "service_only", "service_library", "webview", "sdl2"} + expected_bootstraps = {"empty", "service_only", "service_library", "webview", "sdl2", "qt"} set_of_bootstraps = Bootstrap.all_bootstraps() self.assertEqual( expected_bootstraps, expected_bootstraps & set_of_bootstraps @@ -344,6 +344,7 @@ def bootstrap_name(self): name of the bootstrap to test""" raise NotImplementedError("Not implemented in GenericBootstrapTest") + @mock.patch("pythonforandroid.bootstraps.qt.open", create=True) @mock.patch("pythonforandroid.bootstraps.service_only.open", create=True) @mock.patch("pythonforandroid.bootstraps.webview.open", create=True) @mock.patch("pythonforandroid.bootstraps.sdl2.open", create=True) @@ -370,6 +371,7 @@ def test_assemble_distribution( mock_open_sdl2_files, mock_open_webview_files, mock_open_service_only_files, + mock_open_qt_files ): """ A test for any overwritten method of @@ -410,6 +412,7 @@ def test_assemble_distribution( "sdl2": mock_open_sdl2_files, "webview": mock_open_webview_files, "service_only": mock_open_service_only_files, + "qt": mock_open_qt_files } expected_open_calls = { "sdl2": [ @@ -418,6 +421,7 @@ def test_assemble_distribution( ], "webview": [mock.call("local.properties", "w")], "service_only": [mock.call("local.properties", "w")], + "qt": [mock.call("local.properties", "w")] } mock_open_bs = mock_open_bootstraps[self.bootstrap_name] # test that the expected calls has been called @@ -659,3 +663,15 @@ def test_assemble_distribution(self, *args): with self.assertRaises(SystemExit) as e: bs.assemble_distribution() self.assertEqual(e.exception.args[0], 1) + + +class TestBootstrapQt(GenericBootstrapTest, unittest.TestCase): + """ + An inherited class of `GenericBootstrapTest` and `unittest.TestCase` which + will be used to perform tests for + :class:`~pythonforandroid.bootstraps.qt.BootstrapQt`. + """ + + @property + def bootstrap_name(self): + return "qt"