My Galaxy S26 Ultra has no call recorder. Samsung ships one, but whether your phone gets it depends on the firmware's country code (the CSC), and plenty of phones sold in Pakistan come without it. So I did what everyone does: installed a recorder from the Play Store.
It recorded my voice perfectly. The other person sounded like they were calling from the next room.
That's not a bug in that one app. It's how every normal call recorder on modern Android works, and it's why I ended up building CallVault, a free, open-source recorder that captures both voices clearly, without root.
Why your recorder only hears you
Android has an audio source called VOICE_CALL, which is the actual audio of the call, both directions. Since Android 10, normal apps can't capture it. Only system components with special permissions can.
So Play Store recorders improvise. Apps like Cube ACR use an accessibility service (Cube's "App Connector") to notice when a call starts, then record through the microphone. Your voice is right next to the mic, so it's crisp. The other person only reaches the mic through the earpiece, so they come out faint, unless you put the call on speaker.
Google then closed that route too: in 2022 it stopped allowing Play Store apps to use accessibility services for call recording. What's left on the store is microphone recording with extra steps.
The trick: borrow the shell's permission
Android has a user that does have the permission. Since Android 11, the ADB shell user (UID 2000, the one you get when you run adb shell) holds CAPTURE_AUDIO_OUTPUT, which allows recording the VOICE_CALL source.
Shizuku is an app that starts a process running as that shell user, using Android's own Wireless debugging. Apps that support Shizuku can then run code in that process. CallVault runs its recorder there, so it records the real call audio:
- No root. The bootloader stays locked and Samsung's Knox warranty fuse is never tripped. (If a banking app complains that Developer options are on, CallVault has toggles to switch Shizuku off when you don't need it.)
- Both directions, at full quality, because it's the same audio the phone itself is sending and receiving.
On Android 14 and newer, the shell user also gets CAPTURE_VOICE_COMMUNICATION_OUTPUT. That lets CallVault record WhatsApp calls and Wi-Fi Calling too: it captures the call's playback audio (the other person) with AudioPlaybackCapture and combines it with the microphone (you).
CallVault is a fork of ShizuCallRecorder by kitsumed, which pioneered this approach. My work was making it reliable on a Samsung phone and making the recordings easy to live with.
The Samsung bug that recorded forever
The first serious problem: recordings never stopped.
Android tells call apps that a call has ended through a callback called onCallRemoved. One UI doesn't always deliver it. The call would end, the phone would go back to the home screen, and the recorder would keep going, writing silence into a file that never got finalised.
The fix was to stop trusting that single event. CallVault now also watches the call's state and ends the recording as soon as the call reaches DISCONNECTING or DISCONNECTED, whichever comes first.
The rest of the hardening
Most of the work was smaller failures that only show up when you use a recorder every day:
- Stop and failure racing each other. If a stop request and an error arrived together, a perfectly good recording could be reported as failed. In another path the engine waited on itself and froze for two seconds. Both are fixed.
- An encoder that never finishes. Some codecs never send the end-of-stream signal, which left files unfinished. Now there's a 5-second deadline, after which the file is closed properly anyway.
- A crash after missed calls.
- File names over 255 bytes, which Android refuses. Long contact names, especially in Urdu or Pashto script where each letter takes two bytes, could make saving fail. Names are now trimmed safely.
- Privacy leaks. Android's cloud backup could copy app data off the phone, and logs included contact details. Backup is off and contact data stays out of the logs.
Does it actually work?
I tested it on real calls on the S26 Ultra running Android 17: a SIM call over Wi-Fi Calling and a WhatsApp call both recorded with both voices clear. Recordings use Opus at about 16 kbps by default, so an hour of calls is only around 7 MB.
The app also needed to be pleasant to use, so CallVault has a recordings tab: calls grouped by day and by person, search by name or number, playback at up to 2x, and share or delete, one at a time or in bulk.
One thing I deliberately left out: AI transcription. My calls are mostly in Pashto and Urdu, and current speech models still handle those poorly. A transcript full of mistakes is worse than none, so the app sticks to clean audio.
Privacy and the law
CallVault has no internet permission at all. It can't upload anything, even by accident. Recordings are files in a folder you choose, and nothing leaves the phone unless you share it.
Recording calls is legal in many places but not everywhere, and some places require the other person's consent. Check the law where you live, and tell people when you're recording if it's required.
Try it
CallVault is free and open source under GPL-3.0. It needs Android 11 or newer (Android 14+ for WhatsApp and Wi-Fi Calling) and about five minutes of setup with Shizuku.
References: ShizuCallRecorder by kitsumed (the upstream project and its notes on Android versions) · Shizuku, thedjchi build · the Android Shell app's permission list.