Hi,
I am trying to build and run QGroundControl v5.0.7 on a Skydroid H12 Pro controller which is running Android 8.1 (API 27).
My build setup is:
-
Qt: 6.8.3 (Android ARM64)
-
NDK: 26.1.10909125
-
SDK: Android 26 / 27 installed
-
QGC branch: v5.0.7
-
Build tool: qt-cmake + Ninja
The project configures and builds successfully, and the APK installs on the device.
However, when I launch the app, it crashes immediately.
Here is the crash log from logcat:
929 E AndroidRuntime: FATAL EXCEPTION: qtMainLoopThread
12-07 23:38:57.164 12873 12929 E AndroidRuntime: Process: org.mavlink.qgroundcontrol, PID: 12873
12-07 23:38:57.164 12873 12929 E AndroidRuntime: java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol "getentropy" referenced by "/data/app/org.mavlink.qgroundcontrol-GavBdpQ_Gd8y-9r3Ict44w==/lib/arm64/libQt6Core_arm64-v8a.so"...
12-07 23:38:57.164 12873 12929 E AndroidRuntime: at java.lang.Runtime.load0(Runtime.java:928)
12-07 23:38:57.164 12873 12929 E AndroidRuntime: at java.lang.System.load(System.java:1621)
12-07 23:38:57.164 12873 12929 E AndroidRuntime: at org.qtproject.qt.android.QtLoader.loadLibraryHelper(QtLoader.java:497)
12-07 23:38:57.164 12873 12929 E AndroidRuntime: at org.qtproject.qt.android.QtLoader.lambda$loadLibraries$1$org-qtproject-qt-android-QtLoader(QtLoader.java:570)
12-07 23:38:57.164 12873 12929 E AndroidRuntime: at org.qtproject.qt.android.QtLoader$$ExternalSyntheticLambda0.run(D8$$SyntheticClass:0)
12-07 23:38:57.164 12873 12929 E AndroidRuntime: at org.qtproject.qt.android.QtThread.lambda$run$0(QtThread.java:57)
12-07 23:38:57.164 12873 12929 E AndroidRuntime: at org.qtproject.qt.android.QtThread$$ExternalSyntheticLambda0.run(D8$$SyntheticClass:0)
12-07 23:38:57.164 12873 12929 E AndroidRuntime: at org.qtproject.qt.android.QtThread$1.run(QtThread.java:25)
12-07 23:38:57.164 12873 12929 E AndroidRuntime: at java.lang.Thread.run(Thread.java:764)
12-07 23:38:57.171 1344 2590 W ActivityManager: Force finishing activity org.mavlink.qgroundcontrol/.QGCActivity
It seems Qt6Core is calling getentropy(), which only exists on Android API 28+, but my device is API 27 (Android 8.1). Because of this, the app fails during QtCore initialization before any QGC code runs.
My questions:
-
Does QGroundControl 5.x officially support Android 8.1?
-
Since v5.0 requires Qt 6.8+, and Qt 6.8+ seems to require Android 9+ due to
getentropy(), is QGC 5.x incompatible with the Skydroid H12 Pro? -
Is there any workaround to build QGC 5.0.x for Android 8.1?
-
Or should I use QGroundControl 4.4.x with Qt 6.5.3 instead (which runs on API 27)?
Any guidance from the maintainers would be appreciated.
Thanks!