Android如何加入对开宏wml的支持

来源:互联网 发布:域名高价赎回多少钱 编辑:程序博客网 时间:2024/04/29 04:31


其实就是改makefile文件:

1,开启宏定义:

在external/webkit/Android.mk中开启宏:

  1. ifeq ($(ENABLE_WML), )   
  2.      ENABLE_WML := true   
  3. endif  

意思是:如果ENABLE_WML环境值没有被定义过,则定义它为true。 
然后在同一个文件下加入:

  1. ifeq ($(ENABLE_WML), true)   
  2.      LOCAL_CFLAGS += -DENABLE_WML=1  
  3. 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头文件的引用:

  1. LOCAL_C_INCLUDES := $(LOCAL_C_INCLUDES) \   
  2.      $(base_intermediates)/WebCore/ \   
  3.      $(base_intermediates)/WebCore/css \   
  4.      $(base_intermediates)/WebCore/html \   
  5.      $(base_intermediates)/WebCore/platform \   
  6.      $(base_intermediates)/WebCore/wml   
  7. LOCAL_C_INCLUDES := $(LOCAL_C_INCLUDES) \   
  8.      $(LOCAL_PATH)/WebCore/workers \   
  9.      $(LOCAL_PATH)/WebCore/xml \   
  10.      $(LOCAL_PATH)/WebCore/wml  

3,加入源文件的引用 
在external/webkit/WebCore/Android.mk文件中,可以看到很多源文件的引用,在文件的最末尾,加上wml的源文件。

  1. ifeq ($(ENABLE_WML), true)   
  2. LOCAL_SRC_FILES := $(LOCAL_SRC_FILES) \   
  3. wml/WMLAccessElement.cpp \   
  4. wml/WMLAElement.cpp \   
  5. wml/WMLAnchorElement.cpp \   
  6. wml/WMLBRElement.cpp \   
  7. wml/WMLCardElement.cpp \   
  8. wml/WMLDocument.cpp \   
  9. wml/WMLDoElement.cpp \   
  10. wml/WMLElement.cpp \   
  11. wml/WMLErrorHandling.cpp \   
  12. wml/WMLEventHandlingElement.cpp \   
  13. wml/WMLFieldSetElement.cpp \   
  14. wml/WMLFormControlElement.cpp \   
  15. wml/WMLGoElement.cpp \   
  16. wml/WMLImageElement.cpp \   
  17. wml/WMLImageLoader.cpp \   
  18. wml/WMLInputElement.cpp \   
  19. wml/WMLInsertedLegendElement.cpp \   
  20. wml/WMLIntrinsicEvent.cpp \   
  21. wml/WMLIntrinsicEventHandler.cpp \   
  22. wml/WMLMetaElement.cpp \   
  23. wml/WMLNoopElement.cpp \   
  24. wml/WMLOnEventElement.cpp \   
  25. wml/WMLOptGroupElement.cpp \   
  26. wml/WMLOptionElement.cpp \   
  27. wml/WMLPageState.cpp \   
  28. wml/WMLPElement.cpp \   
  29. wml/WMLPostfieldElement.cpp \   
  30. wml/WMLPrevElement.cpp \   
  31. wml/WMLRefreshElement.cpp \   
  32. wml/WMLSelectElement.cpp \   
  33. wml/WMLSetvarElement.cpp \   
  34. wml/WMLTableElement.cpp \   
  35. wml/WMLTaskElement.cpp \   
  36. wml/WMLTemplateElement.cpp \   
  37. wml/WMLTimerElement.cpp \   
  38. wml/WMLVariables.cpp   
  39. endif  

4,加入wml的css文件 
在external/webkit/WebCore/Android.derived.mk文件中,找到style_sheets := $(LOCAL_PATH)/css/html.css,在这句的下面加上:

  1. ifeq ($(ENABLE_WML), true)   
  2. style_sheets := $(style_sheets) $(LOCAL_PATH)/css/wml.css   
  3. endif  

5,生成WMLNames.h文件: 
在external/webkit/WebCore/Android.derived.mk文件中的最后,加上:

  1. #WML attribute names   
  2. ifeq ($(ENABLE_WML), true)   
  3. GEN:= $(intermediates)/WMLNames.cpp $(intermediates)/WMLNames.h  $(intermediates)/WMLElementFactory.cpp $(intermediates)/WMLElementFactory.h   
  4. $(GEN): PRIVATE_PATH := $(LOCAL_PATH)   
  5. $(GEN): PRIVATE_CUSTOM_TOOL = perl -I $(PRIVATE_PATH)/bindings/scripts $< --tags $(wml_tag) --attrs $(wml_attrs) --factory --wrapperFactory --output $(dir $@)   
  6. $(GEN): wml_tag := $(LOCAL_PATH)/wml/WMLTagNames.in   
  7. $(GEN): wml_attrs := $(LOCAL_PATH)/wml/WMLAttributeNames.in   
  8. $(GEN): $(LOCAL_PATH)/dom/make_names.pl $(wml_tag) $(wml_attrs)   
  9.      $(transform-generated-source)   
  10. LOCAL_GENERATED_SOURCES += $(GEN)   
  11. endif  

注意:$(transform-generated-source)之前是个tab键。 
6,对wml的mimeType的支持 
在DOMImplementation.cpp文件中,在external/webkit/webcore/dom目录下,找到isXMLMIMEType方法,加入:

  1. #if ENABLE(WML)   
  2.           if (mimeType =="text/vnd.wap.wml")   
  3.                return true;   
  4. #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。


原创粉丝点击