Files
MosisService/docs/ARCHITECTURE.md

4.2 KiB

Architecture Overview

MosisService is an Android application combining Kotlin UI with native C++ libraries for UI rendering via Android's Binder IPC system.

Two Native Libraries

mosis-service (libmosis-service.so):

  • Main Android Binder service implementation
  • Implements IMosisService.aidl interface for touch events and initialization
  • Contains the Kernel rendering engine with RmlUi integration
  • Links against RmlUi for HTML/CSS-like UI rendering

mosis-test (libmosis-test.so):

  • Test/rendering client implementation
  • Implements IMosisListener.aidl for receiving callbacks
  • OpenGL ES 2.0 rendering pipeline using GLAD

IPC Flow

Kotlin NativeService → JNI → mosis-service (IMosisService)
                              ↓
                         IMosisListener callbacks
                              ↓
                         mosis-test (rendering client)

Key Interfaces (AIDL)

IMosisService: initOS(), onTouchDown(), onTouchMove(), onTouchUp()

IMosisListener (oneway/async): onServiceInitialized(), onBufferAvailable(), onFrameAvailable()

Multi-threading Model

  • Service layer runs in main thread for event handling
  • Rendering loop runs in dedicated thread managed by Kernel
  • Async task processing for UI updates
  • Thread-safe communication between components using std::mutex

Rendering Pipeline

  1. Initialization: Service connects to test layer, creates EGL context
  2. Buffer Management: Hardware buffers allocated and shared between layers
  3. Event Processing: Touch events processed and forwarded to Kernel
  4. Rendering Loop: Continuous rendering with frame synchronization
  5. UI Updates: RmlUi engine updates UI based on events and data

Data Flow

User Touch Events → IMosisService.onTouch* → Kernel.process → RmlUi UI Updates
Service Initialized → IMosisListener.onServiceInitialized → Rendering Setup
Buffer Available → IMosisListener.onBufferAvailable → Texture Creation
Frame Available → IMosisListener.onFrameAvailable → Frame Rendering

Native Code Structure (src/main/cpp/)

Core:

  • kernel.cpp - Core rendering engine, RmlUi integration, event processing
  • mosis-service.cpp - Binder service implementation, JNI entry points
  • mosis-test.cpp - Test client implementation
  • egl_context.cpp - OpenGL ES context management
  • render_target.cpp - Framebuffer and buffer management
  • RmlUi_Renderer_GL3.cpp - RmlUi OpenGL renderer backend
  • assets_manager.cpp - Android AssetManager integration

App Management (apps/):

  • app_manager.cpp - App install/uninstall/launch lifecycle
  • app_api.cpp - Lua API bindings for app management
  • update_service.cpp - Background update checking

Lua Sandbox (sandbox/):

  • sandbox_manager.cpp - Multi-app sandbox orchestrator
  • lua_sandbox.cpp - Core Lua sandbox with resource limits
  • permission_gate.cpp - Permission system (normal/dangerous/signature)
  • virtual_fs.cpp - Per-app virtual filesystem with quotas
  • database_manager.cpp - SQLite database per app
  • network_manager.cpp - HTTP request validation
  • websocket_manager.cpp - WebSocket connections
  • timer_manager.cpp - setTimeout/setInterval implementation
  • json_api.cpp - Safe JSON encode/decode
  • crypto_api.cpp - Cryptographic functions (SHA256, HMAC)
  • camera_interface.cpp - Camera access with indicators
  • microphone_interface.cpp - Microphone access with indicators
  • audio_output.cpp - Audio playback
  • location_interface.cpp - GPS with precision reduction
  • sensor_interface.cpp - Accelerometer, gyroscope, etc.
  • bluetooth_interface.cpp - Bluetooth device access
  • contacts_interface.cpp - Contacts read/write
  • message_bus.cpp - Inter-app communication

Code Style

  • C++23 standard with modern features (std::span, std::format)
  • PascalCase for classes/functions, camelCase for variables
  • RAII principles with smart pointers
  • Kotlin code follows Android conventions

Dependencies

  • vcpkg manages native dependencies (RmlUi, GLFW, Freetype, Lua, libpng, nlohmann-json, minizip, sqlite3)
  • CMake build system with vcpkg toolchain integration
  • Android target architecture: arm64-v8a only
  • Desktop target: Windows x64 (MSVC)