(前端)改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 的勇氣 !

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