1. 程式人生 > >[chromium][browser][idea][closed] 可獨立安裝的Android4.4.2 Browser + AwContent(soft canvas方式)

[chromium][browser][idea][closed] 可獨立安裝的Android4.4.2 Browser + AwContent(soft canvas方式)

目標: Browser + webkit + chromium_webview + AwContent ...   可獨立安裝,軟體canvas方式


思路:

1)建立可執行的eclipse Browser工程

2)建立可執行的eclipse AwContent工程

3)中間加上webkit 和 chromium_webview對接層


開始:

1、設定android:hardwareAccelerated="false"

2、Browser工程中引入webkit程式碼,並修改包名

frameworks\base\core\java\android\webkit

修改包名後刪除ValueCallback和WebViewFragment,這兩個用系統的

3、Browser工程中引入chromium_webview程式碼,並修改包名

frameworks\webview\chromium\java

去掉DrawGLFunctor和GraphicsUtils

4、把AwContent工程的內容匯入Browser工程中

需要把aw的webkit引用也改一下包名

把import R資源也改一下

5、修改webkit中WebViewFactory

把路徑指到新的WebViewChromiumFactoryProvider

6、 編譯時 Multiple dex files define Lcom/google/common/annotations/Bet,因為Browser_intermediates中就有,去掉guava和jsr_305 jar就行

7、費了老長時間用來調整jar和class的衝突


執行時底層報錯,在content_main_runner.cc

    CHECK(base::i18n::InitializeICU());
    InitializeStatsTable(command_line);

估計是chromium_webview 和底層沒有匹配上

(chromium_webview用的是android4.4.2程式碼,底層chromium是最新版本,要換成chromium4.4.2的chromium_org試試)


下面是底層改為Android4.4.2 chromium程式碼的情況---------------------------

1、執行錯誤java.lang.NoClassDefFoundError: org.chromium.content.R$attr

把com.dopi.webview.chromium的ResourceProvider進行修改,註釋相關R內容


2、上面修改後Browser能夠訪問頁面了,但是解析度有點問題

修改配置,改成自適配

    <supports-screens
        android:smallScreens="true"
        android:normalScreens="true"
        android:largeScreens="true"
        android:xlargeScreens="true"
        android:anyDensity="true" >
    </supports-screens>


3、再次執行報錯

java.lang.RuntimeException: Buffer not large enough for pixels
at com.dopi.browser.Tab.updateCaptureFromBlob(Tab.java:1850)

把上面的配置中只剩下android:anyDensity="true"  就ok啦


執行情況:

這樣最大的好處是把原生瀏覽器獨立打包,能夠跨裝置運行了

瀏覽器的基本功能如長按選單,查詢等功能都可以,

因為是軟體canvas的方式,在一般的手機上執行效能還是不行,在nexus5上試了試還是ok的