(前端)改bug到天亮什麼滋味
theme: juejin
- 此刻,是深夜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 的勇氣 !
第一篇掘金的帖子 ,暫時先總結這麼多 ... 希望這個過程 ,能夠幫到大家 ...