文章目录
前言
sqlite适合嵌入在android上。在java应用层上使用sqlcipher的密钥有被反汇编的风险,考虑将sqlcipher移植到ndk上,这样将把加密数据库部分放到库文件里面供java调用。加大数据库被破解的难度。本文介绍在Android studio NDK实现sqlcipher加密库的方法步骤。
提示:以下是本篇文章正文内容,下面案例可供参考
一、准备
将以下download,然后都放到虚拟机ubuntu 中
1 .获取sqlcipher源码版本4.4.2
https://github.com/sqlcipher/sqlcipher
2 .获取openssl源码版本1.1.1f
https://github.com/openssl/openssl/tree/OpenSSL_1_1_1f
也可以试试1.1.1别的版本,本人没试过,但不推荐1.0.2以下的版本
3 .虚拟机ubuntu 提供交叉编译环境
https://developer.android.google.cn/ndk/downloads/older_releases
推荐Android NDK 16b,因为AS后面的版本是用逐渐用clang编译,没有arm-xxxxxx-gcc了。因为要的就是这个版本里面的交叉工具链arm-xxxxxx-gcc,用来交叉编译上述2个源码。
二、配置步骤
1.搭建交叉编译环境
unzip android-ndk-r16b-linux-x86_64.zip
cd android-ndk-r16b
2.编译源码sqlcipher
unzip sqlcipher-master.zip
cd sqlcipher-master
mkdir bld ;# Build will occur in a sibling directory
cd bld ;# Change to the build directory
../configure --enable-tempstore=yes CFLAGS="-DSQLITE_HAS_CODEC" ;# Run the configure script
make ;# Run the makefile.
make sqlite3.c ;# Build the "amalgamation" source file
这里的编译使用本地gcc编译(如果使用交叉编译,需要配置好编译环境(比较麻烦),因为我们的目的是获得整合版的sqlcipher的源码,所以建议不要交叉编译 ,到此sqlcipher源码生成完毕,复制bld目录下的 sqlite3.c和sqlite3.h到AS工程中去
#在ndk中cmake配置sqlcipher部分
cmake配置 (sqlcipher部分)
add_library(
# 设置so文件名称.
JNI
# 设置这个so文件为共享.
SHARED
# Provides a relative path to your source file(s).
src/main/jni/jni.cpp
src/main/jni/sqlite3.c)
add_definitions(-D SQLITE_HAS_CODEC) #加密宏定义一定要有
add_definitions(-D SQLITE_TEMP_STORE=2)