adb) on your computer, tar and OpenSSL 3.x on the computer, and free disk space equal to at least twice the size of your recordings.AVault is a call-recording app; the exact package name, default output folder, and encryption options depend on the build you install — where this guide cannot see your screen, it says check the app's documentation and gives you a command that reveals the real value.

adb). Verify:adb version
Expected output starts with Android Debug Bridge version — any recent 1.0.4x build is fine.
openssl version
Expected: a line starting with OpenSSL 3. — 3.x supports -pbkdf2 -iter, which the commands below use.
.tar.gz, one for the .enc file).Pre-flight checklist:
adb devices lists your phone as device, not unauthorizedWhat to do: Install or open AVault, then grant the permissions it asks for: Microphone (the actual audio), Phone (to detect when a call starts and stops), Notifications (a foreground service keeps the recorder alive), and Files/Storage if the app writes to a shared folder. Then remove battery restrictions: *Settings → Apps → AVault → Battery → Unrestricted*. On Xiaomi, Huawei, Oppo and Vivo also enable *Autostart* for the app — the guide How to Disable Ads, Recommendations and Push Notifications on Chinese Android Phones Without Root shows where those vendor menus hide. Finally, open AVault's settings and note the output folder it shows — for example /sdcard/Recordings or an app-private path under /sdcard/Android/data/<avault.package>/files/. Write it down.
Why: Android kills background services aggressively. A recorder that loses its foreground service stops mid-call and you get a truncated file — the most common "the app doesn't work" report. The output folder matters because Android's scoped storage means the app may not write where you expect.
How to check: Connect the phone, accept the "Allow USB debugging" dialog, then:
adb devices
adb shell pm list packages | grep -i vault
adb shell appops get <avault.package> RECORD_AUDIO
Expected: adb devices shows <serial> device; pm list packages returns one line such as package:com.example.vault — that is your <avault.package>; appops get returns RECORD_AUDIO: allow. If it returns deny, grant Microphone in *Settings → Apps → AVault → Permissions* and re-run.
Example: on a test phone the package line came back as package:com.example.vault, so every later command used com.example.vault in place of <avault.package>.

What to do: Make a 30–60 second real call with AVault running, then copy the file to the computer and encrypt the whole folder with a passphrase.
mkdir -p ~/avault && cd ~/avault
adb shell find /sdcard -type f \( -iname "*.m4a" -o -iname "*.wav" -o -iname "*.opus" -o -iname "*.amr" \) 2>/dev/null | head -n 20
adb pull "<path printed above, e.g. /sdcard/Recordings>" ./recordings
ls -lh ./recordings
Now pack and encrypt — run this on the computer (or inside Termux on the phone, see How to Run Linux on Android Without Root: Termux, PRoot, and AI Tools):
tar -czf avault-$(date +%F).tar.gz -C ./recordings .
openssl enc -aes-256-cbc -pbkdf2 -iter 200000 -salt \
-in avault-$(date +%F).tar.gz \
-out avault-$(date +%F).tar.gz.enc \
-pass pass:'<your-long-passphrase>'
ls -lh avault-$(date +%F).tar.gz*
Why: tar bundles many small files into one stream you can checksum and copy atomically; -pbkdf2 -iter 200000 makes brute-forcing the passphrase 200,000 times more expensive per guess than a single hash; -salt stops precomputed rainbow tables. -aes-256-cbc is a standard, widely supported cipher, so you can decrypt on any machine later without AVault.
How to check: Prove the archive decrypts and that it contains what you think it does:
openssl enc -d -aes-256-cbc -pbkdf2 -iter 200000 \
-in avault-$(date +%F).tar.gz.enc \
-pass pass:'<your-long-passphrase>' | tar -tzf - | head
Expected: a list of file names, e.g. ./call-2025-01-01-10-32.m4a. If you see tar: This does not look like a tar archive, the passphrase or -iter value is wrong.
Example: a 47-second test call produced a 1.1 MB .m4a; the encrypted archive avault-2025-01-01.tar.gz.enc sat next to the plain .tar.gz.

