androidWebView套殼H5踩坑總結

由於公司審覈要求,本來無app端的項目突然需要在短時間內提供android端app。所以最快速的方式就是H5套殼啦。

項目經理跟我說這個需求的時候我給出的工期是大約一個周,畢竟要進行一些交互上的轉換嗎,比方說dialog,js調用等,但實際的情況說明自己的想法還是太年輕。

進入正題。套殼當然要跟前端對接,前端給出的工期大約是兩個周。因爲是將微信公衆號端的功能移植到android端,困難點有兩個:一是將調用微信api的功能轉換爲android原生實現;二是前端vue框架怎樣與android端通信的問題(vue框架發佈後爲框架自動編譯的文件,爲一個index.html文件和其它編譯整理過得js、css等文件--及所見非所得。而我要與前端打交道的就是這個index.html文件)。首先我們嘗試了傳統的加載html方式,只不過是將前端vue框架生成的靜態代碼放到了assets目錄下,加載index.html,加載失敗,報錯:許多js無法調用。遂放棄。

考慮到前端使用了vue框架的問題,我們選擇的是使用橋接模式進行嘗試。工程導入jsbridge Library包,使用

BridgeWebView代替原WebView。通過webview.registerHandler()方法,通過js方法名參數與前端進行傳參,通過回調方法進行返回參數。與之前一樣還是使用vue靜態代碼加載,這裏要說一下爲什麼要使用靜態代碼的問題:前端考慮框架的問題所以考慮將框架生成的代碼都放到了android端這裏(後期證明放不放這裏都可以)。好吧,這樣通過橋接的方式實現了通信但是比較奇葩的是,參數傳遞的問題。由於我們html首頁需要瑜伽在部分字典數據,所以要講數據暫存到android端,我使用sqlite數據庫進行存儲,這個過程沒有問題。問題出在前端調用的時候,橋接框架會莫名的進行格式封裝,導致前臺無法解析,經過加班到凌晨的折騰,還是沒有解決。第二天求救公司首席架構師,畢竟時間緊任務重,這一關過不去就沒有辦法估工期。架構師一通操作猛如虎,jsonObject、jsonArray、Object……相互轉換,一同操作後依然打不過三方橋接的坑,遂放棄。架構師提出試試加載url地址,也不知是之前沒有試過還是當時配置不正確,之前嘗試是沒有成功的,但是這次就成功的加載了首頁……就是這麼神奇,費了這麼大勁還是使用了最原始的方式。

下面具體講一下使用騰訊X5瀏覽器內核加載從微信功能平臺轉移過來的h5頁面:

首先說一下,爲什麼用騰訊x5,一是由於android自帶的WebView功能有限。二是微信加載網頁也是使用的x5內核瀏覽器,所以這樣轉移會有比較好的兼容性吧。使用了騰訊X5內核後,js交互很順利,前端的緩存問題也得到了解決,不需要android提供緩存,直接按照瀏覽器的緩存機制就可以。一切彷彿進行的很順利。直到進行測試時,問題暴露出來了。個別機型無法響應圖片上傳的功能,一開始認爲是android9.0適配的問題,處理了一下可以了。但是一會又不行了,搗鼓一下好了……這樣反覆了好幾回,在機型適配的問題上折騰了一大圈,最後發現問題的根源在於安裝app後首次運行無法使用上傳圖片功能,將進程殺死後再次打開app就可以正常使用了。這纔是問題的癥結,饒了一大圈終於找的問題,彷彿看到了勝利的曙光。但是百度查詢結果讓人有些絕望:說這是騰訊x5首次加載的問題,首次加載內核使用的是異步加載,在沒有加載成功X5內核的情況下加載的html使用的是android系統自帶的webview,理所當然的一些js功能就加載不出來了。那問題有了,有沒有解決辦法呢?在網上搜索了很久:嘗試了靜態加載X5內核,無效,因爲靜態加載也是異步的,只不過之前是從網路上加載,靜態加載法是從本地加載,也是需要時間的。好,既然你是異步加載,那我等你加載完,我再加載html不就可以了嗎?最深的坑就在這裏,騰訊的機制是首次加載內核不可以直接使用!!!吐血…… 官方的迴應是市面上98%的手機都有安裝微信或者QQ,可以直接加載微信、QQ中的x5內核,只有約2%的用戶需要網絡加載X5內核,所以這種問題涉及的用戶很少,所以就不做處理了。就這個機制把我坑慘了,整好屬於2%的範疇。一時間感覺感覺山窮水盡了…… 好在天無絕人之路,首次加載不可以,第二次就可以,那我重啓一下不就可以嗎?從網上搜索了app自身重啓的方法,寫到service中。在app加載時判斷x5內核是否已加載,未加載 進行異步加載,頁面爲等待頁面,待加載完成,若返回結果爲false說明是第一次加載,殺死自己進程然後重啓。重啓期間會出現閃屏的效果,但是不是 太明顯。這樣一來就實現了首次啓動即可正常使用X5內核的功能了。至此Android套殼加載微信公衆號html的轉移工作就算完成了,期間走了不少彎路,希望能對以後使用騰訊X5內核的小夥伴有幫助。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章