Crosswalk集成到Android Studio,替代原生WebView遇到的問題

Crosswalk集成到Android Studio,替代原生WebView遇到的問題

前言:

最近項目中很多地方用到h5頁面,使用Android原生WebView進行展示時,版本低的機型無法顯示頁面。遂想到是不是有可以替換的框架或者產品。在這個過程中,使用了幾個替代框架,遇到一些問題,在此與大家分享一下。如有不對的地方,歡迎指正!

在項目中嘗試用到的產品

  1. SuperWebview
    SuperWebview是APICloud官方推出的另一項重量級API生態產品,以SDK方式提供,致力於提升和改善移動設備Webview體驗差的整套解決方案。
    具體可以參考:http://docs.apicloud.com/Dev-Guide/SuperWebview-guide-for-android
  2. 基於X5內核的WebView
    騰訊瀏覽服務基於騰訊X5內核解決方案(包括內核和雲服務),能夠有效解決傳統移動web技術面臨的普遍問題,同時能極大擴展應用(Hybrid App)內瀏覽場景的服務能力。
    具體可以參考:http://x5.tencent.com/tbs/guide/sdkInit.html
  3. Crosswalk
    Crosswalk是一款開源的Web引擎,其基於 Chromium/Blink 的應用運行環境。採用Chromium內核並持續更新維護,使基於Crosswalk的Web應用充分享有Chromium的功能與性能優勢,以及較好的平臺一致性. 同時,支持最新的H5的API(WebGL,WebAudio,WebRTC,Gamepad,WebSocket,Presentation等)。並且在低端Android設備上也能流暢運行。
    官網:https://crosswalk-project.org/

使用各個產品遇到的問題

  1. SuperWebview
    SuperWebview查看官方文檔,更傾向於web開發,不能直接替換WebView,在選擇的過程中直接剔除掉了。
  2. 基於X5內核的WebView
    在剔除掉SuperWebview後,就找到了騰訊旗下的基於X5內核的webview(下文稱之爲X5Webview)。X5Webview有如下優點:

    • SDK提供的JAR包約250K
    • 速度快、省流量等
    • 方便快捷的替換原生的WebView。
      初見時十分高興,遂將項目中部分原生的WebView替換爲X5WebView。並在公司的大部分機型上進行測試,效果還是比較滿意的。但是有如下缺點:
    • app啓動後需要初始化,有時候X5內核沒有初始化完成就需要打開H5頁面就會造成頁面打不開。但是初次初始化完成後,app啓動初始化時間就很短了。

    後來還是決定替換X5Webview,因爲當時某些機型又出現H5頁面無法打開的狀況。用原生的webview反倒是可以顯示。後登陸其官網尋找問題,也沒有及時得到解答。app初始化需要下載X5內核也是一大弊病,目前我沒有找到將X5內核內置到app中的方法,導致有時第一次下載App時可能體驗不是很好,尤其是當app H5頁面較多時更是突出。

  3. Crosswalk Crosswalk是一款開源的Web引擎,其基於 Chromium/Blink
    的應用運行環境,對於混合開發的輕量級應用尤爲受歡迎。 它允許Web開發者將他們的應用打包成系統的應用安裝包,獲得與本地應用一致的體驗。
    同時也支持多個應用同時使用一個Crosswalk庫的共享模式,僅當應用第一次啓動並且發現系統還沒有相應的Crosswalk庫時才提示用戶下載安裝.
    目前是大多數情況下開發者將Crosswalk直接嵌入到應用本身。在這種嵌入模式下Web應用開發者可以完全控制Crosswalk的更新。
    如果將Crosswalk直接嵌入到應用中,你會發現你的apk激增20~50M體積,這一點也是使用時的讓人猶豫不決的地方。

    但是總之,經過測試Crosswalk解決目前我遇到的問題。下面我就着重介紹一下,我在集成Crosswalk的過程中遇到的坑。至於具體集成的過程,已經有大神寫的很好的文章了,我在這裏就不再贅言。我直接將我參考的博文地址粘到後面。

集成Crosswalk遇到的問題

  1. 最低版本要求
    根據http://blog.csdn.net/sslinp/article/details/51607237文章介紹,最低版本是14,我的項目中就是14,於是就按照文章介紹集成,結果一build,報如下錯誤:

    Error:Execution failed for task:app:processArmv7DebugManifest.> Manifest merger failed with multiple errors, see logs

    查看log發現是我集成的版本要求最低版本是16。
    點擊查看最新Crosswalk版本。如下圖我集成的是目前最新的版本:
    這裏寫圖片描述

    因此大家在集成的過程中遇到類似的問題,不妨看看是不是最低版本有問題。

  2. 開啓硬件加速
    使用Crosswalk要求開啓硬件加速,及需要在AndroidManifest.xml中的android的標籤中增加如下屬性:
    android:hardwareAccelerated=”true”。
    但是如果在WebView的父佈局中增加了如下屬性:android:layerType=”hardware”。我的應用出現如下問題:Webview進入OnPause()後重新進入OnResume()後,WebView頁面先是白屏,需要等好大一會兒(我的大概兩三分鐘)才能夠重新顯示頁面。如果你也也到類似的問題,直接將android:layerType=”hardware”屬性去掉即可。

  3. apk瘦身 導入Crosswalk後,實在不能容忍app突增了好幾十兆。按照網上文章集成後,apk由原來的40多兆激增到90多兆,這是不能容忍的。(http://blog.csdn.net/itCatface/article/details/49799337
    同樣按照文章介紹的方式進行瘦身後,出現只要點擊替換後的WebView頁面,應用就崩潰的問題。通過debug,報的錯誤是找不到XWalkView這個類。只要惋惜的方尺文章介紹的瘦身方法。
    在網上查找到分別打包上線的方法,不同用戶手機處理器下載不同版本。即在build.gradle中的android閉包中聲明如下:
 productFlavors {

     armv7 {

            ndk {

                   abiFilters "armeabi-v7a"

            }

       }

    x86 {

         ndk {

            abiFilters "x86"

         }

       }

    }  

至此我的項目中Crosswalk就集成到此。希望我趟過的坑能幫助到大家。如果有不正確的地方,希望能夠指正!

另附參考文章的地址:

  1. http://blog.csdn.net/sslinp/article/details/51607237.
  2. http://blog.csdn.net/itCatface/article/details/49799337.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章