Miui-память без хаоса: заметки под контролем
Работаю тех специалистом в лаборатории мобильных прошивок, поэтому наблюдаю внутренности MIUI чаще, чем экран блокировки. Заметки в оболочке живут в каталоге /data/system/notes, используют базу SQLite с журналированием WAL, а шифрование XChaCha20 подключается лишь при активном пароле экрана.
Быстрая фиксация мысли
Для создания записи вызываю системный виджет «Новая заметка» или открываю приложение «Заметки MIUI». Перо-иконка в правом нижнем углу открывает редактор. Голосовой ввод использует API Speech-to-Text Google, датаграммы передаются через защищённый канал gRPC. Длинное нажатие по пустому полю раскрывает меню с редким пунктом «Флеш-заметка» – микрозапись до 140 символов, которая хранится в таблице fast_memo и выгружается в оперативную память при старте приложения для мгновенной выдачи. После ввода жму «✓», скрипт JavaScript commits.js отправляет транзакцию в базу. Без доступа к root запись попадёт в резервный каталог Android/data/— миграция задействуется при сбое основного хранилища.
Стираем лишнее безвозвратно
Удаление происходит по свайпу влево или через контекстное меню «Корзина». В реальности элемент получает метку _deleted=1, а физическая очистка выполняется службой noteCleaner каждую ночь в период 02:00–02:10. Нужно освободить место немедленно — открываю «Корзина», жму «Очистить». Сервис fsck_notes вырезает запись из WAL-журнала, синхронизирует индексы B-Tree. Для параноиков доступен метод shred — подключаю ADB, перехожу в shell и выполняю:
sqlite3 /data/system/notes/notes.db «DELETE FROM note WHERE _id=###, VACUUM,»
Команда VACUUM принудительно перестраивает файл, затирая битые страницы. Это надёжнее, чем обычное системное удаление.
Миграция на SD-карту
Перенос контента удобен при смене устройства либо перепрошивке. MIUI 13 умеет отдавать данные через встроенную утилиту «Резервирование». Запускаю её, отмечаю пункт «Заметки». Создаётся архив .bak в каталоге MIUI/backup/AllBackup. Для переносов на внешние накопители подключаю карту microSD, перемещаю архив в root карты. На новом телефоне открываю ту же утилиту, выбираю «Восстановить». Если microSD недоступна, задействую протокол MTP и копирую файл на ПК, затем перебрасываю по USB OTG.
При ручном способе важно учесть разницу в идентификатор пользователя (int UID). После прошивки кастома UID заметок может смениться. Решаю проблему через chown system:system *.db внутри каталога notes. Затем выставляю права 600 — без этого оболочка не прочитает базы.
В редких случаях приложение падает с java.lang.IllegalStateException: attempt to write a readonly database. Причина — битый флаг в header WAL. Удаляю файл notes.db-wal, MART создаёт новый журнал, данные остаются нетронутыми.
Подключая синхронизацию Icloud, обращаю внимание на параметр delta_sync. Он высчитывает хеш SHA-256 каждой заметки, передавая лишь изменённые блоки. Такое дифференциальное резервирование экономит трафик, но при нестабильной сети возникает состояние split-brain, когда версия в облаке расходится с локальной. Лечу конфликт, экспортируя обе версии в TXT, сравниваю через diff, потом вручную объединяю.
Завершая, рекомендую держать резервные копии в двух средах — локальной и облачной — и периодически проверять целостность через md5sum, чтобы внезапный write-amplification флеш-памяти не уничтожил идеи.