【Cocos2d-x】集成wxSqlite3到Cocos2d-x
关于wxSqlite3 wxSqlite3是一个轻量级的开源数据库项目,基于sqlite3,相比sqlite3增加了数据库加密功能,是用C语言实现的,跨平台。 下载wxsqlite3 下载地址:https://github.com/utelle/wxsqlite3 集成wxsqlite3到Cocos2d-x 1.在cocos2d-x引擎external目录下新建wxsqlite3src目录 2.把wxsqlite3-3.1.1sqlite3securesrc目录下的.h和.c文件拷贝到wxsqlite3/src目录下 3.添加sqltesecure.c到libLocalStorage项目中。(Cocos2d-x2.x是添加到libExtensions项目) 4.设置预编译宏:SQLITE_HAS_CODEC,该宏用于开启加密功能。 5.相关api (1). 设置密码(在sqlite3_open和sqlite3_close之间任何地方使用) int sqlite3_key( (2).修改密码(在sqlite3_open和sqlite3_close之间任何地方使用) int sqlite3_rekey( 示例:在LocalStorage.cpp中的localStorageInit方法中初始化数据库时设置密码
测试工程svn地址:http://code.taobao.org/svn/wxsqlite3_cocos2dx/trunk 编译到Android 1.在externalwxsqlite目录下添加Android.mk文件,文件内容如下:
来自CODE的代码片
Android.mk
2.工程中引入wxsqlite3静态库 cocos2d-x3.x:修改cocos2dcocosstoragelocal-storage目录下的Android.mk文件如下
[plain]
copy
cocos2d-x2.x:修改cocos2d-x-2.xextensions目录下的Android.mk文件如下,直接把加密功能增加到引擎扩展库
LOCAL_MODULE:=cocos_extension_static
3.Cocos2d-x引擎在Android平台下默认是通过Jni调用android sdk自带的SQLiteOpenHelper和SQLiteDatabase去创建和操作数据库的,所以在Android下使用wxsqlite3,需要进行以下几个步骤: (1).注释LocalStorage.cpp中对于安卓平台的判断宏 (2).修改Android.mk:Cocos2d-x对Android平台下数据库的操作封装在LocalStorageAndroid.cpp,现在修改为使用LocalStorage.cpp,使用跨平台的wxsqlite3 Cocos2d-x3.0:修改cocos2dcocosstoragelocal-storage目录下的Android.mk,删除LOCAL_SRC_FILES字段中的LocalStorageAndroid.cpp Cocos2d-x2.0:修改cocos2d-x-2.xextensions目录下的Android.mk,修改LOCAL_SRC_FILES字段中LocalStorageAndroid.cpp为LocalStorage.cpp 现在编译工程,就可以了。生成数据库文件应该在/data/data/包名/files目录下,如果加密成功了,使用sqlite查看器打开应该会失败。 编译到IOS 1.打开iOS工程,右键Add File,添加wxsqlite3文件夹到工程。 只保留sqlite3.h和sqlite3secure.c的引用即可。 2.点击工程——Build Settings——设置预编译宏(SQLITE_HAS_CODEC),开启加密功能 3.编译成功!
API使用说明: sqlite3_key是输入密钥,如果数据库已加密必须先执行此函数并输入正确密钥才能进行操作,如果数据库没有加密,执行此函数后进行数据库操作反而会出现“此数据库已加密或不是一个数据库文件”的错误。 int sqlite3_key( sqlite3 *db,const void *pKey,int nKey),db 是指定数据库,pKey 是密钥,nKey 是密钥长度。例:sqlite3_key( db,"abc",3); sqlite3_rekey是变更密钥或给没有加密的数据库添加密钥或清空密钥,变更密钥或清空密钥前必须先正确执行 sqlite3_key。在正确执行 sqlite3_rekey 之后在 sqlite3_close 关闭数据库之前可以正常操作数据库,不需要再执行 sqlite3_key。 int sqlite3_rekey( sqlite3 *db,int nKey),参数同上。 清空密钥为 sqlite3_rekey( db,NULL,0)。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |