Skip to content

Releases: JoeGeC/joycon2android

Joycon2Android 1.3.0

Choose a tag to compare

@JoeGeC JoeGeC released this 23 Sep 17:36
Immutable release. Only release title and notes can be modified.

Wii layouts for every player, Mario Kart grips that trick with a flick, and a Joy-Con pair that plays as one Wii Remote in Dolphin. Run Set up again to apply them.

What's new

  • Every player picks their own layout. Map buttons per player, save a mapping as a layout, or set everyone at once from All players.
  • Wii layouts, including two for Mario Kart. Choose Wii, Joy-Con, Mario Kart Wheel (steer by tilt) or Mario Kart Nunchuck (steer by stick).
  • Mario Kart tricks and wheelies land with a flick. Flick the Joy-Con, or press the shoulder you hop with, as the kart leaves a ramp.
  • A lone Joy-Con can play as a sideways Wii Remote. A per-player switch turns steering and the d-pad for games held sideways; with it off, up on the stick points toward L or R.
  • Recenter can go on any button. It sits on R (L on a lone left Joy-Con), or the stick click in the Joy-Con layout.
  • A Joy-Con pair plays as one Wii Remote in Dolphin. Both Joy-Cons drive one player and one pointer.

Install

Download joycon2android-1.3.0.apk below and install it over your existing copy. See the README for the full setup guide.

Notes

  • SYNC is required for every connection. Switch 2's button-press reconnect is console-exclusive at the link layer and can't be reproduced through Android's BLE API.
  • Not affiliated with, endorsed by, or sponsored by Nintendo. The BLE protocol was reverse-engineered by the community; this project contains no Nintendo code. See the credits.

Joycon2Android 1.2.0

Choose a tag to compare

@JoeGeC JoeGeC released this 18 Sep 18:01
Immutable release. Only release title and notes can be modified.

Auto setup now starts the emulator for you, the app tells you when a new version is out, and Dolphin's Home button works again.

What's new

  • Auto setup offers to start the emulator. After a successful setup the app asks whether to start the emulator and launches it for you.
  • The app tells you when a new version is out. On launch it checks for a newer release and offers to install it, with a short summary of what changed. Skip silences that version.
  • Dolphin's Home button works again. The Capture/Home binding named an input Dolphin doesn't have, so it was dropped silently — Dolphin (Wii) setups need a fresh Set up to pick up the fix.

Install

Download joycon2android-1.2.0.apk below and install it over your existing copy. See the README for the full setup guide.

Notes

  • SYNC is required for every connection. Switch 2's button-press reconnect is console-exclusive at the link layer and can't be reproduced through Android's BLE API.
  • Not affiliated with, endorsed by, or sponsored by Nintendo. The BLE protocol was reverse-engineered by the community; this project contains no Nintendo code. See the credits.

Joycon2Android 1.1.1

Choose a tag to compare

@JoeGeC JoeGeC released this 16 Sep 20:39
Immutable release. Only release title and notes can be modified.

Smoother, correctly oriented motion in Eden, plus more flexible stick mapping and a tidier setup panel.

What's new

  • A sideways Joy-Con's motion now faces the right way. A single Joy-Con held sideways used to tilt in Eden as if pointed at the screen; steering in Mario Kart 8 and other motion games now follows how you're actually holding it.
  • No more motion stutter from the device's own gyro in Eden. Eden mixed your handheld's gyro into Player 1 on top of the Joy-Con's, so aiming jittered and followed the handheld. With Shizuku, the app now keeps Eden from reading the device's motion while DSU runs (on by default, under the new Motion settings on the DSU card).
  • Faster motion updates. An optional toggle in Motion settings roughly doubles how often a Joy-Con reports, for smoother aiming at the cost of some battery.
  • Map each stick direction on its own. Every direction of a target stick can come from any button or any stick tilt, on every controller, including a single Joy-Con's Nunchuk stick.
  • Back works on the mapping screen. System back returns to the main screen instead of closing the app, and the mapping screen now slides in and out.
  • A roomier setup panel. The emulator picker and Set up button sit on their own rows, so long emulator names fit on narrow screens like the AYN Thor's bottom display.

Install

Download joycon2android-1.1.1.apk below and install it over your existing copy. See the README for the full setup guide.

Notes

  • SYNC is required for every connection. Switch 2's button-press reconnect is console-exclusive at the link layer and can't be reproduced through Android's BLE API.
  • Not affiliated with, endorsed by, or sponsored by Nintendo. The BLE protocol was reverse-engineered by the community; this project contains no Nintendo code. See the credits.

Joycon2Android 1.1.0

Choose a tag to compare

@JoeGeC JoeGeC released this 15 Sep 21:05
Immutable release. Only release title and notes can be modified.

Eden support: motion, buttons and sticks all set up in one tap, plus a warning when there aren't enough DSU slots to go round.

