This repository was archived by the owner on Sep 13, 2026. It is now read-only.
Android Release v 2.3.3
This minor release fixes even more crashes observed in Crashlytics.
Anyway — good luck to Android open-source devs who don’t use Crashlytics. They will live in ignorance, thinking their applications are fully functional, but this is just an illusion and lie.
Changelog:
- The FTEQW Quake virtual machine used to think it’s smarter than everyone else. If a Quake mod was even slightly broken, it threw exceptions and killed the engine process. No other Quake engine behaves this way — Darkplaces and others only throw warnings. Now all these checks and exceptions in the Quake VM were removed, so broken Quake mods will run in FTEQW.
- ENV usage was removed from all engines, SDL2, SDL3, and gl4es. ENVs aren’t guaranteed to work on Android (it’s not Linux). Always use JNI or JNA instead. Disabling ENVs should fix many crashes across these 10 engines.
- Forced reloading of controller connections after first on-screen stick movement was deleted. This caused race conditions and crashes. On Android, you cannot call a JNA or JNI method that modifies engine variables without proper thread synchronization, because again - Android IS NOT LINUX. Removing this should fix many engine crashes.
- Almost all JNA method calls were returned to the Activity main thread to minimize race condition risks except SDLOnScreen gamepad creation and destroying. This doesn’t fully eliminate race condition risks, and I won’t rewrite the architecture of all 10 engines and SDL to fix this — that’s the responsibility of the engine and SDL developers.
- Fixed crashes occurring when users tried to download AI translation models. These crashes were due to refactoring from mutableStateOf to MutableLiveData.
- When users override engine config paths to Android/data, the application now restarts automatically. I’m not interested in reading crash logs in Crashlytics that don’t need to be fixed.
- When engine config paths are set to Android/data, the app will always use the sandboxed ExternalFilesDir instead of absolute file paths. Android doesn’t allow absolute paths in the sandbox, otherwise you get permission-denied errors and crashes at some Android OEMS devices