新版本提交IOS后,发现下载后的包还是旧的包,读取的还是热更资源里的代码
做法很简单,就是删除热更缓存里的代码
在cocos2d-x的AssetsManagerEx.cpp中,有做这个的操作,但是为什么没起作用呢?
原来他是这样写的
if (_localManifest->isLoaded())
{
// Compare with cached manifest to determine which one to use
if (cachedManifest) {
if (strcmp(_localManifest->getVersion().c_str(), cachedManifest->getVersion().c_str()) > 0)
{
// Recreate storage, to empty the content
_fileUtils->removeDirectory(_storagePath);
_fileUtils->createDirectory(_storagePath);
CC_SAFE_RELEASE(cachedManifest);
}
else
{
CC_SAFE_RELEASE(_localManifest);
_localManifest = cachedManifest;
}
}
prepareLocalManifest();
}
意思就是你本地的版本号要大于热更缓存里的版本号才会删除缓存代码
我很简单的做法,就是把本地版本号和热更服务器比较的代码改成了只有小于才会热更
在Manifest.cpp中
bool Manifest::versionEquals(Manifest *b) const
{
// Check manifest version(b is Online Version,_version is local version)
if (strcmp(_version.c_str(), b->getVersion().c_str() ) < 0) //修改的代码
{
return false;
}
// Check group versions
else
{
std::vector<std::string> bGroups = b->getGroups();
std::unordered_map<std::string, std::string> bGroupVer = b->getGroupVerions();
// Check group size
if (bGroups.size() != _groups.size())
return false;
// Check groups version
for (unsigned int i = 0; i < _groups.size(); ++i) {
std::string gid =_groups[i];
// Check group name
if (gid != bGroups[i])
return false;
// Check group version
if (_groupVer.at(gid) != bGroupVer.at(gid))
return false;
}
}
return true;
}
就这样解决啦!