How ref4ik/winlator-ref4ik- works
Purpose and Entry Points
Winlator ref4ik is an Android application for running x86_64 Windows software through Wine plus CPU translation/runtime components. Android launches the app from app/src/main/AndroidManifest.xml; primary UI startup is app/src/main/java/com/winlator/cmod/MainActivity.kt, with application initialization in app/src/main/java/com/winlator/cmod/PluviaApp.kt. The Gradle Android module is app/build.gradle.
UI and User Workflows
The app combines legacy Activity/Fragment screens with newer Compose navigation. It exposes container, shortcut, content, settings, Steam, and X-server workflows. The Compose root and navigation boundary are app/src/main/java/com/winlator/cmod/ui/WinlatorApp.kt and app/src/main/java/com/winlator/cmod/ui/navigation/Navigation.kt; legacy launch/display paths include app/src/main/java/com/winlator/cmod/XServerDisplayActivity.java.
Container and Guest Environment Lifecycle
Containers are the primary isolation and launch unit: they hold Windows/Wine environment configuration, shortcuts, filesystem state, runtime presets, and graphics choices. app/src/main/java/com/winlator/cmod/container/Container.java and app/src/main/java/com/winlator/cmod/container/ContainerManager.java model and manage these units. app/src/main/java/com/winlator/cmod/xenvironment/XEnvironment.java assembles a running guest environment from independently startable components such as X server, PulseAudio, SysV shared memory, guest launchers, and renderers.
Runtime Provisioning and Compatibility Stack
First-run and user-driven installation unpack packaged archives and install selectable components. app/src/main/java/com/winlator/cmod/components/ComponentInstaller.java and app/src/main/java/com/winlator/cmod/contents/ContentsManager.java govern this boundary. Bundled assets include Box64, FEXCore, Proton/Wine container patterns, DXVK/VKD3D/D8VK, graphics wrappers, audio, and Windows components under app/src/main/assets/. Per-runtime presets are managed in app/src/main/java/com/winlator/cmod/box86_64/Box86_64PresetManager.java and app/src/main/java/com/winlator/cmod/fexcore/FEXCorePresetManager.java.
Guest Process Launch and OS Adaptation
Guest execution is mediated by environment components and native helpers rather than Android directly executing Windows binaries. PRoot supplies filesystem/path and syscall-tracing machinery at app/src/main/cpp/proot/src/; ELF patching is provided by app/src/main/cpp/patchelf/src/patchelf.cc. The Java process/environment boundary includes app/src/main/java/com/winlator/cmod/core/EnvironmentManager.java and app/src/main/java/com/winlator/cmod/core/ProcessHelper.java. This layer is the key boundary between Android/Bionic processes and the Linux-like Wine guest runtime.
Display, Graphics, and Input Pipeline
A Java X server accepts guest X11 clients and owns windows, drawables, input, and extensions; its core is app/src/main/java/com/winlator/cmod/xserver/XServer.java, with client transport in app/src/main/java/com/winlator/cmod/xconnector/XConnectorEpoll.java. Native rendering bridges X-server surfaces to Android/Vulkan via app/src/main/cpp/winlator/VulkanRendererContext.cpp and app/src/main/java/com/winlator/cmod/renderer/VulkanRenderer.java. Optional graphics paths include VirGL (app/src/main/cpp/virglrenderer/server/virgl_server.c), Adreno driver tooling (app/src/main/cpp/adrenotools/src/driver.cpp), and an LSFG Vulkan frame-generation layer (app/src/main/cpp/lsfg-vk-android/src/layer.cpp). Touch/controller mappings flow through app/src/main/java/com/winlator/cmod/inputcontrols/InputControlsManager.java.
Native Services, Storage, and External Integrations
Native code is built through app/src/main/cpp/CMakeLists.txt; System V shared memory and ALSA are Android-hosted compatibility services, represented by app/src/main/java/com/winlator/cmod/sysvshm/SysVSharedMemory.java and app/src/main/java/com/winlator/cmod/alsaserver/ALSARequestHandler.java. MMKV provides native-backed preference storage (app/src/main/cpp/mmkv/native-bridge.cpp, app/src/main/java/com/winlator/cmod/core/MmkvPreferences.kt), while a Room-style application database is rooted at app/src/main/java/com/winlator/cmod/db/PluviaDatabase.kt. Networked component retrieval supports GitHub repositories through app/src/main/java/com/winlator/cmod/components/GitHubComponentManager.java; Steam integration is centered on app/src/main/java/com/winlator/cmod/steam/SteamClientManager.kt, with SteamGridDB artwork API support in app/src/main/java/com/winlator/cmod/steamgrid/SteamGridDBApi.java.
Main entry points: XEnvironment.java Guest environment · ContainerManager.java Containers · XServer.java Java X server · MainActivity.kt Main activity
Components 22
Android app
- Android entry
app/src/main/AndroidManifest.xml - Main activity
app/src/main/java/com/winlator/cmod/MainActivity.kt - Application init
app/src/main/java/com/winlator/cmod/PluviaApp.kt - Compose navigation
app/src/main/java/com/winlator/cmod/ui/navigation/Navigation.kt - X display activity
app/src/main/java/com/winlator/cmod/XServerDisplayActivity.java
Guest runtime
- Containers · Own Wine settings, filesystem state, shortcuts, and graphics choices.
app/src/main/java/com/winlator/cmod/container/ContainerManager.java - Guest environment · Starts the selected guest services and launch components.
app/src/main/java/com/winlator/cmod/xenvironment/XEnvironment.java - Component provisioning
app/src/main/java/com/winlator/cmod/components/ComponentInstaller.java - Bundled runtimes · Wine/Proton, CPU translators, graphics, audio, and Windows components.
- CPU runtime presets
app/src/main/java/com/winlator/cmod/box86_64/Box86_64PresetManager.java
Display pipeline
- Java X server · Owns guest windows, drawables, input, and extensions.
app/src/main/java/com/winlator/cmod/xserver/XServer.java - X client transport
app/src/main/java/com/winlator/cmod/xconnector/XConnectorEpoll.java - Vulkan renderer · Presents X-server surfaces through Android/Vulkan.
app/src/main/cpp/winlator/VulkanRendererContext.cpp - Optional graphics layers · VirGL, Adreno driver tooling, and LSFG frame generation.
app/src/main/cpp/virglrenderer/server/virgl_server.c - Input mappings
app/src/main/java/com/winlator/cmod/inputcontrols/InputControlsManager.java
Native compatibility
- Process environment · Creates and manages Android-hosted guest processes.
app/src/main/java/com/winlator/cmod/core/EnvironmentManager.java - PRoot
- ELF patcher
app/src/main/cpp/patchelf/src/patchelf.cc - Guest compatibility services
app/src/main/java/com/winlator/cmod/sysvshm/SysVSharedMemory.java
Storage & integrations
- MMKV preferences
app/src/main/java/com/winlator/cmod/core/MmkvPreferences.kt - Application database
app/src/main/java/com/winlator/cmod/db/PluviaDatabase.kt - Component & Steam services · Retrieves GitHub components and integrates Steam and SteamGridDB.
app/src/main/java/com/winlator/cmod/components/GitHubComponentManager.java
Connections 22
- Android entry → Application init: creates
- Android entry → Main activity: launches
- Main activity → Compose navigation: hosts
- Main activity → X display activity: opens guest display
- Application init → MMKV preferences: initializes
- Application init → Application database: initializes
- Compose navigation → Containers: configures and launches
- Containers → Guest environment: assembles runtime for
- Component provisioning → Bundled runtimes: unpacks
- Component & Steam services → Component provisioning: retrieves components for
- CPU runtime presets → Containers: supplies selected presets
- Guest environment → Process environment: launches through
- Process environment → PRoot: uses guest filesystem boundary
- Process environment → ELF patcher: adapts executables with
- Guest environment → Guest compatibility services: starts
- Guest environment → X client transport: connects guest X clients
- X client transport → Java X server: delivers X11 requests
- X display activity → Java X server: hosts display
- Java X server → Vulkan renderer: submits surfaces
- Optional graphics layers → Vulkan renderer: optional render path
- Input mappings → Java X server: injects mapped input
- Containers → MMKV preferences: persists settings