1. 程式人生 > >和Ionic android端樣式錯亂問題說再見

和Ionic android端樣式錯亂問題說再見

1.問題分析

最初接收到的資訊中得知,ios端的顯示正常,android端(錘子)許多介面樣式渲染錯亂。拿到app後再小米note上也進行安裝,結果樣式渲染也錯亂了,錯亂得樣子還不一樣。據我多年android原生開發的經驗,主要原因是ionic官方在開發的時候適配的是google原生的某一個版本的webview核心,Android
4.4 版本 Google 使用了Chromium 替代 Webkit 作為 WebView 核心,Chromium 這個東西是Google的開源專案,基本上幾個小時就會有一個新版本,導致了android每個小版本的webview都會存在一定的差異。然後就是國內android系統開發的亂象,因為webview總是有些bug,各大手機生產廠商都會對webview進行修改這就導致了h5和app融合開發的難度,這類框架就需要大量時間針對android調整程式碼。

基本上解決方案就兩個:
1.更改css和js來保證頁面更好的相容,造成的結果,需要大量的時間針對每個系統的手機做一套樣式(只要不相容就得做),時間成本和經濟成本(購買測試機)都明顯增加。
2.更換統一核心,造成的結果app的size變大。
從上述兩個方案來看,第二個明顯佔據時間和成本上的優勢,size在不超過50m的情況下對使用者的體驗來講是差不多的。

2.方案選型

由於我本就是做android原生開發的,對webview的核心早有自己的處理方式,當我想更換webview核心的時候發現,獲取webview的方法已經被cordova封裝進了lib已經修改不了。就無法使用我現有的核心進行修改。 Crosswalk也是提供webview統一核心的公司。最終決定使用crosswalk的ionic外掛。

3.方案實施

1.安裝crosswalk外掛 cordova plugin add cordova-plugin-crosswalk-webview

2.Android Support Repository和Google Repository要確保安裝成功。不然會出現編譯錯誤。在Android SDK Manager->Extras中選擇Android Support Repository和Google Repository進行安裝即可

3.由於專案的android版本不匹配,android:minSdkVersion=”16” android:targetSdkVersion=”23” ,編譯crosswalk的時候,出現了編譯錯誤。這個就需要降低crosswalk的版本了。 刪除config.xml的xwalkVersion

4.app編譯時出現針對某個cpu的apk,沒有通用apk。
這裡寫圖片描述

有時候就算加了這個也不能編譯出通用apk,應該是有些tools識別不了all這個abiFilters,不過沒有關係,可以把arm和x86的名字都跟在後面。

5.apk安裝時華碩手機出現報錯,cpu不相容。
這裡寫圖片描述
Cordova 編譯時提供很多cpu的lib包,但是很多都是沒有用的。把沒用的包刪除,重新編譯就可以了。

到這裡所有的問題都已經解決了,如果還有樣式問題,只要在一臺手機上修改程式碼就可以了。

帶來的問題也比較明顯,app啟動載入的速度慢了。還是有待研究。