Android NDK:自定义WebView从源代码编译

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

Solutions Collecting From Web of "Android NDK:自定义WebView从源代码编译"

这当然是可能的。 从源代码重buildandroid.webkit的主要困难在于缺乏正确的构build环境。 它从来不打算在目标平台之外构build,但围绕源代码的一些简单攻击使得它很容易完成。

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

基本上你必须抓住完整的源代码树,初始化一个构build环境( http://source.android.com/source/initializing.html ), make framework使内部运行时环境可用,创build一个新的开发平台,将framework.jar所有类(构build在out/target/common/obj/JAVA_LIBRARIES/framework_intermediaries/classes.jarout/target/common/obj/JAVA_LIBRARIES/framework_intermediaries/classes.jar为该平台的android.jar ,根据这个新平台构build自己的webkit包内部。

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

你还需要core_intermediariescore_intermediaries和其他的为了编译webkit ,当调用make framework时,这些都是可用的,查看构buildwebkit包时的错误,并grep out/target/common/obj/JAVA_LIBRARIES/来弄清楚哪些类包含符号。

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

一切都满意后,您将使用自己的包中的WebView类而不是android.webkit 。 如果你打算完全replaceandroid.webview – 你将不得不重新编译一个framework.jar并将其replace为system/framework/ (需要root权限)。