What's new

  • Eden gets one-tap setup. Pick Eden in the DSU card and press Set up — buttons, both sticks and motion are all mapped for you, so no manual binding in Eden's own controller screen.
  • A warning when the four DSU slots run out. Players past the fourth, or a pair with no room for its second hand, are now called out on the card instead of silently going unmapped.
  • Auto setup stops hiding. The emulator picker and Set up button are always visible in the DSU panel, and tell you Shizuku is missing when you press them, rather than vanishing without explanation.
  • "0 connected" made sense of. The DSU card counts emulators, not Joy-Cons, so it now says it's waiting for one instead of reporting zero while your controllers are in hand.

Upgrading

Re-run Set up on the DSU card for your emulator — this release writes bindings the old config doesn't have. If the emulator is open the app will offer to close it; let it, or the write is discarded.

ARMS players: Eden's controller applet overrides the Joy-Con pair with a Pro Controller, which hides the thumbs-up grip. Setting the controller applet to LLE for ARMS works around it.

Install

Download joycon2android-1.1.0.apk below and install it over your existing copy. See the README for the full setup guide.

Notes

  • SYNC is required for every connection — Switch 2's button-press reconnect is console-exclusive at the link layer and can't be reproduced through Android's BLE API.
  • Not affiliated with, endorsed by, or sponsored by Nintendo. The BLE protocol was reverse-engineered by the community; this project contains no Nintendo code. See the credits.

Joycon2Android 1.0.3

Choose a tag to compare

@JoeGeC JoeGeC released this 12 Sep 08:41
Immutable release. Only release title and notes can be modified.

Wii motion fixes: both hands report motion, and roll and thrusts go the right way.

What's new

  • Both hands report motion. A pair only ever sent the right Joy-Con's movement, so the Nunchuk side never moved — two-handed games like Wii Sports boxing ignored your left hand entirely.
  • Roll and tilt went the wrong way. Left and right were mirrored in every game that reads them.
  • Forward thrusts register. Pushing the controller at the screen did nothing, so the cue stroke in Wii Play Billiards never fired.
  • No more phantom thrusts. Pointing the controller upwards read as a thrust held forever, because gravity sits on the same axis the game reads.
  • Test builds between releases. Debug builds are now published here as prereleases.

Upgrading

Re-run Set up Dolphin and Wiimote mapping with Dolphin closed — this release adds motion bindings its config doesn't have yet.

Install

Download joycon2android-1.0.3.apk below and install it over your existing copy (same signing key, so it updates in place). See the README for the full setup guide.

Notes

  • SYNC is required for every connection — Switch 2's button-press reconnect is console-exclusive at the link layer and can't be reproduced through Android's BLE API.
  • Not affiliated with, endorsed by, or sponsored by Nintendo. The BLE protocol was reverse-engineered by the community; this project contains no Nintendo code. See the credits.

1.0.3 debug (b5a3c9b)

1.0.3 debug (b5a3c9b) Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 11 Sep 22:09
Immutable release. Only release title and notes can be modified.

Debug build of main at b5a3c9b.

Wiimote and nunchuck motion simulation fixes.

Tested on Wii Sports, Wii Play and Wii Sports Resort.

Joycon2Android 1.0.2

Choose a tag to compare

@JoeGeC JoeGeC released this 08 Sep 19:51
Immutable release. Only release title and notes can be modified.
2fa652d

Full-range analog sticks, and emulator auto-setup that binds to the right device.

What's new

  • Analog sticks now use their whole range. The raw 12-bit sticks only travel about ±1250 LSB and rest off-centre, and both vary per unit and per axis. Assuming the nominal midpoint left full deflection at 56–66% of HID range with a permanent 4–5% drift at rest, so the analog stick moved characters slower than the d-pad. Each axis' centre is now learned from the first still window after connect and each direction scaled by its own span — the live display, HID output and DSU all see the corrected values.
  • Emulator auto-setup binds to the pad it means to. Eden's port, Eden's guid and Dolphin's Android/<id>/… are each read from the live input-device list using that emulator's own rule, instead of ranking our virtual pads among themselves. On any handheld with a built-in controller the low numbers are already taken, so configs previously bound to the wrong device or to none. Reading the guid also covers handhelds whose firmware re-publishes an external pad under the built-in controller's identity — AYN's Odin/Thor line does this, and a binding whose guid doesn't match is silently ignored.
  • A single Joy-Con held sideways is properly playable. Its four-button cluster now rotates onto real face buttons instead of the HID hat. A lone Joy-Con has no d-pad, so the old wiring left the virtual pad with no A/B/X/Y at all, and anything binding a hat axis without its sign — Eden's press-to-detect does exactly that — could not tell Left from Right or Up from Down. SL/SR default to L/R, as they do on a real Switch.
  • Every button lands on the Android keycode of the same name. A is BUTTON_A, ZL is BUTTON_L2, − is BUTTON_SELECT, and so on, so nothing has to deal in a shifted keycode. The trigger axes are corrected to match: Brake is the left trigger and Accelerator the right, which is also what re-publishing firmware assumes when it derives its own L2/R2.
  • GR and the C (chat) button register at all. GR sat on a HID button whose keycode no Android key layout names, so it reached no app; C had no bit in the report. Both now arrive, and C is selectable as a right Joy-Con source in the mapping screen.
  • Dolphin's GameCube sticks are no longer crossed for a Joy-Con pair — the main stick was driven by the right Joy-Con and the C-stick by the left.
  • The stick display dot stays inside its ring on full diagonals.

