我的目标是在安卓系统中创建一个修改过的WebView (称之为WebViewCustom),供我个人在我的应用程序中使用。WebView是基于WebKit的,所以我需要用C通过NDK的方式来编译它。我现在对参与开源安卓项目不感兴趣,所以我只需要能够编译WebView的原始C源代码,并将其用作我的安卓应用程序中的自定义控件( SDK和NDK都是该应用程序的可能环境)。我认为没有那些我不感兴趣的GIT WebKit的东西是可能的,但我不是Android和WebKit项目的专家。是否可以只编辑和编译WebView代码并将其作为新控件放入我的应用程序中?你能告诉我这项任务的主要步骤吗?
发布于 2012-07-27 03:56:43
这当然是可能的。从源代码重建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_intermediaries、bouncycastle_intermediaries和其他工具来编译webkit,这些都在调用make framework时可用,在构建webkit包时查看错误并对out/target/common/obj/JAVA_LIBRARIES/进行grep以找出哪些类包含这些符号。
然而,这还不是全部,该包使用了libwebcore.so,它向android.webkit包公开了本机方法;这必须将所有本机方法绑定注册到您的新包名(在external/webkit/WebKit/android/jni中),在没有预链接的情况下重新编译(make libwebcore),并将应用程序打包为本机库。
在一切都令人满意之后,您将使用您自己的包中的WebView类,而不是android.webkit包。如果您打算完全替换android.webview -您必须重新编译framework.jar并在system/framework/中替换它(需要根权限)。
https://stackoverflow.com/questions/10717257
复制相似问题