- 此刻,是深夜2:18 , 和看国足的伙伴一样 . 我们都没有睡 .来说说这次我改的bug的心路历程, 虽然些许心酸,但挺有意思
写在前面
这次是公司的一个改版项目 ,因为为了更好的广告收益,就把项目从uniapp改为Cordova .
之前听说过Cordova的坑比较多,但是那会心理还在想,难不成还有Uni坑多(心里:So,easy)
然而
上手以后,才发现,Cordova项目真的远远地超过我的认知, 首先配置JAVA以及Android的环境变量, 就花了我大半天的时间,然后还是有一些小问题(解决方法,版本回退老一版编译器)
Bug的出现
说说昨天的那个Bug 吧 ,公司需求上,有一个需要安卓手机,保存图片的bug.我当时开发的时候,用的是自己的三星手机,保存图片一直没有问题 , 当时以为这个功能就可以直接过了 ,没想到,到了测试上才发现,她的那部红米手机,会报一个错:error while saving image .....
分析Bug成因
哎呀我去,这bug说和没说一样,一点提示都没有.
当时我就仔细检查了自己的前端代码,插件是相当于, new 一个image的构造函数,然后把需要保存的地方,再通过插件转成base64 ,然后给这个image 的 src 去进行赋值 .
我觉得并没有问题 ,而且有问题的话,按理说,我的那个三星S6 也应该会出现问题 . 所以, 我又找了cordova 的 另外一个保存图片的插件,那个插件相当于是 把要保存的东西,转成canvers ,再设置canvers 的 width 和height ,再保存的本地手机 .
结果我发现 ,还是一样的报错 . 直到那时,我才意识到 : 这不是一个常规的bug ...
初步探索阶段
于是 ,我放下键盘, 开始琢磨 , 是不是机型的差异啊...
随后,我就找了我们测试的另外一个华为手机,进行测试,发现还是 有这个报错 . wtf ----
后来,我就在百度上,去查询:cordova 保存图片的报错,或者 cordova 如何保存图片, 这两个搜索主题来回的切换.
但是 ,这cordova的社区 ,冷门到真的不敢恭维 .
首先, 回答的内容真的是少的可怜 ,其次,这回答都是16年 17年的回答 ,真的太老了 . 对目前的开发帮助来说,不能说一点用没有吧,最起码也是毫无用处 (猛男落泪-----)
不断的试错
只要思想不滑坡,办法总比困难多 .问题始终要解决的 , 后来 ,我又查询了 cordova 如何修改 ,android 的读取和写入的权限 ,去进行修改 .
并且 , 用了一个 cordova-plugin-android-permission 去检测安卓的写入授权 , 发现 出问题的手机上 ,显示已经写入授权了 . 哎 ....又一次的卡壳了....
山穷水尽 , 转变思路
实在没办法了 ,想着 ,既然保存图片失败了,不行的话, 就看看能不能在不能保存图片的手机上,进行屏幕截图(需求再和产品沟通) .
于是,又下载了cordova插件中的Screenshot .但是这个插件好像用cordova plugin add .... 的命令,怎么都下载不下来 . 后来没法办,就只能用一个很笨的方法了. 先用git ,把项目拉下来,然后在本地添加这个项目 ,类似于这样 : cordova plugin add 'D:\yottal_cordova\pluginsssss\cordova-screenshot' .
柳暗花明
下载下来了 ,这一试不要紧 , 我在屏幕截图的时候, 可算发现了问题 !!! 这次截屏虽然没有成功 ,但是 ,但是 ,它有报错信息了!!! 我看了一下 ,保存信息前面是一串路径, 后面的话 ,有两次引起了我的注意 ---permission-denied , 这不还是一个权限的问题么 ,于是,我又一次陷入了深深的思考 .
后来 ,仔细查看了安卓的版本. 发现是安卓10 的版本 . 于是 ,又通过安卓10 ,查询到了,当时安卓10的信息
问题所在!
请注意第六条 !!!!! 难怪我的写入权限,虽然也有了,但就是不能生效!!!!
此刻,终于有点思路了 . 于是又开始去查询了一下安卓原生的代码 . 发现在安卓的代码里, 有一个配置,可以解决这个问题 . 但是 , 这可是cordova , 从何去配置这个原生代码...
后来又查询了cordova的配置原理,终于在某个android 的文件(AndroidManifest.xml )下,加上了那行代码 .. android:requestLegacyExternalStorage="true"
最后 ,满怀期待的 cordova run android 。终于 ,终于 ,成功了 !!!!!!!!
成功的那一刻,属实很开心 . 这个bug ,困扰了 5个多小时 . 一直在试错 ,一直在尝试 ...
bug不仅改完了,而且这次的事情让我对改bug这件事有了新的感悟 .
1.技术栈,一定要选择一个社区完善也实时更新的,不然的话,真的很痛苦 ..
2 .找问题 ,真的不仅仅要局限于前端的代码 ,尤其是这种混合的开发,真的很多时候,要摆脱前端人的思维惯性, 摆脱代码层面的思考 ,更多的是, 要 立刻找到不同差异,然后精准的定位问题
3. 混合开发的问题,一定要多关注系统的版本,不管是ios还是Android
说句客套话
这个bug 算是告一段落了 ,后面,我相信还是会有更多的bug在等着我 ..
我们有的时候 ,遇到的Bug不是说能有多难,更多的是 ,我们需要有克服bug 的勇气 !
第一篇掘金的帖子 ,暂时先总结这么多 ... 希望这个过程 ,能够帮到大家 ...