Upgrading

Because every keycode except A, B and Home moved, manual controller bindings made in an emulator need setting up once more. Re-run Set up controller mapping for your emulator (with the emulator closed — it rewrites its own config on exit) and re-bind anything you had mapped by hand.

Install

Download joycon2android-1.0.2.apk below and install it over your existing copy (same signing key, so it updates in place). See the README for the full setup guide.

Notes

  • SYNC is required for every connection. Switch 2's button-press reconnect is console-exclusive at the link layer and can't be reproduced through Android's BLE API — press the SYNC button to connect each time.
  • Not affiliated with, endorsed by, or sponsored by Nintendo. The BLE protocol was reverse-engineered by the community; this project contains no Nintendo code. See the credits.

Joycon2Android 1.0.1

Choose a tag to compare

@JoeGeC JoeGeC released this 02 Sep 16:34
Immutable release. Only release title and notes can be modified.

Adds Switch 2 Pro Controller support, including its GL/GR back paddles.

What's new

  • Switch 2 Pro Controller is detected in the scan list. Controller type now comes from the product ID in the pairing advertisement (0x2069 = Pro), so the Pro shows up correctly instead of being ignored — the pairing advertisement carries no local name, so this byte is the only type signal available before input starts streaming.
  • GL/GR back paddles work. They decode from packet byte 0x07 and are relayed as HID buttons 15 and 16; the virtual gamepad descriptor now advertises 16 buttons instead of 14. They also appear in the live input display.

Install

Download joycon2android-1.0.1.apk below and install it over your existing copy (same signing key, so it updates in place). See the README for the full setup guide.

Notes

  • SYNC is required for every connection. Switch 2's button-press reconnect is console-exclusive at the link layer and can't be reproduced through Android's BLE API — press the SYNC button to connect each time.
  • Not affiliated with, endorsed by, or sponsored by Nintendo. The BLE protocol was reverse-engineered by the community; this project contains no Nintendo code. See the credits.

Joycon2Android 1.0.0

Choose a tag to compare

@JoeGeC JoeGeC released this 28 Aug 21:18

Use Nintendo Switch 2 Joy-Con 2 controllers as system-wide gamepads on Android over BLE.

Joy-Con 2 controllers use a custom BLE GATT service rather than standard HID-over-GATT, so Android can't pair them through normal Bluetooth settings. This app connects over GATT, sends the vendor init commands, parses the raw notification packets, and exposes each player as a virtual gamepad via UHID — so any Android app or emulator sees a standard controller.

Features

  • Multiple controllers at once — connect several Joy-Con 2s and assign them to up to 4 players (left, right, or paired).
  • Virtual gamepad output — each assigned player becomes its own standard HID gamepad, so emulators can map each to a distinct port. Requires Shizuku for privileged access (no root needed).
  • DSU (cemuhook) motion server — streams gyro/accel + full pad state to emulators (Dolphin, Cemu, …) over UDP, up to 4 players, with automatic gyro-bias calibration.
  • One-tap emulator setup — writes an emulator's controller config to match the current assignment: Eden (stable or Nightly) or Dolphin GameCube bindings, plus Dolphin's DSU + Wii Remote motion mappings.
  • Customizable button mapping — a per-console editor (GameCube / Joy-Cons / Wii Remote & Nunchuk) overrides the default Joy-Con → emulator bindings.
  • Dual and sideways layouts — dual Joy-Con when L+R are assigned to one player; sideways single-Joy-Con with correctly rotated inputs.
  • Live input display — buttons, sticks, IMU (accelerometer + gyroscope), and battery.

Requirements

  • Android 7.0+ (API 24), BLE-capable device
  • Shizuku running — for the virtual gamepad and emulator auto-setup (the DSU motion server works without it)
  • Joy-Con 2 controller(s)

Install

Download joycon2android-1.0.0.apk below and install it (you may need to allow installing from unknown sources). See the README for the full setup guide.

Notes

  • SYNC is required for every connection. Switch 2's button-press reconnect is console-exclusive at the link layer and can't be reproduced through Android's BLE API — press the SYNC button to connect each time.
  • Not affiliated with, endorsed by, or sponsored by Nintendo. The BLE protocol was reverse-engineered by the community; this project contains no Nintendo code. See the credits.