What to do: Compare the file hash on the phone with the hash on the computer, then copy the encrypted archive to your NAS, external drive or cloud folder and delete the plaintext copy from the phone and the computer.
adb shell sha256sum "/sdcard/Recordings/<file>.m4a"
sha256sum ./recordings/<file>.m4a
cp avault-$(date +%F).tar.gz.enc /media/<your-backup-drive>/avault/
sha256sum /media/<your-backup-drive>/avault/avault-$(date +%F).tar.gz.enc
rm avault-$(date +%F).tar.gz
adb shell rm "/sdcard/Recordings/<file>.m4a"
Why: A checksum (a fixed-length fingerprint of the file) turns "the copy looks fine" into a yes/no answer — one changed byte changes the entire hash. Deleting the plaintext after encryption means the only copy left is the one protected by your passphrase.
How to check: The three hashes must be identical for the archive copies, and you should be able to decrypt straight from the backup drive:
openssl enc -d -aes-256-cbc -pbkdf2 -iter 200000 \
-in /media/<your-backup-drive>/avault/avault-$(date +%F).tar.gz.enc \
-pass pass:'<your-long-passphrase>' | tar -tzf - | wc -l
Expected: adb shell sha256sum and sha256sum print the same 64-character hex string, and the last command prints a file count (e.g. 12), not an error. Success looks like: no plaintext .m4a on the phone, one .tar.gz.enc on the backup drive, and a listing you can reproduce from that drive alone.
Problem. adb devices shows the phone but nothing works.
adb: device unauthorized. Please check the confirmation dialog on your device.adb kill-server && adb start-server && adb devices — the state must change from unauthorized to device.Problem. The pull command cannot find the recordings.
adb: error: failed to stat remote object '/sdcard/Recordings/': No such file or directory/sdcard/Android/data/<avault.package>/files/), or the recording was never created because the foreground service was killed.adb shell find /sdcard -type f -iname "*.m4a" 2>/dev/null | head -n 20 — and pull that exact path. If nothing is listed, open AVault, record a new test call with the screen unlocked, and re-run the search. Confirm the default folder in the app's settings; if the field is empty, check the app's documentation.Problem. Decryption fails on the backup drive.
bad decrypt followed by error:1C800064:Provider routines::bad decrypt-iter value differs from the one used at encryption time (OpenSSL derives a different key), or the file was truncated by an interrupted copy.-iter 200000, and compare sha256sum of the backup copy against the original. If the hashes differ, copy the file again and re-check — a truncated .enc can never be decrypted.You now have a repeatable loop: record with AVault, pull the files over adb, pack and encrypt them with openssl, and verify with SHA-256 before deleting the plaintext. The next step is to automate it — a weekly adb pull plus tar/openssl script in cron, pointed at your backup drive.
Does call recording on Android require root?
No — AVault and similar apps run as normal apps with the Microphone and Phone permissions. What varies by device is whether Android lets a third-party app capture the other party's audio; if your recordings contain only your own voice, that is the OS restriction, not a root problem.
Where does AVault save recordings?
In the output folder shown in the app's settings, commonly /sdcard/Recordings or an app-private path under /sdcard/Android/data/<avault.package>/files/. Run adb shell find /sdcard -type f -iname "*.m4a" to see the real path; for the default value, check the app's documentation.
Can I decrypt the archive without AVault installed?
Yes. The archive is a standard tar.gz encrypted with openssl enc -aes-256-cbc, so any machine with OpenSSL 3.x and the passphrase can unlock it — the app is not needed for playback or recovery.
Why does the recorder stop when the screen is off?
Battery optimisation or a vendor autostart manager killed the foreground service. Set *Settings → Apps → AVault → Battery → Unrestricted*, enable autostart on Xiaomi/Huawei/Oppo/Vivo, and re-test with a 60-second call.