Невозможно заархивировать базу данных Android SQLite после шифрования с помощью SQLCipher

Я отправляю базу данных только для чтения вместе с моим приложением, которая находится в каталоге Assets/Database. Все данные предварительно заполняются заранее.

После интеграции с SQLCipher и зашифровав базу данных, я заметил, что размер APK увеличился с 25 до 150 МБ. Причина в том, что файл базы данных SQLite больше не сжимается.

Android Studio обычно сжимает ресурсы, но после того, как файл БД зашифрован, кажется, что архивирование файла не имеет никакого эффекта. Я попытался протестировать это снаружи с обычным Zip & 7Zip, и это не имеет значения, ZIP-файл имеет тот же размер, что и оригинал.

Размер незашифрованной базы данных составляет около 130 МБ, а при архивировании занимает всего 18 МБ, так как большая часть текста - это очень хорошо. Архивирование зашифрованного файла БД не имеет значения по размеру.

Заполнение через сервер не является жизнеспособным вариантом, так как это будет длиться вечно из-за количества записей. Следующим вариантом является загрузка полностью зашифрованного файла БД с сервера, но это все равно будет слишком медленным с файлом размером 140 МБ.

Необходимо найти подход для доставки зашифрованной БД вместе с приложением, сохраняя при этом размер приложения на разумных 20-30 МБ.

Есть идеи?

Благодарю.

1 ответ

Решение

Сжатие требует поиска шаблонов в данных. Шифрование удаляет все такие шаблоны.

Вы должны сделать сжатие перед шифрованием. Это невозможно с SQLCipher; вам нужно будет отправить сжатый и зашифрованный файл.sql, а затем выполнить его в новой зашифрованной базе данных.

Другие вопросы по тегам