# Как записывать звонки на Android без root: установка AVault, шифрование и перенос записей

> AI Release · @ai_release1 · https://ai-release.org/guides/kak-zapisyvat-zvonki-na-android-bez-root-ustanovka-avau.html

## TL;DR

- Время выполнения: 30–40 минут (установка и разрешения — около 10, шифрование и перенос — около 20, проверка — около 5).
- Уровень сложности: Intermediate.
- Понадобится:
  - Android-смартфон с включённой отладкой по USB (минимальная версия ОС — сверьтесь с документацией AVault);
  - ПК с Windows/macOS/Linux и Android SDK Platform Tools (`adb`);
  - USB-кабель с передачей данных (не «charging only»);
  - APK-файл AVault из официального источника — ссылку и контрольную сумму берите там же;
  - 1–2 ГБ свободного места на телефоне и столько же на ПК;
  - `tar` и `openssl` на ПК (в Linux/macOS есть по умолчанию, на Windows — через WSL или Git Bash).

## Требования и подготовка

`adb` — Android Debug Bridge, консольная утилита, которая отправляет команды телефону по USB и умеет копировать файлы. Всё, что ниже, делается без root именно через неё.

- [ ] В телефоне: «Настройки» → «О телефоне» → 7 раз тапнуть по «Номер сборки», затем «Настройки» → «Система» → «Для разработчиков» → включить «Отладка по USB».
- [ ] На ПК распаковать Platform Tools и открыть терминал в этой папке.
- [ ] Проверить связку: `adb devices` — на экране телефона подтвердить отпечаток ключа.
- [ ] Проверить свободное место: `adb shell df -h /data`.
- [ ] Скачать APK AVault и сохранить рядом с ним файл контрольной суммы, если он публикуется.

```bash
adb version
adb devices
```

Ожидаемый вывод — версия ADB и строка с серийным номером и статусом `device`:

```
Android Debug Bridge version 1.0.41
List of devices attached
R58M12ABCDE	device
```

Если вместо `device` стоит `unauthorized` — на телефоне не нажали «Разрешить отладку». Если список пуст — проверьте кабель и режим USB «Передача файлов».

**Пример:** `adb shell df -h /data` возвращает строку вида `/data 108G 42G 66G 39%` — свободных 66 ГБ, места достаточно.

