sqlcipher / android-database-sqlcipher

Android SQLite API based on SQLCipher
https://www.zetetic.net/sqlcipher/sqlcipher-for-android/
Other
2.73k stars 564 forks source link

Build documentation: SQLCIPHER_CFLAGS #600

Closed charlag closed 1 year ago

charlag commented 1 year ago

Expected Behavior

I can build the library like documentation suggests, without including SQLCIPHER_CFLAGS. Docs say:

You may also optionally include SQLCIPHER_CFLAGS to override the default features SQLCipher core is compiled with

Actual Behavior

> Task :android-database-sqlcipher:buildNative FAILED
SQLCIPHER_CFLAGS=
OPENSSL_DIR=/home/USERNAME/dev/repositories/testsqlandroid/android-database-sqlcipher/../openssl
SQLCIPHER_DIR=/home/USERNAME/dev/repositories/testsqlandroid/android-database-sqlcipher/../sqlcipher
SQLCIPHER_OTHER_CFLAGS=-DLOG_NDEBUG -fstack-protector-all
ANDROID_NATIVE_ROOT_DIR=/home/USERNAME/dev/repositories/testsqlandroid/android-database-sqlcipher/android-database-sqlcipher/src/main/external/android-libs
NDK_APP_PLATFORM=16
make[1]: Entering directory '/home/USERNAME/dev/repositories/testsqlandroid/android-database-sqlcipher/android-database-sqlcipher/src/main/cpp'
rm -f /home/USERNAME/dev/repositories/testsqlandroid/android-database-sqlcipher/android-database-sqlcipher/src/main/libs32/armeabi-v7a/* /home/USERNAME/dev/repositories/testsqlandroid/android-database-sqlcipher/android-database-sqlcipher/src/main/libs32/x86/*
rm -f /home/USERNAME/dev/repositories/testsqlandroid/android-database-sqlcipher/android-database-sqlcipher/src/main/libs32/armeabi-v7a/gdbserver /home/USERNAME/dev/repositories/testsqlandroid/android-database-sqlcipher/android-database-sqlcipher/src/main/libs32/x86/gdbserver
rm -f /home/USERNAME/dev/repositories/testsqlandroid/android-database-sqlcipher/android-database-sqlcipher/src/main/libs32/armeabi-v7a/gdb.setup /home/USERNAME/dev/repositories/testsqlandroid/android-database-sqlcipher/android-database-sqlcipher/src/main/libs32/x86/gdb.setup
[armeabi-v7a] Compile thumb  : sqlcipher <= sqlite3.c
rm -f /home/USERNAME/dev/repositories/testsqlandroid/android-database-sqlcipher/android-database-sqlcipher/src/main/obj/local/armeabi-v7a/objs/sqlcipher/sqlite3.o
/home/USERNAME/dev/repositories/testsqlandroid/android-ndk-r23/toolchains/llvm/prebuilt/linux-x86_64/bin/clang -MMD -MP -MF /home/USERNAME/dev/repositories/testsqlandroid/android-database-sqlcipher/android-database-sqlcipher/src/main/obj/local/armeabi-v7a/objs/sqlcipher/sqlite3.o.d -target armv7-none-linux-androideabi16 -fdata-sections -ffunction-sections -fstack-protector-strong -funwind-tables -no-canonical-prefixes  --sysroot /home/USERNAME/dev/repositories/testsqlandroid/android-ndk-r23/toolchains/llvm/prebuilt/linux-x86_64/sysroot -g -Wno-invalid-command-line-argument -Wno-unused-command-line-argument  -D_FORTIFY_SOURCE=2 -fpic -march=armv7-a -mthumb -Oz -DNDEBUG  -I/home/USERNAME/dev/repositories/testsqlandroid/android-database-sqlcipher/android-database-sqlcipher/src/main/cpp -I/home/USERNAME/dev/repositories/testsqlandroid/android-database-sqlcipher/../openssl/include -I/home/USERNAME/dev/repositories/testsqlandroid/android-ndk-r23/sources/cxx-stl/llvm-libc++/include -I/home/USERNAME/dev/repositories/testsqlandroid/android-ndk-r23/sources/cxx-stl/llvm-libc++abi/include -I/home/USERNAME/dev/repositories/testsqlandroid/android-database-sqlcipher/android-database-sqlcipher/src/main/cpp -D_FILE_OFFSET_BITS=32  -DANDROID -DLOG_NDEBUG -fstack-protector-all -nostdinc++ -Wformat -Werror=format-security  -c  /home/USERNAME/dev/repositories/testsqlandroid/android-database-sqlcipher/android-database-sqlcipher/src/main/cpp/sqlite3.c -o /home/USERNAME/dev/repositories/testsqlandroid/android-database-sqlcipher/android-database-sqlcipher/src/main/obj/local/armeabi-v7a/objs/sqlcipher/sqlite3.o
/home/USERNAME/dev/repositories/testsqlandroid/android-database-sqlcipher/android-database-sqlcipher/src/main/cpp/sqlite3.c:69912:24: error: incomplete definition of type 'struct Btree'
  sqlite3_mutex_enter(p->pBt->mutex);

Steps to Reproduce

Run build e.g. like this:

PATH=$PWD/../android-ndk-r23:$PATH \
                                  ANDROID_NDK_ROOT=$PWD/../android-ndk-r23 \
                                  ANDROID_NDK_HOME=$PWD/../android-ndk-r23 \
                                  OPENSSL_ROOT=$PWD/../openssl \
                                  SQLCIPHER_ROOT=$PWD/../sqlcipher \ 
                                  make build-release

and see that it will be interpreted as SQLCIPHER_CFLAGS= (like in the snippet above)

So it doesn't default to the flags from build.gradle for some reason. You have to include the flags and SQLITE_HAS_CODEC is not enough, you must include SQLITE_TEMP_STORE according to SQLCipher Core docs.

SQLCipher version (can be identified by executing PRAGMA cipher_version;): 4.5.0

SQLCipher for Android version: 4.5.0

developernotes commented 1 year ago

Hi @charlag,

Thank you for pointing this out, we will adjust the README to reflect the necessary environment variables needed for building from source.

developernotes commented 1 year ago

Hi @charlag

This has been fixed in the master branch now, thanks again!

charlag commented 1 year ago

@developernotes thanks for the quick fix!