1.3.0自开始测试以来已经快一个月了,修复了大量的bug,到现在为止已趋于稳定。
但是,还有两个由于android设备的碎片化导致的头疼问题,不得不再次面对:
1.外部SD卡的访问权限
原本以为在Android5.0设备之后利用SAF授权就可以解决了,没想到居然还有坑——经过测试,某些设备,某些版本的系统中,如果应用升级了版本,或者系统升级了版本,会导致外卡只有一部分目录有访问权限。
这点是最坑爹的,如果外卡权限完全被收回,那么应用可以检测到并重新走一遍授权流程。然而偏偏外卡的根目录可以访问以为没问题了,但到子目录又不可以访问,导致后来的存档各种问题。
暂时的策略是把1.2版本那时候的每次加载游戏前检测当前目录是否可写,然后弹窗建议把游戏放在data/org.tvp.kirikiri2_free/files里。但这也并非完美,如果游戏目录可写,偏偏下面的savedata不可写呢?多判断一次savedata,那么部分游戏不把savedata作为存档目录而用 公司名/游戏名/save 之类的路径作为存档呢?
还是希望听听各位的意见,能不能想到更好的办法来解决这个问题。
2.Adreno GPU的驱动bug(可能还有其它不知名型号也有同样问题)
这次版本更新使用的OpenGL渲染器充分利用了fetch framebuffer扩展特性来提高性能,然而就是有些设备报告支持这个特性,结果不支持(由于bug或者啥其它原因导致不能获得正确的渲染结果)。
目前为止获得此类报告的用户都是使用Adreno的GPU,所以目前的暂时策略是在设置界面里切换到OGL渲染器时检查是否为Adreno的GPU,如果是,那么弹个窗口让用户注意画面错误,并进入高级设置里关闭这个扩展。(还曾突发奇想每帧渲染时都走一遍不使用扩展特性的流程,然后比较两帧画面看看有没有出问题……当然这么干掉帧掉得厉害,自然否决了)
然而这么做还是不完美,如果用户是从旧版本模拟器升级到1.3.0,那么继承了旧设置的模拟器不会给出任何提示。结果用户发现画面错误后就到论坛来问了……
毕竟有些Adreno的GPU工作还是正常的,既不能一棒子打死不厌其烦地每次启动都提示,也不能只提示了一次后被用户关闭了就再也不出声,最后用户发现画面错误还是得到论坛上来问……
目前自认为自己在技术上没有什么好办法判断设备对扩展的正确支持程度,也没法像那些大公司一样每个设备都测试一遍然后建个数据库来作为特效开关的依据,只能在界面设计上下功夫让用户注意到问题并引导其进入高级设置里手动关闭出问题的扩展。
希望听听各位是否有更好的主意来协助解决这个问题。
最后吐个槽:
做iOS开发就是省心,统一的系统,统一的硬件规格,统一的接口设计,最关键的是有问题自己就能发现修正,发布后极少会在发布后出现系统或硬件不同导致的各种问题。而做Android开发就非常容易遇到各种莫名其妙的,明明自己的设备都OK别人的设备就是不行的问题……
但是,还有两个由于android设备的碎片化导致的头疼问题,不得不再次面对:
1.外部SD卡的访问权限
原本以为在Android5.0设备之后利用SAF授权就可以解决了,没想到居然还有坑——经过测试,某些设备,某些版本的系统中,如果应用升级了版本,或者系统升级了版本,会导致外卡只有一部分目录有访问权限。
这点是最坑爹的,如果外卡权限完全被收回,那么应用可以检测到并重新走一遍授权流程。然而偏偏外卡的根目录可以访问以为没问题了,但到子目录又不可以访问,导致后来的存档各种问题。
暂时的策略是把1.2版本那时候的每次加载游戏前检测当前目录是否可写,然后弹窗建议把游戏放在data/org.tvp.kirikiri2_free/files里。但这也并非完美,如果游戏目录可写,偏偏下面的savedata不可写呢?多判断一次savedata,那么部分游戏不把savedata作为存档目录而用 公司名/游戏名/save 之类的路径作为存档呢?
还是希望听听各位的意见,能不能想到更好的办法来解决这个问题。
2.Adreno GPU的驱动bug(可能还有其它不知名型号也有同样问题)
这次版本更新使用的OpenGL渲染器充分利用了fetch framebuffer扩展特性来提高性能,然而就是有些设备报告支持这个特性,结果不支持(由于bug或者啥其它原因导致不能获得正确的渲染结果)。
目前为止获得此类报告的用户都是使用Adreno的GPU,所以目前的暂时策略是在设置界面里切换到OGL渲染器时检查是否为Adreno的GPU,如果是,那么弹个窗口让用户注意画面错误,并进入高级设置里关闭这个扩展。(还曾突发奇想每帧渲染时都走一遍不使用扩展特性的流程,然后比较两帧画面看看有没有出问题……当然这么干掉帧掉得厉害,自然否决了)
然而这么做还是不完美,如果用户是从旧版本模拟器升级到1.3.0,那么继承了旧设置的模拟器不会给出任何提示。结果用户发现画面错误后就到论坛来问了……
毕竟有些Adreno的GPU工作还是正常的,既不能一棒子打死不厌其烦地每次启动都提示,也不能只提示了一次后被用户关闭了就再也不出声,最后用户发现画面错误还是得到论坛上来问……
目前自认为自己在技术上没有什么好办法判断设备对扩展的正确支持程度,也没法像那些大公司一样每个设备都测试一遍然后建个数据库来作为特效开关的依据,只能在界面设计上下功夫让用户注意到问题并引导其进入高级设置里手动关闭出问题的扩展。
希望听听各位是否有更好的主意来协助解决这个问题。
最后吐个槽:
做iOS开发就是省心,统一的系统,统一的硬件规格,统一的接口设计,最关键的是有问题自己就能发现修正,发布后极少会在发布后出现系统或硬件不同导致的各种问题。而做Android开发就非常容易遇到各种莫名其妙的,明明自己的设备都OK别人的设备就是不行的问题……













