Android application for Voyah vehicles (Free, Dreamer models) that provides system customization through Frida script injection.
- Weather widget customization - Enable non-Chinese cities in weather widget
- Russian keyboard support - Add Russian keyboard layout to vehicle input system
- Forced EV mode - Force electric-only mode on Voyah Free (prevents automatic hybrid switching)
- Multi-display application support - Enable apps on passenger display
- Phone number formatting - Format phone numbers according to regional standards
- Settings menu integration - Add Voboost menu item to vehicle settings
The application uses a platform-agnostic core that runs on both Android and Desktop:
Main- Main orchestrator that coordinates feature management based on configurationFeatureManager- Manages feature lifecycle (enable/disable/reload)FridaManager- Platform-specific Frida script injection (Android/Desktop implementations)VehicleManager- Platform-specific vehicle information accessPaths- Platform-specific path resolution for config, scripts, and logs
Features are modular components that extend Voboost functionality:
Feature- Base interface for all featuresFeatureFrida- Abstract base for Frida-based featuresFeatureNative- Abstract base for native Android features
FeatureFridaWeather- Weather widget customizationFeatureFridaKeyboard- Russian keyboard supportFeatureFridaForcedEV- Forced EV mode (Free only)FeatureFridaSettingsMenu- Settings menu integration
Build the APK for installation on vehicle:
./gradlew assembleDebugNote: Do not use ./gradlew installDebug - build only. Installation and launch are handled manually on the vehicle.
Build and run desktop version for local testing:
./gradlew runDesktopFor local development without Android emulator or physical device:
-
Install Frida tools:
pip3 install frida-tools
-
Install Java (JDK 11+):
brew install openjdk@11
-
Build Frida scripts:
cd ../voboost-script npm install npm run build
Compile and run a stub application that simulates an Android process:
cd ../voboost-stubs/apps
javac com/qinggan/app/launcher/LauncherStub.java
java com.qinggan.app.launcher.LauncherStubKeep this terminal running.
Set environment variables to simulate vehicle configuration:
export VOBOOST_VEHICLE_MODEL=free
export VOBOOST_VEHICLE_YEAR=2023
export VOBOOST_LANGUAGE=ruOr create ~/.voboost/vehicle.yaml:
model: free
year: 2023
language: ruIn another terminal, run the desktop version:
cd ../voboost
./gradlew runDesktopExpected output:
[+] MainDesktop: Starting Voboost Desktop
[+] MainDesktop: Vehicle: free (2023)
[+] MainDesktop: Config file: /path/to/config.yaml
[+] Main: Starting Voboost
[+] FeatureManager: Enabled: interface-widget-weather
[+] MainDesktop: Running. Press Ctrl+C to exit.
| Stub | Process Name | Features |
|---|---|---|
| LauncherStub | com.qinggan.app.launcher | Weather widget, App launcher, Navbar |
| BluetoothPhoneStub | com.qinggan.bluetoothphone | Phone number formatting |
| SystemServiceStub | com.qinggan.systemservice | Multi-display, Settings menu, Forced EV |
| QgimeStub | com.qinggan.app.qgime | Russian keyboard |
| VehicleSettingStub | com.qinggan.app.vehiclesetting | Media source |
Configuration is managed by the voboost-config library. The configuration file is located at:
- Android:
/data/data/ru.voboost/files/config.yaml - Desktop:
~/.voboost/config.yamlor../voboost-config/src/config.yaml
settings-language:en|ru- Interface languagesettings-theme:light|dark- Interface themesettings-interface-shift-x: Integer - Horizontal interface offset (pixels)settings-interface-shift-y: Integer - Vertical interface offset (pixels)settings-active-tab:store|settings| etc. - Default active tab
vehicle-model:free|dreamer- Vehicle modelvehicle-fuel-mode:original|electric|electric-forced|hybrid|saveoriginal- No modificationelectric- Electric mode preferenceelectric-forced- Force electric-only mode (Free only, prevents automatic hybrid switching)hybrid- Hybrid mode preferencesave- Energy saving mode
vehicle-drive-mode:comfort|sport|eco- Driving mode preference
-
interface-widget-weather:original|enable-non-chineese-citiesoriginal- Default weather widget behaviorenable-non-chineese-cities- Enable weather for non-Chinese cities
-
interface-keyboard:original|disable-chinese|enable-russianoriginal- Default keyboard layoutsdisable-chinese- Hide Chinese keyboardenable-russian- Add Russian keyboard layout
# Application Settings
settings-language: ru
settings-theme: light
settings-interface-shift-x: 0
settings-interface-shift-y: 0
settings-active-tab: store
# Vehicle Configuration
vehicle-fuel-mode: electric-forced
vehicle-drive-mode: comfort
vehicle-model: free
# Interface Features
interface-widget-weather: enable-non-chineese-cities
interface-keyboard: enable-russianThe application uses a centralized logging system (Logger) that writes logs to files.
| Level | Tag | When to Use |
|---|---|---|
| info | [+] |
Important events (startup, user actions, significant operations) |
| debug | [*] |
Technical details (method calls, intermediate values, validation) |
| error | [-] |
Errors and exceptions |
- Android location:
/data/data/ru.voboost/files/logs/ - Desktop location:
~/.voboost/logs/ - Filename pattern:
voboost-YYYY-MM-DD.log - Rotation: Daily
- Retention: 7 days
YYYY-MM-DD HH:mm:ss.SSS [tag] [source] message
Example:
2024-12-14 14:30:45.123 [+] Main: Starting Voboost
2024-12-14 14:30:45.456 [*] FeatureManager: Checking feature: interface-widget-weather
2024-12-14 14:30:46.012 [-] FridaManager: Failed to inject script
src/main/java/ru/voboost/
├── Main.kt # Main orchestrator
├── MainActivity.kt # Android entry point
├── MainDesktop.kt # Desktop entry point
├── BootReceiver.kt # Auto-start on boot
├── Logger.kt # Centralized logging
├── Paths.kt # Path resolution interface
├── FridaManager.kt # Frida injection interface
├── FridaManagerAndroid.kt # Android Frida implementation
├── FridaManagerDesktop.kt # Desktop Frida implementation
├── FridaAgentManager.kt # Frida agent lifecycle management
├── VehicleManager.kt # Vehicle info interface
├── FeatureManager.kt # Feature lifecycle management
└── feature/
├── Feature.kt # Feature interface
├── FeatureFrida.kt # Frida feature base
├── FeatureNative.kt # Native feature base
├── FeatureFridaWeather.kt # Weather widget feature
├── FeatureFridaKeyboard.kt # Russian keyboard feature
├── FeatureFridaForcedEV.kt # Forced EV mode feature
└── FeatureFridaSettingsMenu.kt # Settings menu feature
- Compose Performance Guidelines - Critical performance rules for Jetpack Compose
- Color System - Theme-aware color usage patterns
- Android API 28+ (Android 9+) - Primary target is Android 9 (API 28)
- voboost-config library - Configuration management (project dependency)
- voboost-script - Frida scripts for feature implementation
- Kotlin/Compose - Development environment
- Frida - Dynamic instrumentation toolkit
- voboost-config - Configuration management library
- voboost-script - Frida scripts for feature implementation
- voboost-stubs - Stub applications for desktop testing
- voboost-codestyle - Code style and linting rules
GPL-3.0