(前端)改bug到天亮什麼滋味

語言: CN / TW / HK

theme: juejin

image.png

- 此刻,是深夜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的信息

image.png



問題所在!

請注意第六條 !!!!! 難怪我的寫入權限,雖然也有了,但就是不能生效!!!!

此刻,終於有點思路了 . 於是又開始去查詢了一下安卓原生的代碼 . 發現在安卓的代碼裏, 有一個配置,可以解決這個問題 . 但是 , 這可是cordova , 從何去配置這個原生代碼...

後來又查詢了cordova的配置原理,終於在某個android 的文件(AndroidManifest.xml )下,加上了那行代碼 .. android:requestLegacyExternalStorage="true"

最後 ,滿懷期待的 cordova run android 。終於 ,終於 ,成功了 !!!!!!!!

成功的那一刻,屬實很開心 . 這個bug ,困擾了 5個多小時 . 一直在試錯 ,一直在嘗試 ...

bug不僅改完了,而且這次的事情讓我對改bug這件事有了新的感悟 .

1.技術棧,一定要選擇一個社區完善也實時更新的,不然的話,真的很痛苦 ..

2 .找問題 ,真的不僅僅要侷限於前端的代碼 ,尤其是這種混合的開發,真的很多時候,要擺脱前端人的思維慣性, 擺脱代碼層面的思考 ,更多的是, 要 立刻找到不同差異,然後精準的定位問題

3. 混合開發的問題,一定要多關注系統的版本,不管是ios還是Android

説句客套話

這個bug 算是吿一段落了 ,後面,我相信還是會有更多的bug在等着我 ..

我們有的時候 ,遇到的Bug不是説能有多難,更多的是 ,我們需要有克服bug 的勇氣 !

第一篇掘金的帖子 ,暫時先總結這麼多 ... 希望這個過程 ,能夠幫到大家 ...