记录一下:
前段时间发布Google更新包,被强制要求Android Version必须30+,我的项目是29,由于没有涉及到那些外部存储功能啥的,我也没在意,直接升级Android版本号到30,用几台手机测试了一下,没有问题。和我想象中的一样,可以直接上线了,然后,就上线了。上线后的当天就发现了问题,我的另一台测试机,下载下来包体后,运行不起来,黑屏,于是,我麻了,其他手机都可以,只有一台不能运行游戏。什么原因?
第一个想到的就是升级Version导致的,马上把Version降回29,运行成功,没有问题;在将version升到30,运行黑屏。(自以为找到问题了,就是升级版本导致的,事实上确实也有些关系,但是不是主要原因。)于是我赶紧去研究存储机制,感觉没发现问题。
第二个想着会不会是权限导致的呢?然后加载动态权限。运行失败。看来跟权限没太大的关系。
那么跟什么有关系呢,运行发现已经跑到了main.lua中,但是在执行到 cc.FileUtils:getInstance():purgeCachedEntries() 后就没有反应了,也不向下执行了。好像明白了;
第三个想到 会不会是ccFileUtils调用到了android的存储函数,而由于存储机制更改,可能需要不同的调用呢,嗯,想着这个逻辑很接近啊,有点兴奋了,赶紧找到cocos调用android的存储的函数,改了一下,发现没啥用啊,还是黑屏,还是运行到那。
也不知道当时是想到了什么。在看到bad light userdata pointer这个错误的时候,突然想到了luagit。想到它后,无法控制的到网上搜了一下,发现arm64的android11的出厂手机中,确实与luagit有些不兼容,哇,又兴奋了,要去改luagit, git上下载最新的luagit,编译静态libluagit.a文件,头文件。替换掉3.17.2的arm64-v8a中 libluagit.a文件,运行。熟悉的界面,终于出来了!泪奔!!
整整一天的时间,一直到晚上10点多,才解决这个问题,测试后,没有问题,赶紧打包提审。一天多,又流失了很多用户,太可惜了。
记录一下,也给同样遇到此问题的朋友一个思路。如果需要这个.a文件,可以 自己下载 https://download.csdn.net/download/tianduanhun/65482969