Repository navigation
Releases
OpenMapper Release v1.4.0
🎮 OpenMapper v1.4.0
Welcome to OpenMapper v1.4.0!
📱 Install & get started
- Download the APK
OpenMapper-v1.4.0.apkbelow. - Install it on your Android device.
- Make sure Shizuku is running on your phone to get key mapping and touch injection at ultra-low latency (< 0.5 ms).
SHA-256: 43e32356994c515371001a3f31cfe22dba2eba92c77060fac895634cd2a75e08
📝 Release notes
chore(release): bump to 1.4.0 (versionCode 16)
📋 Detailed commit changelog
What's Changed
- test(e2e): fix flaky rapid-fire test on the CI emulator by @matannturgeman in #35
- fix(ui): role menu and profile title on small screens by @matannturgeman in #26
- feat(overlay): optional floating bubble for the quick menu by @matannturgeman in #32
- fix(editor): in-app HUD editor ignores gamepad input by @matannturgeman in #31
- feat(camera): aim with the gamepad's own gyroscope by @matannturgeman in #24
- feat(camera): right stick joystick mode for twin-stick games by @matannturgeman in #33
- feat(input): optional 'Hide controller from the game' per profile by @matannturgeman in #34
Full Changelog: v1.3.0...v1.4.0
OpenMapper Release v1.3.0
🎮 OpenMapper v1.3.0
Welcome to OpenMapper v1.3.0!
📱 Install & get started
- Download the APK
OpenMapper-v1.3.0.apkbelow. - Install it on your Android device.
- Make sure Shizuku is running on your phone to get key mapping and touch injection at ultra-low latency (< 0.5 ms).
SHA-256: 16000d8d34218902a5a67d9312a17ed880ca5f431223c8761cc605d16e0be371
📝 Release notes
✨ New features
-
🎯 MOBA aim buttons (new
Aimrole) — for drag-to-aim games such as Brawl Stars:
press puts a finger on the in-game aim joystick, the right stick drags to aim (up to the
configured range), and releasing fires. Works on any button or combo, and a profile can
hold several at once (the most recently pressed one follows the stick). The left stick keeps
walking at the same time, and a profile with an aim button no longer runs the right-stick
camera (which would press the fire zone). A quick tap without moving the stick is an auto-aim
shot. Aim range and right-stick deadzone are tunable in the Move settings tab. (closes #7) -
🌍 Hebrew (עברית) — a fifth language, in the in-app picker, followed automatically from the
phone language (heand the legacyiw), and listed in Android 13+ Settings → Apps → Language
(a language chosen there is now honoured at startup). Full right-to-left mirroring, while
technical fields (JSON, package names, the bug report) stay left-to-right. -
💾 Import profiles from files — the import dialog can now read one or several exported
.jsonfiles at once through the system picker, instead of pasting text. Each file goes through
the same validation; the toast reports how many were imported, and the dialog only closes when
they all succeeded. Files are read as strict UTF-8 with a 1 MB cap. -
🎛️ HUD editor role & mode menus — the Role and Mode controls now open a popup list
to pick a value directly, instead of tapping through a cycle that walked all eight roles. An aim
button's Mode list only offersHOLD. -
🎲 Random tap jitter (opt-in) — a
RAPID_FIREbutton can now spread its taps to a random
point inside its circle instead of always hitting the exact centre, useful for games that flag
repeated taps on the same spot. It is a per-button option, off by default.
🛠️ Fixes
-
📜 Home screen is now scrollable — in landscape or on a small phone the content was taller
than the window and the "Display Over Other Apps" card, the active profile and the Launch button
were unreachable. When there is room, the launch actions stay pinned to the bottom as before. -
🌍 Localisation — removed the French leftovers from the English UI (the gamepad-test rumble
label, the default profile description), localised the HUD editor HOLD / TAP badges and the
Normalrole, and stopped the Android per-app language from being overridden by the in-app picker. -
🎯 Aim robustness — a forced cleanup (reset, controller disconnect, opening the HUD editor,
cursor mode) no longer fires a phantom shot: held aim fingers are cancelled instead of
released. Aim buttons stay on HOLD in the editor (the mode badge no longer claims TAP/RAPID),
touch order is serialised under the lock, and the aim-button set is published before the button
map so a profile switch never runs the camera for a frame. -
💾 Profile import — an import that cannot be written (storage full, unwritable file) is now
reported as a failure instead of selecting a profile that would vanish on restart. -
🎮 Controllers — read DualShock 4 pads on the kernel hid-sony / hid-playstation layout,
and the right stick of HID pads that expose it on ABS_Z / ABS_RZ. The built-in bug report now
also captures controller axes and the raw /dev/input nodes.
🔧 Under the hood
- 🧪 End-to-end test suite with simulated games — the real engine runs against full-screen
simulated FPS / MOBA / tap games on a physical device or an emulator (no Shizuku, no gamepad).
It now also drives the real app screens (navigation, language, profile manager, HUD editor,
file import) through Compose UI tests, and the emulator setup was made reliable. - 248 Android unit tests + 45 backend + 84 instrumented (device/emulator) tests, all green.
🙏 Credits
This release was built together with @matannturgeman — thank you! 🎉
- 🎯 MOBA aim buttons — PR #9 (feature request #7)
- 🧪 End-to-end suite with simulated games — PR #11
- 🌍 Hebrew, per-app language and RTL — PR #13, PR #8, PR #14
- 💾 Import from files — PR #12
- 📜 Scrollable Home screen — PR #10
He also tested the features on a Galaxy S25 Ultra with an Xbox controller.
📋 Detailed commit changelog
What's Changed
- fix(i18n): remove French leftovers from English UI, declare app locales by @matannturgeman in #8
- feat(moba): aim_joystick button role for drag-to-aim games (#7) by @matannturgeman in #9
- fix(home): make the Home screen scrollable by @matannturgeman in #10
- test(e2e): end-to-end suite with simulated games (device or emulator) by @matannturgeman in #11
- feat(profiles): import profiles from .json files, not only pasted text by @matannturgeman in #12
- feat(i18n): add Hebrew by @matannturgeman in #13
- fix(i18n): translate the button mode and role names in the HUD editor by @matannturgeman in #14
- test(e2e): make the suite pass on a fresh emulator by @matannturgeman in #16
- test(e2e): smoke suite of the most basic flows by @matannturgeman in #17
- test(e2e): scenarios for movement, camera, fire modes, safety and every input by @matannturgeman in #18
- test(e2e): drive the real app screens with Compose UI tests by @matannturgeman in #19
- test(e2e): HUD editor and profile import from files by @matannturgeman in #20
- feat(rapid-fire): optional random tap jitter inside the button circle by @matannturgeman in #21
Full Changelog: v1.2.5...v1.3.0
OpenMapper Release v1.2.6-beta
🎮 OpenMapper v1.2.6-beta
Welcome to OpenMapper v1.2.6-beta!
📱 Install & get started
- Download the APK
OpenMapper-v1.2.6-beta.apkbelow. - Install it on your Android device.
- Make sure Shizuku is running on your phone to get key mapping and touch injection at ultra-low latency (< 0.5 ms).
SHA-256: 063b9555fefc00c2e4ad4b40bad9d5cbaba0432d32ece01deebae0902a6f48e9
📝 Release notes
chore(release): bump to 1.2.6-beta (versionCode 14)
📋 Detailed commit changelog
Full Changelog: v1.2.5...v1.2.6-beta
OpenMapper Release v1.2.5
🎮 OpenMapper v1.2.5
Welcome to OpenMapper v1.2.5!
📱 Install & get started
- Download the APK
OpenMapper-v1.2.5.apkbelow. - Install it on your Android device.
- Make sure Shizuku is running on your phone to get key mapping and touch injection at ultra-low latency (< 0.5 ms).
SHA-256: 6c71ee7bdfd40a1bb722bea89ec58d1e5621ce8a342fea646ce14f6af8a58d74
📝 Release notes
✨ New features
-
🖱️ Virtual cursor mode (
L3+R3) — an on-screen pointer to use menus, shops and dialogs without placing a HUD button on every item:- either stick moves it (quadratic curve: precise near the centre, fast at full tilt),
Ataps (hold to drag),Bexits,- speed adjustable in game with the D-pad (0.25x → 5x) and from the profile editor (new slider),
- saved per profile; while the mode is active, button mappings, camera and movement stick are paused so a tap on a menu cannot fire a skill.
-
🧩 Two-button combos (
R1+X) — assignable straight from the HUD editor (holdR1, pressX, release):- the modifier keeps its own action, the combo replaces the trigger's one,
- user-assigned combos take precedence over the profile-switch shortcut (
SELECT+ D-pad), - the editor refuses two combos bound to the same trigger, so there is no silent ambiguity.
-
🐞 Built-in bug report — app version, device and ROM, Shizuku status, connected controllers, active profile and a bounded log, ready to copy. Built from a strict whitelist: no device token and no signing secret can leak.
-
💾 Reworked profile screens — browsing and editing are now separate, and only saving the active profile pushes a live update to the engine.
-
🌍 Multi-language UI — English (default), French, Spanish and Portuguese, with a language picker on the home screen.
🛠️ Fixes
- 📐 HUD editor toolbars on portrait / narrow screens — both the top and the bottom bar now wrap onto as many rows as needed instead of leaving buttons off screen: at the bottom,
Role,ModeandAssignwere invisible and untappable; at the top, the first button was clipped by the screen edge.➕/➖pairs stay side by side. - 🔋 Controller battery — read off the main thread (no more ANRs when a controller connects), result ignored if the controller was removed in the meantime, last known value kept on a transient failure, and requests queued instead of dropped (a controller connected mid-game shows its percentage right away).
- 🧩 Combos — a combo left active across a reset (controller disconnect, Shizuku restart, entering cursor mode) no longer swallows the release of a plain press, so a button cannot remain stuck on screen (ghost touch); malformed combo keys from imported profiles are normalised or ignored.
- 🖱️ Cursor — the tap is no longer lost when
Ais pressed within the first milliseconds of the mode; the speed setting no longer writes the profile to disk on every D-pad step (debounced, on an immutable copy); the mode closes cleanly if the overlay cannot be shown. - ⚡ Samsung One UI 8.5 ANR — controller hotplug callbacks moved to a dedicated thread (already shipped in the 1.2.4-beta prerelease).
- 🤖 CI — actions bumped to Node 24 versions.
🔧 Under the hood
- 193 automated tests (155 Android + 38 backend), all green.
- Documentation updated; the roadmap gained a MOBA-Style Controls axis (issue #7).
🙏 Credits
This release was built together with @matannturgeman — thank you! 🎉
- 🖱️ Virtual cursor mode (
L3+R3) — PR #6 - 🧩 Two-button combos (
R1+X) — PR #5 - 🔋 Controller battery handling and the battery ANR fix (battery read moved off the main thread) — PR #4
He also tested the features on a Galaxy S25 Ultra with an Xbox controller, which is what made the hardening in this release possible.
📋 Detailed commit changelog
What's Changed
- fix(detector): stop reading gamepad battery on the main thread (fixes ANR, #1) by @matannturgeman in #4
- feat: button combos (e.g. R1+X) assignable from the HUD editor by @matannturgeman in #5
- feat: virtual cursor mode (L3+R3) with runtime speed control by @matannturgeman in #6
New Contributors
- @matannturgeman made their first contribution in #4
Full Changelog: v1.2.3...v1.2.5
OpenMapper Release v1.2.4-beta
🎮 OpenMapper v1.2.4-beta
Bienvenue sur la version v1.2.4-beta d'OpenMapper !
📱 Installation & Démarrage
- Téléchargez l'APK
OpenMapper-v1.2.4-beta.apkci-dessous. - Installez l'APK sur votre appareil Android.
- Assurez-vous que Shizuku est actif sur votre téléphone pour profiter du mapping et de l'injection tactile à ultra-faible latence (< 0.5 ms).
SHA-256: 6e01fe22d532b9f8564e23339a6736534c3bc6a2c5b9ba4a2cc3c2d0e49f1bd7
📝 Notes de cette version
fix(engine): offload input device hotplug callbacks to dedicated HandlerThread (v1.2.4-beta)
📋 Changelog détaillé des commits
Full Changelog: v1.2.3...v1.2.4-beta
OpenMapper Release v1.2.3
🎮 OpenMapper v1.2.3
Bienvenue sur la version v1.2.3 d'OpenMapper !
📱 Installation & Démarrage
- Téléchargez l'APK
OpenMapper-v1.2.3.apkci-dessous. - Installez l'APK sur votre appareil Android.
- Assurez-vous que Shizuku est actif sur votre téléphone pour profiter du mapping et de l'injection tactile à ultra-faible latence (< 0.5 ms).
SHA-256: 907407fd579b5ce89d4975d2041b731c360fdd9b5337c89a80d626b944971d70
📝 Notes de cette version
release: v1.2.3 - Fix Samsung One UI 8.5 ANR & Add game package selector
📋 Changelog détaillé des commits
Full Changelog: v1.2.2...v1.2.3
OpenMapper Release v1.2.2
🎮 OpenMapper v1.2.2
Bienvenue sur la version v1.2.2 d'OpenMapper !
📱 Installation & Démarrage
- Téléchargez l'APK
OpenMapper-v1.2.2.apkci-dessous. - Installez l'APK sur votre appareil Android.
- Assurez-vous que Shizuku est actif sur votre téléphone pour profiter du mapping et de l'injection tactile à ultra-faible latence (< 0.5 ms).
SHA-256: cdd2291296d6d05bf63256bb6146d9bc3250a72848c335cb138c35c0b29eeff4
📋 Nouveautés & Changements majeurs (depuis v1.2.1)
🕹️ Détection Matérielle Directe des Plages de Sticks (getevent -p)
- Inspection automatique du pilote noyau : Analyse en temps réel des bornes
minetmaxretournées pargetevent -ppour chaque axe analogique. - Support complet de tous les formats de manettes :
- Non-signé 16-bit (
0..65535, centre à~32768) : manettes Xbox filaires (USB OTG) sous Android et manettes Bluetooth. - Signé 16-bit (
-32768..+32767, centre à0) : manettes Nintendo Switch et pilotes xpad PC. - Non-signé 8-bit (
0..255, centre à128) : manettes PlayStation et manettes Bluetooth compactes.
- Non-signé 16-bit (
- Résolution du blocage au repos : Élimination définitive du problème où les sticks filaires USB étaient bloqués à 100% dans le coin supérieur gauche (-1.0f, -1.0f).
- Auto-apprentissage dynamique de secours : Détection et verrouillage automatique de la plage en mode
AUTOau premier mouvement de stick si les métadonnées matérielles sont absentes.
⚡ Optimisation Zéro-Allocation IPC & Taps (240 Hz)
- Pré-allocation IPC sous réflexion : Mise en cache de tableaux d'arguments réutilisables (
cachedArgs2,cachedArgs3) et constanteZERO_INTEGERdansIInputManagerHelper, éliminant les allocations d'objetsObject[]et le boxing d'entiers à chaque frame. - Mode TAP sans Garbage Collection : Remplacement de la file
ConcurrentLinkedQueueet de son itérateur par un tableau fixe de 16 slotsPendingTapSlotréutilisables dansButtonProcessor, supprimant tout risque de micro-stutter ou pause GC en pleine partie.
🛡️ Résilience & Double Fallback Dynamique
- Interfaçage Android 11 à 15+ : Restauration et sécurisation du double fallback dynamique AIDL / Réflexion (2 paramètres sur Android 8-10, 3 paramètres avec
displayId = 0sur Android 11-15+) dansIInputManagerHelper. - Sécurisation des cancels préventifs : Suppression de
handleInjectionErrorsur lesACTION_CANCELspéculatifs au démarrage dansShizukuTouchInjector(ne déconnecte plus l'injecteur au lancement). - Stabilité des coroutines Linux :
LinuxInputReadermaintient la coroutine parente active avecjoinAll()sur les fluxcat /dev/input/event*, garantissant que la lecture manette ne se ferme pas prématurément en arrière-plan pendant le jeu.
🎮 Filtrage Matériel & Routage Bluetooth Générique
- Élimination des faux positifs matériels : Exclusion stricte de
keypad,gpio-keypadetkpdpour ne plus capturer les boutons physiques de volume et de veille du téléphone. - Routage Bluetooth précis : Routage dédié
GENERIC_BLUETOOTHpour les manettes tierces (Ipega, Mocute, 8BitDo) avec seuil de déclenchement des gâchettes recalibré à 24% (rawValue > 60L) au lieu de 78%.
📳 Vibrations de Tir Asynchrones
- Boucle prioritaire protégée : La fonction
playFireHapticest désormais déportée de manière asynchrone surhapticScope.launch, empêchant les appels IPC synchrones vers le service systèmeIVibratorServicede faire caler le thread d'émulation à 240 Hz.
🔒 Concurrence Overlay & Mises à Jour APK
- Anti-Race Condition de Profil :
liveProfileUpdateFlowutilise désormais unMutableSharedFlow(replay = 0, extraBufferCapacity = 1), évitant tout rejeu intempestif d'un profil obsolète lors du démarrage du service. - Fallback Signatures d'Installation : Ajout d'un repli sur
info.signaturessiinfo.signingInfoest nul lors de la vérification de l'APK sur Android 9 et 10 (bogue AOSP documenté).
📋 Changelog détaillé des commits
Full Changelog: v1.2.1...v1.2.2
OpenMapper Release v1.2.1
🎮 OpenMapper v1.2.1
Bienvenue sur la version v1.2.1 d'OpenMapper !
📱 Installation & Démarrage
- Téléchargez l'APK
OpenMapper-v1.2.1.apkci-dessous. - Installez l'APK sur votre appareil Android.
- Assurez-vous que Shizuku est actif sur votre téléphone pour profiter du mapping et de l'injection tactile à ultra-faible latence (< 0.5 ms).
📝 Notes de cette version
feat(release): bump version to 1.2.1 and improve controller compatibility
- Full Bluetooth and Wired USB controller support (Xbox, PlayStation, Switch, Generic)
- Direct getevent -p hardware discovery bypassing SELinux limitations
- Dynamic stick and trigger mappings with hotplug stability
- Configurable vertical anti-recoil speed scaling and in-game quick toggles
- Anonymous device model and OS version telemetry with Cloudflare D1 migration
📋 Changelog détaillé des commits
Full Changelog: v1.2.0...v1.2.1
OpenMapper Release v1.2.0
🎮 OpenMapper v1.2.0
Bienvenue sur la version v1.2.0 d'OpenMapper !
📱 Installation & Démarrage
- Téléchargez l'APK
OpenMapper-v1.2.0.apkci-dessous. - Installez l'APK sur votre appareil Android.
- Assurez-vous que Shizuku est actif sur votre téléphone pour profiter du mapping et de l'injection tactile à ultra-faible latence (< 0.5 ms).
📋 Nouveautés & Changements majeurs
- 🎯 Correction du mappage d'axes Linux : Calibrage précis des gâchettes LT/RT et du stick droit (élimination du spin de caméra et des sursauts vers le haut).
- ⚡ Seuil d'actionnement adaptatif : Support dynamique multi-manettes (Xbox 360, standard, signed).
- 🔄 Dual-Pointer Interlaced Handoff : Rotation fluide à 360° sans rupture aux bordures d'écran.
- 🎯 RAA Keep-Alive & Jiggle Strafe : Micro-mouvements sub-pixel et strafe automatique au tir.
- 🔑 Identité d'Appareil Opaque : Device Token serveur 256 bits sécurisé dans EncryptedSharedPreferences.
- 🛡️ Intégrité HMAC-SHA256 : Protection anti-rejeu temporelle sur l'API communautaire.
- 📊 63 Tests Unitaires Android + 30 Tests Backend Vitest (100% de couverture validée).
Full Changelog: v1.1.4...v1.2.0
OpenMapper Release v1.1.3
Full Changelog: v1.1.2...v1.1.3