1:环境
Ubuntu16.0.4
android studio 4.1.1
ndk r20 (官方推荐)
涉及到的项目有三个:
android-database-sqlcipher master v4.4.2
sqlcipher master v4.4.2
OpenSSL master OpenSSL_1_1_1i
2:OpenSSL编译
这是OpenSSL的目录结构,
这块是我们要执行编译的命令
export ANDROID_NDK_ROOT=/home/whoever/Android/android-sdk/ndk/20.0.5594570
PATH=$ANDROID_NDK_ROOT/toolchains/llvm/prebuilt/linux-x86_64/bin:$ANDROID_NDK_ROOT/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin:$PATH
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201231093152825.png)
./Configure android-arm64 -D__ANDROID_API__=29
make
如图当值行到./Configure…时,会提示我们配置ANDROID_NDK_HOME;
配置ANDROID_NDK_HOME后
执行make后,可以看到openssl路径下多出的文件:
在这里插入图片描述
3:编译android-database-sqlitecipher
SQLCIPHER_ROOT=/some/path/to/sqlcipher-folder \
OPENSSL_ROOT=/some/path/to/openssl-folder \
SQLCIPHER_ANDROID_VERSION="4.4.2" \
OPENSSL_ANDROID_LIB_ROOT=/some/path/for/android/native/lib/creation \
make build-release
如上,在makefile的 build-release中需要用到上述的四个变量。
在这里插入图片描述
所以,我在这里直接定义了
sqlcipher_root定义的是sqliteCipher总库的路径。
OpenSSL_root定义的是OpenSSL项目的路径
OpenSSL_Android_lib_root 是输出的路径,这里我定义在当前项目生成了android_out目录。
这里我们可以直接使用make build-release试着执行下
直接编译的话会提示我们缺少local.properties文件。
这里直接加个文件,定义好sdk路径就好。
接着就会执行native中的buildOpenssl 任务
继续编译:
然后看sqlcipher总库时发现了这个:
而执行任务时打印出来的
CFLAGS是个空的字符串。
sqlcipher中定义的默认值是:
cflags = "-DSQLITE_HAS_CODEC " +
"-DSQLITE_SOUNDEX " +
"-DHAVE_USLEEP=1 " +
"-DSQLITE_MAX_VARIABLE_NUMBER=99999 " +
"-DSQLITE_TEMP_STORE=3 " +
"-DSQLITE_THREADSAFE=1 " +
"-DSQLITE_DEFAULT_JOURNAL_SIZE_LIMIT=1048576 " +
"-DNDEBUG=1 " +
"-DSQLITE_ENABLE_MEMORY_MANAGEMENT=1 " +
"-DSQLITE_ENABLE_LOAD_EXTENSION " +
"-DSQLITE_ENABLE_COLUMN_METADATA " +
"-DSQLITE_ENABLE_UNLOCK_NOTIFY " +
"-DSQLITE_ENABLE_RTREE " +
"-DSQLITE_ENABLE_STAT3 " +
"-DSQLITE_ENABLE_STAT4 " +
"-DSQLITE_ENABLE_JSON1 " +
"-DSQLITE_ENABLE_FTS3_PARENTHESIS " +
"-DSQLITE_ENABLE_FTS4 " +
"-DSQLITE_ENABLE_FTS5 " +
"-DSQLCIPHER_CRYPTO_OPENSSL " +
"-DSQLITE_ENABLE_DBSTAT_VTAB"
将上述添加到buildnative的任务中后
这里直接编译通过:
这是整个项目编译的一个过程,