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

P5m*_*sic 9 c sdk android compilation webview

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

sou*_*kah 8

这当然是可能的.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包和grep的out/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权限).

  • 这适用于你们中的任何人吗? (3认同)