Android NDK:从源代码编译自定义WebView
我的目标是在Android中创建一个WebView的修改版本(称为WebViewCustom),供我个人在应用程序中使用。WebView是基于WebKit的,所以我需要用NDK在C中编译它。我现在对参与开源Android项目不感兴趣,所以我需要的只是能够编译WebView的原始C源代码,并将其用作Android应用程序中的自定义控件(SDK和NDK都是应用程序的可能环境)。我认为如果没有我不感兴趣的GitWebKit,这是可能的,但我不是Android和WebKit项目的专家。是否可以编辑和编译WebView代码并将其作为新控件放入我的应用程序中?你能告诉我这项任务的主要步骤吗?这当然是可能的。从源代码重建android.webkit的主要困难在于缺乏正确的构建环境。它从未打算在目标平台之外构建,但是围绕源代码的几个简单的hack使得它非常容易实现 首先,由于显而易见的原因,整个Android NDK:从源代码编译自定义WebView,android,c,sdk,compilation,webview,Android,C,Sdk,Compilation,Webview,我的目标是在Android中创建一个WebView的修改版本(称为WebViewCustom),供我个人在应用程序中使用。WebView是基于WebKit的,所以我需要用NDK在C中编译它。我现在对参与开源Android项目不感兴趣,所以我需要的只是能够编译WebView的原始C源代码,并将其用作Android应用程序中的自定义控件(SDK和NDK都是应用程序的可能环境)。我认为如果没有我不感兴趣的GitWebKit,这是可能的,但我不是Android和WebKit项目的专家。是否可以编辑和编译
android.webkit
包业务必须重新命名,因为android.webkit.WebView
类在运行时已经可用。例如,在所有框架/base/core/java/android/webkit
树上使用sed
基本上,您必须获取完整的源代码树,初始化构建环境(此处有更多信息),makeframework
使内部运行时环境可用,创建新的开发平台,替换framework.jar中的所有类(将它构建到平台的out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes.jar
)中之后,针对这个包含内部构件的新平台构建您自己的webkit
包
有关获取可用于开发目的的内部运行时的更多信息,请查看
为了编译webkit
,您还需要core\u中介体
,bouncycastle\u中介体
和其他中介体,这些都可以在调用make framework
时使用,在构建webkit
包时查看错误,并grepout/target/common/obj/JAVA\u库
to找出哪些类包含符号
然而,这还不是全部,该包使用libwebcore.so
将本机方法公开给android.webkit
包;这需要将所有本机方法绑定注册到您的新包名(在external/webkit/webkit/android/jni
)中,并且无需预链接即可重新编译(makelibwebcore
)并将应用程序打包为本机库
在一切都满意之后,您将使用自己包中的WebView
类,而不是android.webkit
类。如果您打算完全替换android.WebView
,您将不得不重新编译framework.jar
并在system/framework/
中替换它(需要root权限).你成功地让它工作了吗?我对这种方法也很感兴趣。现在的信息是错误的。你不必在/system/中编译framework.jar。我看到Dolphin浏览器使用的是基于Android的自定义WebView,但它们不涉及系统。@Lazy我没有说你必须编译framework.jar才能使用自定义WebView,你知道吗只有在您打算替换默认WebView(需要根或自定义发行版)时,才必须这样做。