android2.3怎么加入对wml的支持
【原创】android2.3如何加入对wml的支持
其实就是改makefile文件:
1,开启宏定义:
在external/webkit/Android.mk中开启宏:
意思是:如果ENABLE_WML环境值没有被定义过,则定义它为true。
然后在同一个文件下加入:
这里的-D编译选项是用来定义代码中的宏的,即设置c/c++中的DENABLE_WML宏的值为1,这就相当于在代码中#define ENABLE_WML 1。
小提示:JavaScriptCore/wtf/Platform.h这里有很多#defineENABLE_XXX的宏,可以修改一些宏的值来配置。这里看一下有没有ENABLE_WML,如果没有,就加
#define ENABLE_WML 1;
2,包含头文件
在external/webkit/Android.mk文件中,你可以看到很多LOCAL_C_INCLUDES变量。
在两个地方加入对wml头文件的引用:
注意红色部分是不一样的。
3,加入源文件的引用
在external/webkit/WebCore/Android.mk文件中,可以看到很多源文件的引用,在文件的最末尾,加上wml的源文件。
4,加入wml的css文件
在external/webkit/WebCore/Android.derived.mk文件中,找到style_sheets := $(LOCAL_PATH)/css/html.css,在这句的下面加上:
5,生成WMLNames.h文件:
在external/webkit/WebCore/Android.derived.mk文件中的最后,加上:
注意:$(transform-generated-source)之前是个tab键。
6,对wml的mimeType的支持
在DOMImplementation.cpp文件中,在external/webkit/webcore/dom目录下,找到isXMLMIMEType方法,加入:
7,修改framework
在framework/base/core/java/android/webkit/LoadListener.java中的handleHeaders方法,找到
else if (mMimeType.equals("text/vnd.wap.wml"));把里面处理成html的形式改成mMimeType = "text/vnd.wap.wml";
经过以上步骤,编译webkit,最好在编译webkit之前,执行一下rm ../../out/target/product/dkb/obj/STATIC_LIBRARIES/libwebcore_intermediates/ -rf 命令,编译framework。
其实就是改makefile文件:
1,开启宏定义:
在external/webkit/Android.mk中开启宏:
ifeq ($(ENABLE_WML), ) ENABLE_WML := true endif
意思是:如果ENABLE_WML环境值没有被定义过,则定义它为true。
然后在同一个文件下加入:
ifeq ($(ENABLE_WML), true) LOCAL_CFLAGS += -DENABLE_WML=1 endif
这里的-D编译选项是用来定义代码中的宏的,即设置c/c++中的DENABLE_WML宏的值为1,这就相当于在代码中#define ENABLE_WML 1。
小提示:JavaScriptCore/wtf/Platform.h这里有很多#defineENABLE_XXX的宏,可以修改一些宏的值来配置。这里看一下有没有ENABLE_WML,如果没有,就加
#define ENABLE_WML 1;
2,包含头文件
在external/webkit/Android.mk文件中,你可以看到很多LOCAL_C_INCLUDES变量。
在两个地方加入对wml头文件的引用:
LOCAL_C_INCLUDES := $(LOCAL_C_INCLUDES) \ $(base_intermediates)/WebCore/ \ $(base_intermediates)/WebCore/css \ $(base_intermediates)/WebCore/html \ $(base_intermediates)/WebCore/platform \ $(base_intermediates)/WebCore/wml LOCAL_C_INCLUDES := $(LOCAL_C_INCLUDES) \ $(LOCAL_PATH)/WebCore/workers \ $(LOCAL_PATH)/WebCore/xml \ $(LOCAL_PATH)/WebCore/wml
注意红色部分是不一样的。
3,加入源文件的引用
在external/webkit/WebCore/Android.mk文件中,可以看到很多源文件的引用,在文件的最末尾,加上wml的源文件。
ifeq ($(ENABLE_WML), true) LOCAL_SRC_FILES := $(LOCAL_SRC_FILES) \ wml/WMLAccessElement.cpp \ wml/WMLAElement.cpp \ wml/WMLAnchorElement.cpp \ wml/WMLBRElement.cpp \ wml/WMLCardElement.cpp \ wml/WMLDocument.cpp \ wml/WMLDoElement.cpp \ wml/WMLElement.cpp \ wml/WMLErrorHandling.cpp \ wml/WMLEventHandlingElement.cpp \ wml/WMLFieldSetElement.cpp \ wml/WMLFormControlElement.cpp \ wml/WMLGoElement.cpp \ wml/WMLImageElement.cpp \ wml/WMLImageLoader.cpp \ wml/WMLInputElement.cpp \ wml/WMLInsertedLegendElement.cpp \ wml/WMLIntrinsicEvent.cpp \ wml/WMLIntrinsicEventHandler.cpp \ wml/WMLMetaElement.cpp \ wml/WMLNoopElement.cpp \ wml/WMLOnEventElement.cpp \ wml/WMLOptGroupElement.cpp \ wml/WMLOptionElement.cpp \ wml/WMLPageState.cpp \ wml/WMLPElement.cpp \ wml/WMLPostfieldElement.cpp \ wml/WMLPrevElement.cpp \ wml/WMLRefreshElement.cpp \ wml/WMLSelectElement.cpp \ wml/WMLSetvarElement.cpp \ wml/WMLTableElement.cpp \ wml/WMLTaskElement.cpp \ wml/WMLTemplateElement.cpp \ wml/WMLTimerElement.cpp \ wml/WMLVariables.cpp endif
4,加入wml的css文件
在external/webkit/WebCore/Android.derived.mk文件中,找到style_sheets := $(LOCAL_PATH)/css/html.css,在这句的下面加上:
ifeq ($(ENABLE_WML), true) style_sheets := $(style_sheets) $(LOCAL_PATH)/css/wml.css endif
5,生成WMLNames.h文件:
在external/webkit/WebCore/Android.derived.mk文件中的最后,加上:
#WML attribute names ifeq ($(ENABLE_WML), true) GEN:= $(intermediates)/WMLNames.cpp $(intermediates)/WMLNames.h $(intermediates)/WMLElementFactory.cpp $(intermediates)/WMLElementFactory.h $(GEN): PRIVATE_PATH := $(LOCAL_PATH) $(GEN): PRIVATE_CUSTOM_TOOL = perl -I $(PRIVATE_PATH)/bindings/scripts $< --tags $(wml_tag) --attrs $(wml_attrs) --factory --wrapperFactory --output $(dir $@) $(GEN): wml_tag := $(LOCAL_PATH)/wml/WMLTagNames.in $(GEN): wml_attrs := $(LOCAL_PATH)/wml/WMLAttributeNames.in $(GEN): $(LOCAL_PATH)/dom/make_names.pl $(wml_tag) $(wml_attrs) $(transform-generated-source) LOCAL_GENERATED_SOURCES += $(GEN) endif
注意:$(transform-generated-source)之前是个tab键。
6,对wml的mimeType的支持
在DOMImplementation.cpp文件中,在external/webkit/webcore/dom目录下,找到isXMLMIMEType方法,加入:
#if ENABLE(WML) if (mimeType =="text/vnd.wap.wml") return true; #endif
7,修改framework
在framework/base/core/java/android/webkit/LoadListener.java中的handleHeaders方法,找到
else if (mMimeType.equals("text/vnd.wap.wml"));把里面处理成html的形式改成mMimeType = "text/vnd.wap.wml";
经过以上步骤,编译webkit,最好在编译webkit之前,执行一下rm ../../out/target/product/dkb/obj/STATIC_LIBRARIES/libwebcore_intermediates/ -rf 命令,编译framework。