本文主要对从安卓系统源码中抽取出WebView相关源码进行单独编译的流程进行说明。
编译流程说明
由于WebView包含两个部分,一部分是上层的Java代码,包括若干Java类,用于对外提供接口;另一部分是下层的C++代码,包括两个so库(libwebcore.so和libchromium_net.so),用于网页的解析和渲染。两个部分之间通过JNI进行交互。
因此,编译WebView也需要分成两部分,一部分是编译Java代码,另一部分是将C++代码编译成so库。另外,由于WebView的Java代码中会使用到很多系统的隐藏API,所以我们还需要编译安卓系统,并从中获取几个jar包。
编译Java代码
首先,我们需要下载并编译任意一个版本的安卓系统源码,具体步骤可以参见《下载安卓系统源码教程》和《安卓系统源码编译教程》。
完成编译后,我们可以使用Eclipse(不能使用Intellij IDEA,因为之后添加library的时候无法设置为system library)新建一个Android工程,在src目录下创建一个android.webkit2的包。然后将源码目录下的frameworks/base/core/java/android/webkit目录下的所有文件拷贝到新创建的包中。
由于其中有一个类是编译之后生成的,所以我们还需要从编译完的源码目录out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/src/core/java/android/webkit中将EventLogTags.java类也拷贝到新建的包中。
接下来,我们需要在工程中加入包含系统隐藏API的jar包,将以下三个jar包重命名(名称随意)后拷贝到工程的libs目录下:
out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes.jar
out/target/common/obj/JAVA_LIBRARIES/core_intermediates/classes.jar
out/target/common/obj/JAVA_LIBRARIES/bouncycastle_intermediates/classes.jar
在Eclipse中打开工程的Properties->Java Build Path->Libraries->Add Library->User Library,点击下一步,选择User Libraries...,选择New,随便输入一个名字,将System library选上(重要),选择OK。选中刚刚新建的User Library,选择Add JARs,