JemRec

A call recorder for unrooted Android.

One APK. No root, no Shizuku, no companion app, and no computer — the phone pairs with its own Wireless debugging and sets itself up.

Download the APK Source on GitHub

Android 12 or newer. Not on Google Play, and never will be. Setting it up takes about three minutes and no computer — here is how. Play Protect sometimes objects to installing an app it has not seen before; the manual says what to do.

A reboot kills the recorder, and building it again takes a few seconds of Wi-Fi. Allow JemRec to start automatically in your phone's battery settings and it does that by itself — measured on an Honor, ten seconds after Wi-Fi came back, with the app never opened. Without that permission the phone will not start the app at boot at all, and you open it once instead. The manual has both measurements. Wi-Fi rebuilds the recorder; it is never needed to use it.

Tap any of them to look properly. The people in them do not exist: a screenshot of a call recorder is a screenshot of someone’s calls, so the list is filled with invented ones. Everything above the list is real.

How it works

Android’s voice-call audio source carries both sides of a call, and reading it needs permissions no ordinary app can hold — but the shell user, the one an ADB session runs as, holds them. Getting shell privilege normally means a computer, or root, or a second app you keep alive. JemRec needs none of them, because the phone can be its own computer.

The phone is both ADB host and ADB device

The app embeds an ADB client and pairs, over 127.0.0.1, with the phone’s own Wireless debugging — the same six-digit pairing a laptop does, with both ends on the same handset. Nothing leaves the phone.

ADB is a bootstrap, not a transport

That session lasts seconds. In it the app grants itself one settings permission and launches a small daemon from a jar it carries inside the APK, then closes the session. A process started from an ADB shell outlives the connection, which is the whole trick: with Wi-Fi off there is no ADB at all, so anything that needed it when a call arrived would simply not record.

The daemon records; the app collects

The daemon watches the call state and writes the call to a file. The app is never on the audio path. That split was forced by measurement: when the app handled live audio, the phone’s process manager froze it while the dialer was in front and a 77-second call arrived as 14. Afterwards the app fetches the finished file at whatever pace the system allows, and a freeze there costs a slower copy rather than a lost second.

The socket is authenticated both ways

The daemon listens on loopback, which every process on the phone shares, so each connection proves itself with an HMAC exchange over a token that never crosses the socket. The daemon proves itself first — anything can bind that port while the daemon is down, and a scheme that sent the token as a password would hand it over.

It keeps itself alive

Losing Wi-Fi restarts the ADB daemon and kills what it spawned, so the recorder keeps one debugging switch on to survive it, and minds that switch itself. That is what lets a call be recorded in a field with no network.

A reboot is the one thing it cannot survive, because starting the recorder is the single operation that needs ADB. A scheduled job and a system-held Wi-Fi watcher rebuild it without you within seconds of the phone joining a network — when the phone lets the app start in the background at boot to arm them. Where it does not, nothing is armed and nothing begins, which is why the manual says to open the app once after a restart. Either way the app says plainly that it cannot record rather than looking healthy.

What it asks for, and what it does not

No microphone permission. The app never opens an audio device — the shell-side process does the capturing — and a call recorder that asks for the microphone anyway is asking for something it does not use. Reading your call log and contacts is optional, offered once, and only labels a recording with who the call was with.

Recording calls is your responsibility. Consent law differs by country and sometimes by state: one party, all parties, or a spoken notice. This app records what you tell it to and warns nobody on your behalf.

Will it work on your phone?

One thing cannot be worked around: whether your phone’s audio hardware hands over the call at all. Some give both sides, some give one, some give silence. JemRec answers it in about a second — Settings, Diagnostics, Self-test — by opening a real capture down the same path a call takes and telling you what came out.

Both sides of the call have been recorded on three phones, across three very different Android builds: an Honor Magic 8 Pro on MagicOS 10, a Samsung Galaxy S20 on One UI, and a OnePlus on LineageOS 23. Three is not a compatibility list, which is what the self-test is for.