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




猜你喜欢

转载自blog.csdn.net/dopi/article/details/27675453