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