Популярная в Android-среде СУБД SQLite позволяет организовывать удобные хранилища данных, её возможностей достаточно для многих приложений, но не для тех, что работают с информацией, которую надо защищать.
Если ваш проект из этой серии, скажем, вы создаёте программу для хранения паролей и пользуетесь SQLite, дополнительные меры безопасности будут очень кстати. Одна из таких мер – шифрование.
Лучшее, что может сделать почти любой разработчик, если речь заходит о шифровании – найти готовое, проверенное временем, широко используемое решение, и внедрить его в свой продукт. Одно из таких решений, подходящих для Android – SQLCipher. Это расширение для SQLite с открытым исходным кодом, которое поддерживает прозрачное 256-битное AES-шифрование файлов баз данных.
SQLCipher применяется во множестве коммерческих разработок и продуктов с открытым исходным кодом. Фактически, это – одна из самых популярных систем шифрования баз данных для мобильных, встраиваемых и настольных платформ.
SQLCipher была выпущена компанией Zeletic в 2008-м году и поначалу использовалась в собственных разработках компании, в частности, в менеджере паролей Strip. Позже надёжность, низкая нагрузка на систему и маленький размер SQLCipher сделали её одним из самых широко используемых решений для шифрования баз данных. В 2011 году, отвечая на многочисленные просьбы о поддержке SQLCipher на Android, Guardian Project и Zeletic выпустили соответствующую версию системы. SQLCipher доступна и на многих других платформах. В частности, это Windows C/C++, .NET, Ruby, Java, PHP, Python, QT, Mac OS X и Linux.
Мы поговорим о том, как скомпилировать SQLCipher для Android-устройств, построенных на платформе Intel x86, используя в качестве рабочей машины компьютер с установленной Linux.
В общих чертах, для интеграции в Android-приложение поддержки SQLCipher, нужно, во-первых, добавить в проект соответствующие библиотеки, во-вторых – вместо средств SQLite из android.database.sqlite.SQLiteDatabase, использовать аналогичные, но уже из net.sqlcipher.database.SQLiteDatabase. Подробнее об этом можно узнать здесь.
Настройка Linux-окружения
Прежде чем скомпилировать SQLCipher для Android, нужно соответствующим образом подготовить компьютер с установленной Linux. В частности, надо загрузить и установить следующее:
На сайте Zeletic можно найти разные варианты загрузки исходного кода SQLCipher, мы сделаем это с помощью такой команды:
git clone https://github.com/sqlcipher/android-database-sqlcipher.git
После того, как репозиторий будет клонирован в локальную папку, можно начинать процедуру сборки библиотеки.
Сборка библиотеки SQLCipher в Linux
Предположим, исходный код библиотеки находится в папке /home/test/android-database-cipher/
. Выполним следующие команды:
Cd /home/test/android-database-cipher/
~/android-database-cipher> make init
Для того чтобы подготовить набор файлов, необходимых для успешной сборки SQLCipher, команде make init
может понадобиться некоторое время. В ходе подготовки будут загружены следующие внешние библиотеки:
- external/sqlcipher
- external/android-sqlite
- external/dalvik
- external/icu4c
- external/openssl
- external/platform-frameworks-base
После завершения инициализации для начала компиляции выполните следующую команду:
~/android-database-cipher> make
Выполнение данной команды скомпилирует библиотеки для целевых архитектур, перечисленных в файле Application.mk
. В нашем случае этот файл находится по адресу /home/test/android-database-cipher/jni/Application.mk
. Для того чтобы получить версию библиотеки, собранную для платформы x86, он должен содержать такую строку:
APP_ABI := x86
При успешной компиляции то, что нам нужно, окажется в папке libs/x86.
Сообщения об ошибках на данном этапе обычно указывают на неправильные настройки системы. Если при выполнении команды make
появится сообщение об ошибке вида «android update project fails», то, скорее всего, в системе пути к инструментам Android не добавлены в переменную PATH. Исправить это помогут такие команды:
export PATH=$PATH:~/android-sdk-linux/tools
export PATH=$PATH:~/ android-sdk-linux/platform-tools
Ошибку «ndk-build: command not found» вызывает отсутствие в переменной PATH сведений о расположении ndk-build. Её можно исправить так:
export PATH=$PATH:~/ android-ndk-linux /android-ndk-r10d
Если вы столкнулись с сообщением об ошибке «build.xml not found», автоматически сгенерировать build.xml можно так:
~/sqlcipher/android-database-sqlcipher> cd ..
~/sqlcipher> android update project --target 1 --path ./ --subprojects
Для того чтобы получить target id
, можно воспользоваться командой android list targets.
После того, как проблемы исправлены, снова запустите компиляцию, перейдя в каталог с исходным кодом SQLCipher.
Выводы
Мы рассмотрели здесь процесс подготовки SQLCipher для Android-устройств, построенных на платформе Intel x86 с использованием рабочей Linux-машины. Если вы работаете в Windows, здесь вы можете найти сведения о сборке SQLCipher на Windows-системах. Надеемся, SQLCipher поможет надёжно защитить данные всем, кто решит использовать эту библиотеку в своём проекте.
Автор: Intel