我的目标是在 Android 中创建 WebView 的修改版本(称为 WebViewCustom),供我个人在我的应用程序中使用。WebView 是基于 WebKit 的,所以我需要通过 NDK 在 C 中编译它。我现在对参与开源的Android项目没有兴趣,所以我的需要只是能够编译WebView的原始C源并将其用作我的Android应用程序中的自定义控件(SDK和NDK都是可能的环境)申请)。我认为没有我不感兴趣的所有 GIT WebKit 东西是可能的,但我不是 Android 和 WebKit 项目的专家。是否可以只编辑和编译 WebView 代码并将其作为新控件放入我的应用程序中?你能告诉我这个任务的主要步骤吗?
1 回答
这当然是可能的。从源代码重建的主要困难android.webkit
在于缺乏正确的构建环境。它从未打算在目标平台之外构建,但是围绕源代码进行了一些简单的黑客攻击,使其非常容易实现。
首先,android.webkit
出于显而易见的原因,必须重命名整个包业务,因为android.webkit.WebView
在运行时已经可以使用一个类。sed
例如,在所有frameworks/base/core/java/android/webkit
树上使用。
基本上你必须获取完整的源代码树,初始化构建环境(更多信息在这里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_intermediaries
和bouncycastle_intermediaries
其他人为了编译webkit
,这些都在make framework
调用时可用,在构建包时查看错误webkit
并用 grepout/target/common/obj/JAVA_LIBRARIES/
找出哪些类包含符号。
然而,这还不是全部,包使用libwebcore.so
的将本机方法暴露给android.webkit
包;这将必须将所有本机方法绑定注册到您的新包名称 (in external/webkit/WebKit/android/jni
) 并在没有预链接( make libwebcore
) 的情况下重新编译并与您的应用程序一起打包为本机库。
在一切都满意之后,您将使用您自己WebView
的包中的自己的类而不是那个android.webkit
。如果您打算android.webview
完全替换 - 您必须重新编译framework.jar
并在内部替换它system/framework/
(需要 root 权限)。