[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的