Отдельно проверьте, что прошивка не блокирует сторонние приложения: на китайских оболочках агрессивная экономия батареи и запрет автозапуска убивают фоновую запись. Как это отключается — разобрано в гайде [Как отключить рекламу, рекомендации и новостные подсказки на китайских Android-смартфонах без root](https://ai-release.org/guides/kak-otklyuchit-reklamu-rekomendatsii-i-novostnye-podska.html?utm_source=tg&utm_medium=channel&utm_campaign=guide_inline&utm_content=guide_to_guide).

## Шаг 1. Установка AVault и выдача разрешений

**Что сделать:** установить APK через `adb`, затем выдать приложению разрешение на микрофон и проверить, что оно реально выдано.

**Зачем:** без `RECORD_AUDIO` приложение запускается, но пишет пустые файлы; установка через `adb` удобнее тем, что сразу видно результат в консоли, а не «Приложение не установлено» на экране.

Сначала узнайте точное имя пакета — оно может отличаться от названия на иконке:

```bash
adb install -r ~/Downloads/avault.apk
adb shell pm list packages | grep -i -E 'vault|call'
```

Ожидаемо: `Success`, затем строка `package:com.<разработчик>.avault` — это и есть `<пакет AVault>` для дальнейших команд.

Выдайте разрешение и проверьте фактический статус:

```bash
adb shell pm grant <пакет AVault> android.permission.RECORD_AUDIO
adb shell dumpsys package <пакет AVault> | grep -i record_audio
```

Успех — строка `android.permission.RECORD_AUDIO: granted=true`.

**Как проверить:** запустите приложение и убедитесь, что оно не просит микрофон повторно. Часть разрешений (например, доступ к журналу звонков) через `adb` не выдаётся — их выдают только на экране телефона; полный список нужных AVault разрешений сверьте с документацией приложения.

**Пример:** если после `pm grant` в `dumpsys` осталось `granted=false`, значит разрешение не объявлено в манифесте или уже отозвано политикой прошивки — откройте экран разрешений вручную.

## Шаг 2. Шифрование записей и настройка переноса
![Иллюстрация к разделу «Шаг 2. Шифрование записей и настройка переноса»](https://ai-release.org/guides/img/kak-zapisyvat-zvonki-na-android-bez-root-ustanovka-avau-ru-2.jpg?v=1793955136)


**Что сделать:** выгрузить папку с записями на ПК, упаковать в архив и зашифровать его паролем, затем настроить регулярную передачу зашифрованного файла на свой сервер или в облако.

**Зачем:** файлы записи звонков — это персональные данные собеседников. Архив в облаке без шифрования читается кем угодно, у кого есть доступ к бакету; шифрование делает содержимое бесполезным без пароля.

Сначала найдите каталог записей (типовой путь для данных приложения — `/storage/emulated/0/Android/data/<пакет AVault>/files`; точный путь сверьте с настройками AVault или документацией):

```bash
adb shell ls /storage/emulated/0/Android/data/<пакет AVault>/files
adb pull /storage/emulated/0/Android/data/<пакет AVault>/files ./records_raw
```

Затем шифрование — AES-256-CBC с ключом, выведенным из пароля через PBKDF2 (PBKDF2 — медленное преобразование пароля в ключ, которое затрудняет перебор):

```bash
export REC_PASS='<ваш-длинный-пароль>'      # пароль храните вне каталога с архивом
tar -czf records.tar.gz -C ./records_raw .
openssl enc -aes-256-cbc -pbkdf2 -iter 200000 -salt \
  -in records.tar.gz -out records.tar.gz.enc -pass env:REC_PASS
sha256sum records.tar.gz.enc > records.tar.gz.enc.sha256
```

**Как проверить:** во-первых, тип файла — `file records.tar.gz.enc` должен вернуть `data` (а не `gzip compressed data`). Во-вторых, пробное расшифровывание без записи на диск:

```bash
openssl enc -d -aes-256-cbc -pbkdf2 -iter 200000 \
  -in records.tar.gz.enc -pass env:REC_PASS | tar -tzf - | head -3
```

Ожидаемый вывод — список файлов внутри архива, например `./call_2025-05-12_10-14.m4a`. Параметры `-pbkdf2 -iter 200000` при расшифровке должны совпадать с шифрованием, иначе получите `bad decrypt`.

**Пример:** если в самом AVault есть встроенное шифрование записей, включите его и проверьте результат тем же способом — файл в папке не должен открываться плеером, а `file` должен показывать `data`. Наличие и название такой опции сверьте с документацией.

Перенос на собственный сервер — одна команда плюс проверка целостности на приёмнике:

```bash
rsync -av records.tar.gz.enc records.tar.gz.enc.sha256 \
  <пользователь>@<ваш-сервер>:/srv/records/
ssh <пользователь>@<ваш-сервер> 'cd /srv/records && sha256sum -c records.tar.gz.enc.sha256'
```

Успех — `records.tar.gz.enc: OK`. Только после этого удаляйте локальную копию. Если своего сервера нет, а держите данные на домашней машине, схема хранения и синхронизации разобрана в гайде [Как вести семейный бюджет на своём сервере: установка Actual Budget и синхронизация с Android](https://ai-release.org/guides/kak-vesti-semeynyy-byudzhet-na-svoem-servere-ustanovka.html?utm_source=tg&utm_medium=channel&utm_campaign=guide_inline&utm_content=guide_to_guide) — принцип «свой сервер + шифрованный канал» там тот же.

| Этап | Команда | Ожидаемый результат |
|---|---|---|
| Выгрузка | `adb pull …` | `1 file pulled, 0 skipped` |
| Шифрование | `openssl enc …` | появился `records.tar.gz.enc` |
| Проверка типа | `file records.tar.gz.enc` | `data` |
| Расшифровка | `openssl enc -d … \| tar -tzf -` | список `.m4a`/`.amr` файлов |
| Отправка | `rsync …` | `records.tar.gz.enc: OK` |

## Шаг 3. Проверка работы и финальный результат
![Иллюстрация к разделу «Шаг 3. Проверка работы и финальный результат»](https://ai-release.org/guides/img/kak-zapisyvat-zvonki-na-android-bez-root-ustanovka-avau-ru-3.jpg?v=1793955143)


**Что сделать:** сделать тестовый звонок, убедиться, что файл появился и не пустой, прогнать полный цикл «расшифровка → воспроизведение» и только потом считать настройку завершённой.

**Зачем:** типичная ошибка — настроить перенос по пустому каталогу и узнать об отсутствии записей через неделю.

```bash
adb shell ls -lt /storage/emulated/0/Android/data/<пакет AVault>/files | head -5
adb shell du -h /storage/emulated/0/Android/data/<пакет AVault>/files
```

**Как проверить:** после звонка длительностью 30–60 секунд в верхней строке списка должен появиться свежий файл, а его размер — быть заметно больше нуля. Если `ffprobe` установлен, длительность проверяется точно:

```bash
ffprobe -v error -show_entries format=duration -of default=nw=1:nk=1 call_2025-05-12_10-14.m4a
```

Ожидаемый вывод — число секунд, близкое к длительности разговора, например `54.312000`.

Полный цикл проверки:

1. Позвонить на телефон с другого номера, поговорить 30 секунд, положить трубку.
2. Выполнить `adb pull` каталога записей.
3. Зашифровать архив командами из Шага 2.
4. Расшифровать в отдельный каталог и открыть файл плеером — слышно обе стороны (насколько это поддерживает ваша модель и версия ОС; совместимость сверьте с документацией AVault).
5. Сверить `sha256sum` локального и серверного файла — значения совпадают.

Успех выглядит так: файл есть, он не нулевой, после расшифровки воспроизводится, контрольные суммы на ПК и сервере идентичны, исходная папка на телефоне очищена после подтверждения.

## Возможные проблемы и решения

**Проблема. Установка APK обрывается на телефоне Xiaomi/Redmi.**

- Ошибка: `adb: failed to install avault.apk: Failure [INSTALL_FAILED_USER_RESTRICTED: Install canceled by user]`
- Причина: в MIUI/HyperOS установка через USB запрещена по умолчанию.
- Решение: «Настройки» → «Для разработчиков» → включить «Установка через USB» (и «Отладка по USB (настройки безопасности)»), затем повторить `adb install -r avault.apk`. После подтверждения на экране телефона ожидайте `Success`.

**Проблема. Запись создаётся, но весит 0 байт или обрывается через минуту.**

- Ошибка: `java.io.FileNotFoundException: /storage/emulated/0/Android/data/<пакет AVault>/files/call_2025-05-12_10-14.m4a: open failed: EACCES (Permission denied)`
- Причина: приложению не выдали разрешение на микрофон/хранилище либо система убила его в фоне из-за экономии батареи.
- Решение: повторить `adb shell pm grant <пакет AVault> android.permission.RECORD_AUDIO`, проверить `granted=true`, затем в настройках телефона снять ограничение батареи для AVault и разрешить автозапуск. Проверка — новый тестовый звонок и `adb shell du -h <файл>` с ненулевым размером.

**Проблема. Архив не расшифровывается.**

- Ошибка: `bad decrypt 40B7F3A1:error:1C800064:Provider routines::bad decrypt`
- Причина: неверный пароль или несовпадающие параметры (`-iter`, `-pbkdf2`) при шифровании и расшифровке.
- Решение: выполнить расшифровку ровно теми же флагами, что и шифрование, и подставить пароль из хранилища паролей. Проверка целостности самого архива — `sha256sum -c records.tar.gz.enc.sha256`, ожидается `OK`. Если и это не сходится, файл повреждён при передаче — копируйте заново.

## Резюме и следующие шаги

Вы установили AVault через `adb`, выдали разрешение на микрофон, настроили шифрование архива с записями и проверку целостности при переносе. Дальше имеет смысл поставить `rsync` в расписание (cron или «Планировщик заданий») и раз в месяц проверять восстановление архива из резервной копии.

## FAQ

**Нужен ли root, чтобы записывать звонки на Android?**
Нет, установка и работа AVault выполняются без root — все шаги выше используют только `adb` и обычные разрешения. Какие именно типы звонков и на каких прошивках поддерживаются, сверьте с документацией приложения: политика Android в отношении записи звонков различается по версиям ОС.

**Где AVault хранит файлы записей?**
Чаще всего в каталоге данных приложения на внутреннем накопителе; точный путь сверьте в настройках AVault или документации, а затем проверьте через `adb shell ls`. Если каталог пуст, запись не велась — смотрите разрешения и ограничения батареи.

**Можно ли восстановить запись без пароля?**
Нет. Архив зашифрован AES-256, ключ выводится из пароля через PBKDF2; без пароля останется только набор байтов. Храните пароль отдельно от архива, иначе шифрование теряет смысл.

**Как перенести записи, если нет ПК?**
Можно выполнить те же операции на самом телефоне в Termux — там доступны `tar`, `openssl` и `rsync`. Пошаговая установка окружения описана в гайде [Как запустить Linux на Android без root: Termux, PRoot и ИИ-инструменты](https://ai-release.org/guides/kak-zapustit-linux-na-android-bez-root-termux-proot-i-i.html?utm_source=tg&utm_medium=channel&utm_campaign=guide_inline&utm_content=guide_to_guide).
