Russian Qt Forum
Май 02, 2024, 17:44 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QSQLCIPHER на android  (Прочитано 4537 раз)
GNU Dimarik
Гость
« : Октябрь 08, 2014, 22:49 »

Всем привет, вот какая беда: собрал QSQLCIPHER для андроид, собралось с небольшими плясками с бубном, но когда пытаюсь использовать драйвер, то вот какая картинка:

D/Qt      ( 3130): ../chipher_example/mainwindow.cpp:13 (MainWindow::MainWindow(QWidget*)): ("QSQLCIPHER", "QSQLITE")
W/Qt      ( 3130): kernel/qsqldatabase.cpp:789 (void QSqlDatabasePrivate::init(const QString&)): QSqlDatabase: QSQLCIPHER driver not loaded
W/Qt      ( 3130): kernel/qsqldatabase.cpp:790 (void QSqlDatabasePrivate::init(const QString&)): QSqlDatabase: available drivers: QSQLCIPHER QSQLITE

Т.е. в списке драйверов он есть, но использовать не получается, либы используемые при сборке добавил в pro файл через LIBS.
Что я делаю не так?
Записан
GNU Dimarik
Гость
« Ответ #1 : Октябрь 11, 2014, 01:12 »

Исправил.
Скачал бинарии SQLCipherforAndroidv2.2.2, думаю будет не трудно нагуглить, далее перебилдил драйвер с ними добавив в INCLUDEPATH qt5-sqlcipher путь к sqlite3 (для sqlite3.h), слинковал с sqlcipher_android, вот полный файл проекта:

Код:
#
# Build SqlCipher as a SQL driver plugin for Qt 5
#
# Simon Knopp, Feb 2014
#
INCLUDEPATH += /home/dmitry/etc/src/sqlite-amalgamation-3080600
LIBS += -L/home/dmitry/etc/projects/chipher_example/SQLCipherforAndroidv2.2.2/libs/armeabi
SQLCIPHER_CONFIGURE = --enable-tempstore=yes \
                      --disable-tcl \
                      CFLAGS="-DSQLITE_HAS_CODEC" \
                      LDFLAGS="-lcrypto"

SQLITE_DEFINES = SQLITE_OMIT_LOAD_EXTENSION SQLITE_OMIT_COMPLETE \
                 SQLITE_ENABLE_FTS3 SQLITE_ENABLE_FTS3_PARENTHESIS \
                 SQLITE_ENABLE_RTREE

# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #

TARGET = qsqlcipher

isEmpty(QT_SRCDIR):QT_SRCDIR = qtbase

DRIVER_SRCDIR = $$QT_SRCDIR/src/sql/drivers/sqlite
PLUGIN_SRCDIR = $$QT_SRCDIR/src/plugins/sqldrivers

!exists($$DRIVER_SRCDIR) {
    error("Could not find Qt source in" $$QT_SRCDIR/src \
          ": You need to update your git submodules or set QT_SRCDIR = /path/to/qtbase in .qmake.conf")
}

INCLUDEPATH += $$DRIVER_SRCDIR

SOURCES = smain.cpp
OTHER_FILES += qsqlcipher.json

# Use Qt's SQLite driver for most of the implementation
HEADERS += $$DRIVER_SRCDIR/qsql_sqlite_p.h
SOURCES += $$DRIVER_SRCDIR/qsql_sqlite.cpp

# Don't install in the system-wide plugins directory
CONFIG += force_independent

!system-sqlite:!contains(LIBS, .*sqlite3.*) {
    CONFIG(release, debug|release):DEFINES *= NDEBUG
    DEFINES += $$SQLITE_DEFINES
    !contains(CONFIG, largefile):DEFINES += SQLITE_DISABLE_LFS
    INCLUDEPATH += $$OUT_PWD/include
    LIBS        += -L$$OUT_PWD/lib -lsqlcipher_android #-lcrypto
    QMAKE_RPATHDIR += $$OUT_PWD/lib
} else {
    LIBS *= $$QT_LFLAGS_SQLITE
    QMAKE_CXXFLAGS *= $$QT_CFLAGS_SQLITE
}

PLUGIN_CLASS_NAME = QSQLCipherDriverPlugin
include($$PLUGIN_SRCDIR/qsqldriverbase.pri)

# Configure sqlcipher
config_sqlcipher.target = $$PWD/sqlcipher/Makefile
config_sqlcipher.commands = cd $$PWD/sqlcipher && \
                            ./configure $$SQLCIPHER_CONFIGURE \
                                --prefix=$$OUT_PWD

# Build sqlcipher
sqlcipher.target = $$OUT_PWD/lib
sqlcipher.commands = $(MAKE) -C $$PWD/sqlcipher install
sqlcipher.depends = config_sqlcipher

# Configure and build sqlcipher before building the plugin
QMAKE_EXTRA_TARGETS += config_sqlcipher sqlcipher
PRE_TARGETDEPS += $$sqlcipher.target


Вот pro файл тестового проекта как и что я деплоил:

Код:

#-------------------------------------------------
#
# Project created by QtCreator 2014-10-08T20:58:31
#
#-------------------------------------------------

QT       += core gui sql

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = chipher_example
TEMPLATE = app


SOURCES += main.cpp\
        mainwindow.cpp

HEADERS  += mainwindow.h

FORMS    += mainwindow.ui

CONFIG += mobility
MOBILITY =

LIBS += -L$$PWD/SQLCipherforAndroidv2.2.2/libs/armeabi -lsqlcipher_android
INCLUDEPATH += ./include

contains(ANDROID_TARGET_ARCH,armeabi-v7a) {
    ANDROID_EXTRA_LIBS = \
        $$PWD/SQLCipherforAndroidv2.2.2/libs/armeabi/libsqlcipher_android.so \
        $$PWD/SQLCipherforAndroidv2.2.2/libs/armeabi/libstlport_shared.so
}


Все рапотает!!!
Спасибо за внимание :-)
Записан
GNU Dimarik
Гость
« Ответ #2 : Октябрь 14, 2014, 09:27 »

Это заработало со свежими бинариями тоже
Записан
OKTA
Гость
« Ответ #3 : Октябрь 14, 2014, 10:02 »

Слушай, а QSQLCIPHER как работает с бд? Шифрует целиком и полностью и каждый раз при работе надо ждать, пока он дешифрует ее всю?
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.047 секунд. Запросов: 21.