Невозможно заархивировать базу данных Android SQLite после шифрования с помощью SQLCipher
Я отправляю базу данных только для чтения вместе с моим приложением, которая находится в каталоге Assets/Database. Все данные предварительно заполняются заранее.
После интеграции с SQLCipher
и зашифровав базу данных, я заметил, что размер APK увеличился с 25 до 150 МБ. Причина в том, что файл базы данных SQLite больше не сжимается.
Android Studio обычно сжимает ресурсы, но после того, как файл БД зашифрован, кажется, что архивирование файла не имеет никакого эффекта. Я попытался протестировать это снаружи с обычным Zip & 7Zip, и это не имеет значения, ZIP-файл имеет тот же размер, что и оригинал.
Размер незашифрованной базы данных составляет около 130 МБ, а при архивировании занимает всего 18 МБ, так как большая часть текста - это очень хорошо. Архивирование зашифрованного файла БД не имеет значения по размеру.
Заполнение через сервер не является жизнеспособным вариантом, так как это будет длиться вечно из-за количества записей. Следующим вариантом является загрузка полностью зашифрованного файла БД с сервера, но это все равно будет слишком медленным с файлом размером 140 МБ.
Необходимо найти подход для доставки зашифрованной БД вместе с приложением, сохраняя при этом размер приложения на разумных 20-30 МБ.
Есть идеи?
Благодарю.
1 ответ
Сжатие требует поиска шаблонов в данных. Шифрование удаляет все такие шаблоны.
Вы должны сделать сжатие перед шифрованием. Это невозможно с SQLCipher; вам нужно будет отправить сжатый и зашифрованный файл.sql, а затем выполнить его в новой зашифрованной базе данных.