Skip to content

Releases

OpenMapper Release v1.4.0

Choose a tag to compare

@github-actions github-actions released this 31 Oct 15:59

🎮 OpenMapper v1.4.0

Welcome to OpenMapper v1.4.0!

📱 Install & get started

  1. Download the APK OpenMapper-v1.4.0.apk below.
  2. Install it on your Android device.
  3. 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

Full Changelog: v1.3.0...v1.4.0

OpenMapper Release v1.3.0

Choose a tag to compare

@github-actions github-actions released this 16 Oct 09:51

🎮 OpenMapper v1.3.0

Welcome to OpenMapper v1.3.0!

📱 Install & get started

  1. Download the APK OpenMapper-v1.3.0.apk below.
  2. Install it on your Android device.
  3. 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 Aim role) — 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 (he and the legacy iw), 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
    .json files 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 offers HOLD.

  • 🎲 Random tap jitter (opt-in) — a RAPID_FIRE button 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
    Normal role, 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

Full Changelog: v1.2.5...v1.3.0

OpenMapper Release v1.2.6-beta

Pre-release

Choose a tag to compare

@github-actions github-actions released this 12 Oct 21:06

🎮 OpenMapper v1.2.6-beta

Welcome to OpenMapper v1.2.6-beta!

📱 Install & get started

  1. Download the APK OpenMapper-v1.2.6-beta.apk below.
  2. Install it on your Android device.
  3. 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

Choose a tag to compare

@github-actions github-actions released this 12 Oct 17:43

🎮 OpenMapper v1.2.5

Welcome to OpenMapper v1.2.5!

📱 Install & get started

  1. Download the APK OpenMapper-v1.2.5.apk below.
  2. Install it on your Android device.
  3. 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),
    • A taps (hold to drag), B exits,
    • 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 (hold R1, press X, 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, Mode and Assign were 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 A is 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

Full Changelog: v1.2.3...v1.2.5

OpenMapper Release v1.2.4-beta

Pre-release

Choose a tag to compare

@github-actions github-actions released this 07 Oct 18:01

🎮 OpenMapper v1.2.4-beta

Bienvenue sur la version v1.2.4-beta d'OpenMapper !

📱 Installation & Démarrage

  1. Téléchargez l'APK OpenMapper-v1.2.4-beta.apk ci-dessous.
  2. Installez l'APK sur votre appareil Android.
  3. 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

Choose a tag to compare

@github-actions github-actions released this 07 Oct 15:53

🎮 OpenMapper v1.2.3

Bienvenue sur la version v1.2.3 d'OpenMapper !

📱 Installation & Démarrage

  1. Téléchargez l'APK OpenMapper-v1.2.3.apk ci-dessous.
  2. Installez l'APK sur votre appareil Android.
  3. 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

Choose a tag to compare

@github-actions github-actions released this 03 Sep 10:34

🎮 OpenMapper v1.2.2

Bienvenue sur la version v1.2.2 d'OpenMapper !

📱 Installation & Démarrage

  1. Téléchargez l'APK OpenMapper-v1.2.2.apk ci-dessous.
  2. Installez l'APK sur votre appareil Android.
  3. 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 min et max retournées par getevent -p pour 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.
  • 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 AUTO au 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 constante ZERO_INTEGER dans IInputManagerHelper, éliminant les allocations d'objets Object[] et le boxing d'entiers à chaque frame.
  • Mode TAP sans Garbage Collection : Remplacement de la file ConcurrentLinkedQueue et de son itérateur par un tableau fixe de 16 slots PendingTapSlot réutilisables dans ButtonProcessor, 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 = 0 sur Android 11-15+) dans IInputManagerHelper.
  • Sécurisation des cancels préventifs : Suppression de handleInjectionError sur les ACTION_CANCEL spéculatifs au démarrage dans ShizukuTouchInjector (ne déconnecte plus l'injecteur au lancement).
  • Stabilité des coroutines Linux : LinuxInputReader maintient la coroutine parente active avec joinAll() sur les flux cat /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-keypad et kpd pour ne plus capturer les boutons physiques de volume et de veille du téléphone.
  • Routage Bluetooth précis : Routage dédié GENERIC_BLUETOOTH pour 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 playFireHaptic est désormais déportée de manière asynchrone sur hapticScope.launch, empêchant les appels IPC synchrones vers le service système IVibratorService de faire caler le thread d'émulation à 240 Hz.

🔒 Concurrence Overlay & Mises à Jour APK

  • Anti-Race Condition de Profil : liveProfileUpdateFlow utilise désormais un MutableSharedFlow(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.signatures si info.signingInfo est 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

Choose a tag to compare

@github-actions github-actions released this 02 Sep 10:47

🎮 OpenMapper v1.2.1

Bienvenue sur la version v1.2.1 d'OpenMapper !

📱 Installation & Démarrage

  1. Téléchargez l'APK OpenMapper-v1.2.1.apk ci-dessous.
  2. Installez l'APK sur votre appareil Android.
  3. 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

Choose a tag to compare

@github-actions github-actions released this 01 Sep 21:11

🎮 OpenMapper v1.2.0

Bienvenue sur la version v1.2.0 d'OpenMapper !

📱 Installation & Démarrage

  1. Téléchargez l'APK OpenMapper-v1.2.0.apk ci-dessous.
  2. Installez l'APK sur votre appareil Android.
  3. 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

Choose a tag to compare

@github-actions github-actions released this 31 Aug 15:24

Full Changelog: v1.1.2...v1.1.3