在Android应用程序中embeddedChromium或Webkit
对于我们的Android应用程序,我们想embedded我们自己的浏览器/渲染引擎。 Webkit / Chromium是最有可能的select。 我们正在寻找类似于WebView的东西,本质上是,但是由我们控制的浏览器(版本)支持。
背景
我们的应用程序的重要组成部分包括视图中embedded的网页片段(由应用程序本身提供)。 我们尽可能透明地做到这一点(从视觉/用户体验的angular度来看)。 到目前为止,我们一直在使用WebView来实现这个function,而且这个function在很大程度上起作用 除非没有。
一些手机厂商不幸地决定调整标准的Android浏览器在这里和那里。 在某些情况下,这会打破我们的应用程序,或者使得我们embedded一个更明显的网页。
我们的想法
我们希望有一个类似于WebView的组件,但是我们可以控制使用什么版本的Webkit / Chromium(或其他渲染引擎)。 这不一定是最新和最好的版本。 更重要的是,我们可以让我们的应用程序在尽可能多的Android设备上保持一致 。
至今
迄今为止我们的研究还没有发现任何有用的东西。 我们已经发现了三次将Webkit移植到NDK的尝试(Android版裸露的Webkit端口使用了NDK中不具备的function,因此不适用于应用程序开发人员):
- 公司100的Webkit Android端口 (两年以上没有更新)
- mogo浏览器 (他们的最后一次修改是删除所有的源代码)
- NDK Webkit (由其作者正式放弃)
看着StackOverflow,我们也发现了一些类似的问题,其中大部分是通过指向WebView来解决的(我们已经这样做了,而且还不够好)
- Android的Webkit组件
- 在我的应用程序中embedded基本的WebKit + V8
- 使用Android应用程序embedded更新版本的WebKit
我们目前正在调查Android的Chromium (或其中的一部分)是否可以变成我们的应用程序可以使用的库。 有没有其他人做到这一点?
更新
看看GitHub上的chromeview项目(已接受的答案)后,我们决定等待Google在未来的Android设备上发布基于Chrome的WebView。 Chromium渲染引擎变得相当大(〜40MB),这不会为实际的应用程序留下太多的空间:(
pwnall / chromeview·GitHub https://github.com/pwnall/chromeview
ChormeView像Android的WebView一样工作,但由最新的Chromium代码支持。
你应该都看看人行横道项目。 由英特尔赞助,并积极开发。 他们拉动Chromium来源,并承诺在6周内在Crosswalk提供所有新的Chromiumfunction。
Crosswalk是一个雄心勃勃的HTML5应用程序的Web运行时。 它提供了现代浏览器的所有function,并结合深层设备集成和用于添加本机扩展的API。 它特别适合移动设备。
Crosswalk在ARM和Intel架构上支持Android 4.0及更高版本。
在一个小时内find这个项目,我的Cordova / Phonegap应用程序运行在带有Crosswalk的Android手机上。 我很高兴我不必调整我的Javascript代码,以尊重(4.4前)android.webkit.WebView的缺点。
没有WebKit有一个GeckoView 。 当然,它为这个项目增加了20Mb的库存。
我试图使用最新的Chromium代码版本来构build自定义的WebView,并且它是成功的。
我现在要给我的方法,但不是在这里的源代码。
最终,自定义WebView库的大小约为30MB,对于一些小应用来说相当大。 但是这很棒,因为可以从Android 4.0完美支持。
以下是我的方法:
-
获取铬的源代码并构buildweb_view_apk(AndroidWebViewtestingshell)按照此说明https://www.chromium.org/developers/how-tos/android-build-instructions
-
使用apktool来反编译Aw Shell上面的apk文件。 https://ibotpeaches.github.io/Apktool/
-
用res,lib文件夹创build你的项目和反编译项目一样。
-
清单文件位于/ src / android_webview / test / src / org / chromium / shell中
-
src文件夹:您可以在铬项目源代码中find与反编译项目的smali文件夹中的文件相对应的类。
我稍后会更新我的代码,但是如果不想等待,可以尝试我的指南。
我会考虑Chrome自定义标签: