2012-05-23 45 views
9

我的目标是在Android中为我的个人应用程序创建WebView的修改版本(称为WebViewCustom)。 WebView是基于WebKit的,所以我需要通过NDK以C编译它。我现在不想参与开源Android项目,所以我需要的是能够编译WebView的原始C源代码并将其用作我的Android应用程序中的自定义控件(SDK和NDK都是可能的环境为应用程序)。我认为没有GIT WebKit所有我不感兴趣的东西是可能的,但我不是Android和WebKit项目的专家。是否可以编辑和编译WebView代码并将其作为新控件放入我的应用程序中?你能告诉我这个任务的主要步骤吗?Android NDK:从源代码编译定制WebView

+3

您是否设法让此工作?我对这种方法也很感兴趣。 –

回答

7

这当然是可能的。从源头重建android.webkit的主要困难在于缺乏正确的构建环境。它从未打算在目标平台之外构建,但围绕源代码的几个简单黑客使得它很容易完成。

首先,整个android.webkit包业务必须重新命名,原因很明显,因为android.webkit.WebView类在运行时已经可用。例如,在所有frameworks/base/core/java/android/webkit树上使用sed

基本上,你必须抓住完整的源代码树,初始化构建环境(点击此处了解详情http://source.android.com/source/initializing.html),make framework使内部运行时环境中可用,创建一个新的发展平台,从framework.jar更换所有类(建筑它的后在out/target/common/obj/JAVA_LIBRARIES/framework_intermediaries/classes.jar)转换为android.jar的平台,建立自己的webkit包对这个包含内部的新平台。

查看https://devmaze.wordpress.com/2011/01/18/using-com-android-internal-part-1-introduction/以获取有关获取可用于开发目的的内部运行时的更多信息。

您还需要core_intermediariesbouncycastle_intermediaries等人为了编译webkit,这些都是可用的,当被调用make framework,看看错误构建webkit包时和grep的out/target/common/obj/JAVA_LIBRARIES/找出哪些类包含的符号。

然而,这并不是全部,但是,该软件包使用libwebcore.so,它将本机方法暴露给android.webkit包;这将不得不将所有原生方法绑定注册到您的新软件包名称(在external/webkit/WebKit/android/jni中),并重新编译,而无需预先链接make libwebcore),并将其作为本机库与您的应用程序一起打包。

一切都满意后,您可以使用自己的包中的WebView类而不是android.webkit。如果您打算完全替换android.webview - 您必须重新编译framework.jar并将其替换为system/framework/(需要root权限)。

+3

为你们任何人做过这项工作吗? –

+0

现在的虚假信息。您不必在/ system /中编译framework.jar。正如我看到海豚浏览器使用基于Android的自定义WebView,但它们不会触摸系统。 – Lazy

+0

@Lazy我没有说你必须编译framework.jar才能使用自定义的WebView,如果你打算替换默认的WebView(需要根或自定义分发),你只能这样做。 – soulseekah