最近公司一个Cocos项目实在是过不去苹果的审核,多方打听,建议我们使用移植到Unity提交。于是就有了这个需求。
移植啥的就不说了,说下这个存档继承问题。
Cocos的本地数据持久化(存档)是使用slqite实现的(非H5),因此想要做存档继承,那只要直接读取Cocos的sqlite文件就行。
一开始选择的方案是在Unity中直接使用sqlite。说真,网上相关内容不多,但在多方搜索下搞定了。但没有完全搞定,在应用小规范发布后发现,很多海外手机上插件不存在。搞了一天完全没有头绪,时间还紧迫(部分发布了),于是我决定直接不废弃这套方案。
于是有了第二个方案:使用原生层面JAVA来读取sqlite数据库。代码不难,小半天就测试通过了。上线,然后我们又发现还是有用户存档继承不了,具体原因是找不到存档文件(由于项目没用设备标识id来关联用户,后面玩家反馈才发现)。
那么为什么会找不到sqlite文件呢?一开始读Cocos源码,发现sqlite文件存储在:
std::string strFilePath = cc::FileUtils::getInstance()->getWritablePath();
strFilePath += "/jsb.sqlite";
但明显与我真机上存储的位置不一致,也不知道是我没找对还是版本不一样的问题。
真机上打印结果为
/data/user/0/bundle_id/databases/jsb.sqlite
为了保险起见,我两种方式都去读一下文件。但结果还是存在找不到sqlite文件,为什么呢?
如果有熟悉安卓的同学可能很快就会发现了,或者根本不会出现这个错误。
错在哪呢?真机打印的结果没问题,但在不同手机上会有所不同(如果该手机开启了安卓多用户)
”/data/user/0/bundle_id/databases/jsb.sqlite“中的”0“代表这用户,如果开启了多用户则这个数字就会不同。就这样,简单,但不熟悉安卓的人一时间还真找不出问题(说的就是我自己🤐)