From 239ed883c280c97c29e1e92d58e802ca6b2c24c9 Mon Sep 17 00:00:00 2001 From: mappu Date: Tue, 24 Sep 2024 18:55:27 +1200 Subject: [PATCH] miqt: android support --- .gitignore | 4 +- README.md | 43 ++++++++- cmd/android-mktemplate/android-mktemplate.sh | 47 ++++++++++ cmd/android-stub-gen/android-stub-gen.sh | 84 ++++++++++++++++++ doc/android-architecture.png | Bin 0 -> 45876 bytes ...id-armv8a-go1.23-qt5.15-dynamic.Dockerfile | 17 ++++ examples/android/main.go | 29 ++++++ examples/android/screenshot.png | Bin 0 -> 33524 bytes examples/android/startup_android.go | 14 +++ examples/android/startup_other.go | 7 ++ qt/cflags_android.go | 9 ++ qt/cflags_linux.go | 2 + 12 files changed, 251 insertions(+), 5 deletions(-) create mode 100755 cmd/android-mktemplate/android-mktemplate.sh create mode 100755 cmd/android-stub-gen/android-stub-gen.sh create mode 100644 doc/android-architecture.png create mode 100644 docker/android-armv8a-go1.23-qt5.15-dynamic.Dockerfile create mode 100644 examples/android/main.go create mode 100755 examples/android/screenshot.png create mode 100644 examples/android/startup_android.go create mode 100644 examples/android/startup_other.go create mode 100644 qt/cflags_android.go diff --git a/.gitignore b/.gitignore index 9150b6b..2bd04bf 100644 --- a/.gitignore +++ b/.gitignore @@ -15,4 +15,6 @@ examples/helloworld/helloworld.exe examples/mdoutliner/mdoutliner examples/mdoutliner/mdoutliner.exe examples/windowsmanifest/windowsmanifest -examples/windowsmanifest/windowsmanifest.exe \ No newline at end of file +examples/windowsmanifest/windowsmanifest.exe + +android-build \ No newline at end of file diff --git a/README.md b/README.md index 0d00b52..20ef537 100644 --- a/README.md +++ b/README.md @@ -19,8 +19,9 @@ These bindings were newly started in August 2024. The bindings are functional fo |Platform|Linkage|Status |---|---|--- -|Linux|Static, Dynamic (.so)|✅ Works
- Tested with Debian 12 / Qt 5.15 / GCC 12 -|Windows|Static, Dynamic (.dll)|✅ Works
- Tested with MXE Qt 5.15 / MXE GCC 5 under cross-compilation
- Tested with Fsu0413 Qt 5.15 / Clang 18.1 native compilation +|Linux x86_64|Static, Dynamic (.so)|✅ Works
- Tested with Debian 12 / Qt 5.15 / GCC 12 +|Windows x86_64|Static, Dynamic (.dll)|✅ Works
- Tested with MXE Qt 5.15 / MXE GCC 5 under cross-compilation
- Tested with Fsu0413 Qt 5.15 / Clang 18.1 native compilation +|Android ARM64|Dynamic bundled in package|✅ Works
- Tested with Raymii Qt 5.15 / Android SDK 31 / Android NDK 22 |macOS x86_64|Static, Dynamic (.dylib)|Should work, [not tested](https://github.com/mappu/miqt/issues/2) |macOS ARM64|Static, Dynamic (.dylib)|[Blocked by #11](https://github.com/mappu/miqt/issues/11) @@ -44,7 +45,11 @@ Yes. You must also meet your Qt license obligations: either use Qt dynamically-l ### Q3. Why does it take so long to compile? -The first time the Qt bindings are compiled takes a long time. After this, it's fast. In a Dockerfile, you could cache the build step by running `go install github.com/mappu/miqt`. +The first time the Qt bindings are compiled takes a long time. After this, it's fast. + +If you are compiling your app within a Dockerfile, you could cache the build step by running `go install github.com/mappu/miqt`. + +If you are compiling your app with a `docker run` command, the compile speed can be improved if you also bind-mount the Docker container's `GOCACHE` directory: `-v $(pwd)/container-build-cache:/root/.cache/go-build` See also [issue #8](https://github.com/mappu/miqt/issues/8). @@ -91,7 +96,7 @@ For dynamically-linked builds (closed-source or open source application): - `docker run --rm -v $(pwd):/src -w /src miqt/win64-dynamic:latest go build -buildvcs=false -ldflags '-s -w -H windowsgui'` 3. Copy necessary Qt LGPL libraries and plugin files. -For repeated builds, the compile speed can be improved if you also bind-mount the Docker container's `GOCACHE` directory: `-v $(pwd)/container-build-cache:/root/.cache/go-build` +See Q3 for advice about docker performance. To add an icon and other properties to the .exe, you can use [the go-winres tool](https://github.com/tc-hib/go-winres). See the `examples/windowsmanifest` for details. @@ -114,3 +119,33 @@ $env:CGO_CXXFLAGS = '-Wno-ignored-attributes -D_Bool=bool' # Clang 18 recommenda ``` 4. Run `go build -ldflags "-s -w -H windowsgui"` + +### Q9. How can I compile for Android? + +Miqt supports compiling for Android. Some extra steps are required to bridge the Java, C++, Go worlds. + +![](doc/android-architecture.png) + +1. Modify your main function to [support `c-shared` build mode](https://pkg.go.dev/cmd/go#hdr-Build_modes). + - Package `main` must have an empty `main` function. + - Rename your `main` function to `AndroidMain` and add a comment `//export AndroidMain`. + - Ensure to `import "C"`. + - Check `examples/android` to see how to support both Android and desktop platforms. +2. Build the necessary docker container for cross-compilation: + - `docker build -t miqt/android:latest -f android-armv8a-go1.23-qt5.15-dynamic.Dockerfile .` +3. Build your application as `.so` format: + - `docker run --rm -v $(pwd):/src -w /src miqt/android:latest go build -buildmode c-shared -ldflags "-extldflags -Wl,-soname,my_go_app.so" -o android-build/libs/arm64-v8a/my_go_app.so` +4. Build the Qt linking stub: + - `docker run --rm -v $(pwd):/src -w /src miqt/android:latest android-stub-gen.sh my_go_app.so AndroidMain android-build/libs/arm64-v8a/libRealAppName_arm64-v8a.so` + - The linking stub is needed because Qt for Android will itself only call a function named `main`, but `c-shared` can't create one. +5. Build the [androiddeployqt](https://doc.qt.io/qt-6/android-deploy-qt-tool.html) configuration file: + - `docker run --rm -v $(pwd):/src -w /src miqt/android:latest android-mktemplate.sh RealAppName deployment-settings.json` +6. Build the android package: + - `docker run --rm -v $(pwd):/src -w /src miqt/android:latest androiddeployqt --input ./deployment-settings.json --output ./android-build/` + - By default, the resulting `.apk` is generated at `android-build/build/outputs/apk/debug/android-build-debug.apk`. + - You can build in release mode by adding `--release` + +See Q3 for advice about docker performance. + +For repeated builds, if you customize the `AndroidManifest.xml` file or images, they will be used for the next `androiddeployqt` run. + diff --git a/cmd/android-mktemplate/android-mktemplate.sh b/cmd/android-mktemplate/android-mktemplate.sh new file mode 100755 index 0000000..d42e258 --- /dev/null +++ b/cmd/android-mktemplate/android-mktemplate.sh @@ -0,0 +1,47 @@ +#!/bin/bash +# +# android-mktemplate generates a template json file suitable for use with the +# androiddeployqt tool. + +set -eu + +# QT_PATH is already pre-set in our docker container environment. Includes trailing slash. +QT_PATH=${QT_PATH:-/usr/local/Qt-5.15.13/} + +main() { + + if [[ $# -ne 2 ]] ; then + echo "Usage: android-mktemplate.sh appname output.json" >&2 + exit 1 + fi + local ARG_APPNAME="$1" + local ARG_DESTFILE="$2" + + # Available fields are documented in the template file at + # @ref /usr/local/Qt-5.15.13/mkspecs/features/android/android_deployment_settings.prf + cat > "${ARG_DESTFILE}" <&2 + exit 1 + fi + local ARG_SOURCE_SOFILE="$1" + local ARG_FUNCTIONNAME="$2" + local ARG_DEST_SOFILE="$3" + + local tmpdir=$(mktemp -d) + trap "rm -r ${tmpdir}" EXIT + + echo "- Using temporary directory: ${tmpdir}" + echo "- Found Qt path: ${QT_PATH}" + + echo "Generating stub..." + + cat > $tmpdir/miqtstub.cpp < +#include +#include + +typedef void goMainFunc_t(); + +int main(int argc, char** argv) { + __android_log_print(ANDROID_LOG_VERBOSE, "miqt_stub", "Starting up"); + + void* handle = dlopen("$(basename "$ARG_SOURCE_SOFILE")", RTLD_LAZY); + if (handle == NULL) { + __android_log_print(ANDROID_LOG_VERBOSE, "miqt_stub", "miqt_stub: null handle opening so: %s", dlerror()); + exit(1); + } + + void* goMain = dlsym(handle, "${ARG_FUNCTIONNAME}"); + if (goMain == NULL) { + __android_log_print(ANDROID_LOG_VERBOSE, "miqt_stub", "miqt_stub: null handle looking for function: %s", dlerror()); + exit(1); + } + + __android_log_print(ANDROID_LOG_VERBOSE, "miqt_stub", "miqt_stub: Found target, calling"); + + // Cast to function pointer and call + goMainFunc_t* f = (goMainFunc_t*)goMain; + f(); + + __android_log_print(ANDROID_LOG_VERBOSE, "miqt_stub", "miqt_stub: Target function returned"); + return 0; +} + +EOF + + # Compile + # Link with Qt libraries so that androiddeployqt detects us as being the + # main shared library + $CXX -shared \ + -ldl \ + -llog \ + ${QT_PATH}plugins/platforms/libplugins_platforms_qtforandroid_arm64-v8a.so \ + ${QT_PATH}lib/libQt5Widgets_arm64-v8a.so /usr/local/Qt-5.15.13/lib/libQt5Gui_arm64-v8a.so \ + ${QT_PATH}lib/libQt5Core_arm64-v8a.so \ + ${QT_PATH}lib/libQt5Svg_arm64-v8a.so \ + ${QT_PATH}lib/libQt5AndroidExtras_arm64-v8a.so \ + -fPIC -DQT_WIDGETS_LIB -I${QT_PATH}include/QtWidgets -I${QT_PATH}include/ -I${QT_PATH}include/QtCore -DQT_GUI_LIB -I${QT_PATH}include/QtGui -DQT_CORE_LIB \ + $tmpdir/miqtstub.cpp \ + "-Wl,-soname,$(basename "$ARG_DEST_SOFILE")" \ + -o "$ARG_DEST_SOFILE" + + + echo "Done." +} + +main "$@" diff --git a/doc/android-architecture.png b/doc/android-architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..ac45c7599c7b570fb5b7d3436ce5a7ee4a88ee69 GIT binary patch literal 45876 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 bl%LCL81?T8rfU2eTMCC&4m~}1+VlSaBb$4s literal 0 HcmV?d00001 diff --git a/docker/android-armv8a-go1.23-qt5.15-dynamic.Dockerfile b/docker/android-armv8a-go1.23-qt5.15-dynamic.Dockerfile new file mode 100644 index 0000000..5f8f328 --- /dev/null +++ b/docker/android-armv8a-go1.23-qt5.15-dynamic.Dockerfile @@ -0,0 +1,17 @@ +FROM raymii/qt:5.15-android-source + +RUN wget 'https://go.dev/dl/go1.23.1.linux-amd64.tar.gz' && \ + tar x -C /usr/local/ -f go1.23.1.linux-amd64.tar.gz && \ + rm go1.23.1.linux-amd64.tar.gz + +COPY ../cmd/android-stub-gen/android-stub-gen.sh /usr/local/bin/android-stub-gen.sh +COPY ../cmd/android-stub-gen/android-mktemplate.sh /usr/local/bin/android-mktemplate.sh + +ENV PATH=/usr/local/go/bin:/opt/cmake/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/Qt-5.15.13/bin:/opt/android-sdk/cmdline-tools/tools/bin:/opt/android-sdk/tools:/opt/android-sdk/tools/bin:/opt/android-sdk/platform-tools + +ENV CC=/opt/android-sdk/ndk/22.1.7171670/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android30-clang +ENV CXX=/opt/android-sdk/ndk/22.1.7171670/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android30-clang++ +ENV CGO_ENABLED=1 +ENV GOOS=android +ENV GOARCH=arm64 +ENV GOFLAGS=-buildvcs=false \ No newline at end of file diff --git a/examples/android/main.go b/examples/android/main.go new file mode 100644 index 0000000..fed6cfd --- /dev/null +++ b/examples/android/main.go @@ -0,0 +1,29 @@ +package main + +import ( + "fmt" + "os" + + "github.com/mappu/miqt/qt" +) + +func myRealMainFunc() { + + qt.NewQApplication(os.Args) + + btn := qt.NewQPushButton2("Hello world!") + btn.SetFixedWidth(320) + + var counter int = 0 + + btn.OnPressed(func() { + counter++ + btn.SetText(fmt.Sprintf("You have clicked the button %d time(s)", counter)) + }) + + btn.Show() + + qt.QApplication_Exec() + + fmt.Println("OK!") +} diff --git a/examples/android/screenshot.png b/examples/android/screenshot.png new file mode 100755 index 0000000000000000000000000000000000000000..9ea1170c9210daae20922a4853449c9c119a6f18 GIT binary patch literal 33524 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