android native C++编程实现数据库加密sqlcipher

sqlcipher是sqlite的加版本,分为免费版和收费版。

这里研究的是开源的免费版

https://github.com/sqlcipher/sqlcipher

Android码源默认提供了sqlite的native,jni和java版本,但没有提供sqlcipher,开发用到需要自己添加。

sqlcipher需要配置openssl,写一个android.bp

cpp 复制代码
android_sqlite_cflags = [
    "-DHAVE_USLEEP=1",
    "-DSQLITE_DEFAULT_JOURNAL_SIZE_LIMIT=1048576",
    "-DSQLITE_THREADSAFE=1",
    "-DNDEBUG=1",
    "-DSQLITE_ENABLE_MEMORY_MANAGEMENT=1",
    "-DSQLITE_TEMP_STORE=3",
    "-DSQLITE_ENABLE_FTS3_BACKWARDS",
    "-DSQLITE_ENABLE_LOAD_EXTENSION",
    "-DSQLITE_ENABLE_MEMORY_MANAGEMENT",
    "-DSQLITE_ENABLE_COLUMN_METADATA",
    "-DSQLITE_ENABLE_FTS4",
    "-DSQLITE_ENABLE_UNLOCK_NOTIFY",
    "-DSQLITE_ENABLE_RTREE",
    "-DSQLITE_SOUNDEX",
    "-DSQLITE_ENABLE_STAT3",
    "-DSQLITE_ENABLE_FTS4_UNICODE61",
    "-DSQLITE_THREADSAFE",
    "-Wno-unused-parameter",
    "-Wno-pointer-arith",
    "-Wno-unused-variable"
]

sqlcipher_cflags = [
    "-DSQLITE_HAS_CODEC",
    "-DHAVE_FDATASYNC=0",
    "-Dfdatasync=fsync",
]

sqlcipher_files = ["src/sqlite3.c"]

//APP_STL := c++_shared
//APP_ABI := armeabi-v7a arm64-v8a x86 x86_64
//APP_PLATFORM := android-26

// ANDROIDMK TRANSLATION ERROR: unsupported assignment to LOCAL_EXPORT_C_INCLUDES
// LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include/

//LOCAL_SRC_FILES := $(LOCAL_PATH)/lib/arm64-v8a/libcrypto.so
// ANDROIDMK TRANSLATION ERROR: unsupported include
// include $(PREBUILT_SHARED_LIBRARY)
cc_prebuilt_library_shared {
        name: "libcrypto2",
        target: {
            android_arm: {
                srcs: ["lib/armeabi-v7a/libcrypto.so"],
            },
            android_arm64: {
                srcs: ["lib/arm64-v8a/libcrypto.so"],
            },
        },
        strip: {
            none:true,
        },
        //shared_libs: ["libx", "libxx", "libxxx", "libxxxx"],
        check_elf_files: false,
        compile_multilib: "both"//32位和64位都预编译
}

cc_library_shared {
    name: "sqlite3_ext2",
    host_ldlibs: ["-llog"],
    srcs: sqlcipher_files,
    local_include_dirs: [
        "src",
        "include",
    ],
    cflags: android_sqlite_cflags + sqlcipher_cflags,
    //LOCAL_STATIC_LIBRARIES 	:= static-libcrypto
    shared_libs: ["libcrypto2",  "liblog",],

}

详细使用看:

GitHub - blogercn/android_sqlciphe: android natvity C/C++使用的加密数据库sqlciphe

可以用于ndk,可以复制到android源码供C++层开发使用

相关推荐
小此方15 小时前
Re:从零开始的 C++ STL篇(十二)深度解析哈希函数设计、负载因子调节与两种冲突处理策略
c++·算法·哈希算法
Karle_15 小时前
为AI编辑器准备c++编译环境,onnxruntime、cmake、cl,网上坑太多备份记录后续方便使用。
开发语言·c++·编辑器
Francek Chen15 小时前
【大数据存储与管理】实验3:熟悉常用的HBase操作
大数据·数据库·分布式·hbase
lcj251115 小时前
【数据结构精讲】堆与二叉树从底层原理到代码落地:堆的构建 / 调整 / 排序 + 二叉树遍历 / 操作(附完整 C++ 源码 + LeetCode 题解)
数据结构·c++·leetcode
ffqws_15 小时前
Spring @Transactional 注解详解:从入门到避坑
java·数据库·后端·spring
努力努力再努力wz15 小时前
【MySQL 进阶系列】C/C++ 如何通过客户端库访问 MySQL?从连接原理到 API 调用流程详解(附完整demo代码)
服务器·c语言·数据结构·数据库·c++·b树·mysql
恋猫de小郭15 小时前
Flutter 3.44 发布前夕,官方宣布 SwiftPM 将完全取代 CocoaPods
android·前端·flutter
CSCN新手听安15 小时前
【Qt】Qt窗口(七)QColorDialog颜色对话框,QFileDialog文件对话框的使用
开发语言·c++·qt
A charmer15 小时前
从 C++ 到 Objective-C:零基础平滑转学专栏【总目录】
开发语言·c++·objective-c
cookies_s_s15 小时前
C++ 内存模型与无锁编程:从底层原理到实战
linux·服务器·开发语言·c++