You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
[Bug] Wine crashes on Android 9/API 28: missing ASurfaceTransaction_create #151
Device: Amazon Fire HD 10 (KFTRWI, 9th generation), MediaTek MT8183 / Mali-G72 MP3
Android: 9, API 28
GameHub Lite: 5.1.8 (versionCode 65)
ABI: arm64-v8a
Steps to reproduce
Import a local Windows installer.
Open its game details and press Play Now (the configured executable is .../GameHub/Install/AOE3/setup.exe).
Expected
Wine starts and runs the selected installer.
Actual
gamehub.lite:wine crashes while creating WineActivity, before the Windows installer starts:
E AndroidRuntime: FATAL EXCEPTION: main
E AndroidRuntime: Process: gamehub.lite:wine, PID: 11865
E AndroidRuntime: java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol "ASurfaceTransaction_create" referenced by ".../lib/arm64/libwinemu.so"
at java.lang.Runtime.loadLibrary0(Runtime.java:1016)
at java.lang.System.loadLibrary(System.java:1669)
at com.winemu.core.gamepad.GamepadServerManager.<clinit>(Unknown Source:10)
...
at com.xj.winemu.WineActivity.onCreate(...)
Could the native engine either guard/dynamically resolve this API and provide a fallback for API 28, or gracefully disable the optional gamepad server on older Android? If Android 10+ is required, please raise/document the effective minimum API because the installed APK advertises minSdk 26.
I have the full local logs and can provide the relevant files if maintainers need them. I have intentionally omitted unrelated device logcat entries and device identifiers here.
Additional research: Android documents this NDK symbol as API 29+, and notes that native symbols are eagerly resolved when a library loads; direct strong references to unavailable APIs can prevent the whole .so from loading on older Android. It recommends dlopen/dlsym or weak API references for newer APIs: https://developer.android.com/ndk/guides/sdk-versions
This is a reference implementation rather than a drop-in libwinemu.so replacement; the failing library here still needs its strong reference removed/guarded, or its optional GamepadServerManager load skipped on API 28.
The crash logcat timestamp for that launch is 21:26:39.980 and the process dies immediately after the failed native library load. The complete local collection remains available if maintainers request more detail.
Activity
TDAHzeirenses commentedon Nov 3, 2026
Additional research: Android documents this NDK symbol as API 29+, and notes that native symbols are eagerly resolved when a library loads; direct strong references to unavailable APIs can prevent the whole .so from loading on older Android. It recommends
dlopen/dlsymor weak API references for newer APIs: https://developer.android.com/ndk/guides/sdk-versionsA concrete Android 9-safe pattern exists in GameNative's public native renderer: it checks the device API level, loads
libandroid.so, resolves the SurfaceControl/SurfaceTransaction functions withdlsym, and returns “unavailable” below API 29 or when symbols are missing, allowing the rest of the app to continue: https://github.com/utkarshdalal/GameNative/blob/master/app/src/main/cpp/asurfacerenderer/ASurfaceRendererContext.cppThis is a reference implementation rather than a drop-in
libwinemu.soreplacement; the failing library here still needs its strong reference removed/guarded, or its optional GamepadServerManager load skipped on API 28.TDAHzeirenses commentedon Nov 3, 2026
Relevant lines from GameHub's own Wine log (device serials and unrelated system/app logs are excluded):
The crash logcat timestamp for that launch is 21:26:39.980 and the process dies immediately after the failed native library load. The complete local collection remains available if maintainers request more detail.