cocos2d-x在Win32下使用Sqlite正常在Android真机上闪退

cocos2d-x在Win32下使用Sqlite正常在Android真机上闪退,调试发现CCLog输出发现找不到表,猜测是没找到数据文件,查了下,发现在 Android不能读取的原因,是因为对数据库的操作必须有root权限,也就是说,我们的应用程序只能对系统提供的特定目录中的数据库文件进行操作。这特定可写目录可以通过 下面语句获得


//可写目录
CCFileUtils::sharedFileUtils()->getWritablePath()
//拷贝前判断是否已经拷贝过
CCFileUtils::sharedFileUtils()->isFileExist(path)



所以需要把Resources下的数据库文件拷贝到可写路径去即可,拷贝函数如下

void WelcomeScene::copyData(const char* pFileName)
{
	std::string strPath = CCFileUtils::sharedFileUtils()->fullPathForFilename(pFileName);
	unsigned long len = 0;
	unsigned char *data = NULL;
	int b=CCFileUtils::sharedFileUtils()->isFileExist(strPath);
	CCLog("--respath strPath:%d",b);
	data = CCFileUtils::sharedFileUtils()->getFileData(strPath.c_str(),"r",&len);
	CCLog("--data:%s",data);
	std::string destPath = CCFileUtils::sharedFileUtils()->getWritablePath();
	destPath += pFileName;
	CCLog("--destPath:%s",destPath.c_str());
	FILE *fp = fopen(destPath.c_str(),"w+");
	fwrite(data,sizeof(char),len,fp);
	CCLog("--fwrite ok--");
	fclose(fp);
	delete []data;
	data = NULL;
}