起因
有个项目有使用加密数据库的需求,便想到了SQLCipher
,移动端关系型数据库加密的解决方案,似乎是唯一的开源可用的解决方案。SQLCipher
是用C语言开发的,悲剧开始了
- C语言没有命名空间的概念
SQLCipher
的对外接口(API)和SQLite
对外接口(API)命名完全一致,这便要求SQLCipher
和SQLite
只能链接一个- 项目方要求不能移除对
SQLite
的链接(别问理由)
于是折腾便开始了。
方案
要解决这个问题,无非就两条路
- 替换
SQLCipher
,改用其他加密数据库解决方案 - 修改
SQLCipher
的对外接口命名,以使和SQLite
不产生链接冲突
SQLCipher
的替换方案,没找到开源的,遂放弃;于是开始了SQLCipher
接口命名修改的工作
过程
添加命名空间
首先想到的使,用C++
改写SQLCipher
,函数和变量名不改,只增加一个命名空间。
于是动手:
1、将.c
文件全部重命名为.cp