【说明】
Cocos2d-x已经集成了SQLite3,但是并未做加密处理,处于安全考虑,一般不会直接使用。wxSQLite3是一个开源项目,是对SQLite3的C++封装,并做了加密处理,使用起来也很方便。这里介绍我集成wxSQLite3的过程,期间参考了其他大神的文章,后面已做说明。
【下载】
http://sourceforge.net/projects/wxcode/files/Components/wxSQLite3/
【集成】
1. 下载wxSQLite3后解压,将 wxsqlite3-3.2.1\sqlite3\secure\src 文件夹拷贝到项目中。
2. 由于wxSQLite3内部已经引用,所以在Xcode中只需要引用 “sqlite3.h” 和 “sqlite3secure.c” 两个文件,引用其他文件会导致编译出错。
3. 由于我们需要用到加密功能,所以需要在 “sqlite3.h” 和 “sqlite3secure.c” 两个文件中都添加启用加密宏定义。这里我没有使用预编译宏定义的方式,是因为我更倾向于使用平台无关的方式。但是这里要注意添加的位置,否则可能会编译出错。
#ifndef SQLITE_HAS_CODEC
#define SQLITE_HAS_CODEC
#endif
5. 以上是在Xcode上的集成过程,对于Android平台,需要编写一个一个 Android.mk 文件。这段借鉴网上文章,我还没实践。
LOCAL_PATH := $(call my-dir)
#清理变量定义
include $(CLEAR_VARS)
#模块名称
LOCAL_MODULE := wxsqlite3_static
#库文件名称
LOCAL_MODULE_FILENAME := libwxsqlite3
#定义预编译宏
LOCAL_CFLAGS += -DSQLITE_HAS_CODEC ##该宏用于开启加密功能,我已经把定义写到代码里了,这里可以不要
#源文件
LOCAL_SRC_FILES := src/sqlite3secure.c
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/src
#头文件目录
LOCAL_C_INCLUDES := $(LOCAL_PATH)/src
#构建静态库
include $(BUILD_STATIC_LIBRARY)
在 jni/Android.mk 中(不一定是这个,反正就是在应用的Android.mk中)添加引用:
<pre name="code" class="cpp">LOCAL_CFLAGS += -DSQLITE_HAS_CODEC #该宏用于开启加密功能
LOCAL_WHOLE_STATIC_LIBRARIES += wxsqlite3_static #引入静态库
$(call import-module,../Classes/wxsqlite3) #引入模块 (Android.mk位置)
【使用】
使用部分可以参考Cocos2d-x自带的 LocalStorage 类,加密功能需要在 “sqlite3_open()” 和 “sqlite3_close()” 之间调用 “sqlite3_key()” 设置密码。
// SET KEY
#if (CC_TARGET_PLATFORM != CC_PLATFORM_WIN32)
sqlite3_key(_db, key.c_str(), (int)key.size());
#endif
最后附上我封(xiu)装(gai)的类,基本上都是 LocalStorage 的代码,只做了一点点修改。原本我是做成单例模式的,后来打算把集中存储合并到一个存储类里面,方便使用,就改成了普通类。前面才是重点,这部分不重要。
//==================