Voicebar
A voice-first keyboard for Android that works alongside Gboard. Tap Voice, talk, and a tidy message lands in the box.
翻譯準備中
Make the Snap Key of OPPO Find X9 phones open any app, link or Android intent. Open source, no root.
翻譯準備中
取自儲存庫 README
正在載入完整 README。
檢視完整 README ↗Make the side key of your OPPO phone (the "Snap Key") open any app or link you want, with a single press, a double press or a long press. No root, no always-on Wi-Fi, no accessibility service.
A small Android app in Java. It reads the system log, spots the line ColorOS writes each time the side key is pressed, and opens the link or app you chose.
My own use: one press opens a Claude Code Remote Control session, so I can pick up a coding conversation from my pocket. It works just as well for a web page, a note app, a camera app or a deep link.
Website with a longer FAQ: https://remapsnapkey.com/
| Device | Status |
|---|---|
| OPPO Find X9 Pro, ColorOS 16 (Android 16) | Tested, works |
| OnePlus 15 and other phones with a "Plus Key" or "Action button" built on the same base | Not tested, probably works if the key shows up in the log |
| Any other Android 11+ phone with a hardware key that writes to the log | Not tested |
The app only needs two things: Android 11 or later, and a key press that appears in the system log. Step 3 below tells you how to check that on your phone.
snapkey-mapper.apk (full, recommended) | snapkey-mapper-lite.apk | |
|---|---|---|
| Grants the log permission by itself, from the phone | Yes (wireless debugging of the phone, once) | No: you run one adb command yourself |
| Android permissions | adds INTERNET, used only for the phone's own wireless debugging |
| no INTERNET permission at all |
| Size | about 12 MB (TLS and cryptography libraries) | about 500 KB (the font of the app) |
| Dependencies | libadb-android (Apache-2.0), Conscrypt, sun-security-android | none |
The full edition also adds ACCESS_WIFI_STATE and CHANGE_WIFI_MULTICAST_STATE (to find the pairing service) and ACCESS_NETWORK_STATE (to check that the phone is on Wi-Fi). Everything else is identical. If you want the strongest guarantee, install the lite edition: it has no INTERNET permission, so Android does not let the app open network connections itself.
The app needs READ_LOGS, which Android only lets an app receive from the shell.
Full edition, from the phone alone:
What the app does in those steps: it finds the pairing service of your own phone on the local network, pairs, runs pm grant io.github.damienllado.snapkeymapper android.permission.READ_LOGS, disconnects and deletes its key. The code is in SetupService.java (about 150 lines).
Other ways (both editions):
With a computer and adb (wireless debugging or USB):
adb shell pm grant io.github.damienllado.snapkeymapper android.permission.READ_LOGS
Without a computer, using Key Mapper:
GRANT_RUNTIME_PERMISSIONS denied. Switching it off again afterwards does not remove the permission.KEYLOG_PhoneWindowManagerExtImpl ... KeyEvent { action=ACTION_UP, keyCode=KEYCODE_ACTION_BUTTON_CLICK, scanCode=735 ... eventTime=..., downTime=... }
intent: link (any Android intent: set a timer, an alarm, open the camera...) or an installed app picked from a list. Test the launch checks it right away.Examples of intent: links:
intent:#Intent;action=android.intent.action.SET_TIMER;i.android.intent.extra.alarm.LENGTH=300;B.android.intent.extra.alarm.SKIP_UI=true;end
intent:#Intent;action=android.intent.action.SET_ALARM;i.android.intent.extra.alarm.HOUR=6;i.android.intent.extra.alarm.MINUTES=30;end
intent:#Intent;action=android.media.action.STILL_IMAGE_CAMERA;end
The repository is also a Claude Code plugin. It finds the link or intent for what you want the key to do, tests it on your phone over adb, and can install the app and grant its permission for you:
/plugin install snapkey-mapper --marketplace Damien-llado/snapkey-mapper
Then ask, for example: "make my Snap Key start a 25-minute focus timer". Without the plugin system, copy plugins/snapkey-mapper/skills/snapkey-mapper to ~/.claude/skills/.
aapt dump permissions snapkey-mapper-lite.apk or with AppVerifier.SetupService.java and the library; there is no URL, no host name and no other socket in the app. After the setup you can also block the network for the app in the ColorOS settings, or just use the lite edition.READ_LOGS lets an app read the whole system log, which can contain details of what other apps do. The app only looks for your pattern and a few time stamps and keeps nothing; the capture screen holds lines in memory until you close it, and saves a file only when you ask.logcat -v uid). Another app cannot make SnapKey Mapper fire your target by writing a fake key line.intent: runs a full Android intent each time the key is pressed. Paste only links you understand: never one that someone gave you in a chat or a forum without explaining it.a4a6d83d2298e8a88a6da748a3cc9ae9051e459a1d6e06b098a27d2b87f8f796 (apksigner verify --print-certs).OPPO's settings only let the Snap Key start a closed list of actions. I wanted it to open a specific conversation, so I tried Key Mapper. It only sees the key in its expert mode, which dies as soon as Wi-Fi goes off, so not an option on the road.
Then I noticed ColorOS writes every press into logcat. A capture of the log gave the key's name, KEYCODE_ACTION_BUTTON_CLICK with scan code 735. Reading the log needs READ_LOGS, which I granted once with Key Mapper's shell command action, after switching on "Disable system optimisation" in the developer options (English only on ColorOS 16, otherwise the grant is refused). Android's "Allow restricted settings" covers an app installed outside the Play Store. And Android 13 and later ask for one-time log access each time listening starts, with the app in the foreground; this comes from the AOSP LogcatManagerService.
The result is a small app, tested on the Find X9 Pro since 19 October 2026.
Does it need root? No.
Does it need Wi-Fi? No. Wireless debugging is only needed once, for the grant.
Will it work after a reboot? You have to start listening again (see Limits).
Is it safe? No INTERNET permission, short open source code. See Security.
Can I use it on a phone that is not an OPPO? Maybe. Capture the log and see whether your key shows up.
More answers on the website.
Android SDK 35, JDK 17, Gradle 8.14.6 (the repository includes a wrapper pinned to it and gradle/verification-metadata.xml, which checks the checksum of every dependency):
gradle assembleFullRelease assembleLiteRelease
The full edition downloads its three libraries from Maven Central, Google and JitPack at build time.
To sign the release, set SNAPKEY_KEYSTORE (path) and SNAPKEY_KEY_PASSWORD; the key alias is snapkey. Without them you get an unsigned APK.
SnapKey Mapper is free and will stay free. If it saves you time, you can sponsor it on GitHub. A star or a bug report helps too.
MIT, see LICENSE.
SnapKey Mapper is an independent project. It is not affiliated with, endorsed by or sponsored by OPPO, OnePlus or Anthropic. OPPO, ColorOS, OnePlus and Claude are trademarks of their respective owners, used here only to describe compatibility.