前言:本文以chrome为例介绍了浏览器移植的基本步骤和要素。
1 浏览器的内核是什么
我们知道chrome的浏览器内核是webkit,那么要做浏览器移植第一步就是要研究webkit的基本构架。
2 浏览器的编译
2.1 硬件支持的 浏览器的编译工具链
浏览器的编译器一般都是一要依赖硬件来决定。板子的编译器就是浏览器的编译器。只不过,要注意的是浏览器有些功能的定义和编译器已经板子的硬件支持有关。
举例,ARM cotext A9的多媒体功能在芯片级别上是可选的,那么相对的编译选项:NEON在做编译的时候就不能使能,否则会报指令错误。
2.2 浏览器需要的开源库有哪些
浏览器相关的开源库有libdierectfb,libpango,libcairo,libfontconfig,libfreetype,libskia等,大多数都是和浏览器的渲览,graphic引擎,font字库和管理等等。
这些开源库有些是有license的要求的,根据浏览器的应用场景去选择你需要的开源库。
3 了解浏览器运行的基本环境配置
浏览器的基本环境设定,包括浏览器需要的工作目录,配置目录。
比如 cookie的目录,lib的加载目录,jsion的配置目录,用户的配置目录,应用的装载目录。
4 了解浏览器自带的测试案例
浏览器的运行之前,需要运行浏览器给到测试代码,以确定浏览器运行的环境条件,配置条件等是否符合。
通过编译
Chrome的测试案例,base_unittests
make tg=base_unittests
可以生成一个基础测试文件,运行后,回生成对应的测试报告,然后,按照测试报告逐个去解决:
Value of: from_native.value()
Actual: "xEFxBCxA1xEFxBCxA2xEFxBCxA3.txt"
Expected: from_utf8.value()
Which is: ""
[ FAILED ] FilePathTest.FromUTF8Unsafe_And_AsUTF8Unsafe (3 ms)
[----------] 1 test from FilePathTest (3 ms total)
[----------] Global test environment tear-down
[==========] 1 test from 1 test case ran. (5 ms total)
[ PASSED ] 0 tests.
[ FAILED ] 1 test, listed below:
[ FAILED ] FilePathTest.FromUTF8Unsafe_And_AsUTF8Unsafe
谷歌浏览器自带测试程序运行举例如下,
[1622/1622] FilePathTest.FromUTF8Unsafe_And_AsUTF8Unsafe (3 ms)
37 tests failed:
FilePathTest.FromUTF8Unsafe_And_AsUTF8Unsafe
FileProxyTest.SetTimes
FileUtilProxyTest.Touch
FileUtilTest.ChangeDirectoryPermissionsAndEnumerate
FileUtilTest.ChangeFilePermissionsAndRead
FileUtilTest.ChangeFilePermissionsAndWrite
FileUtilTest.GetShmemTempDirTest
JSONFileValueSerializerTest.NoWhitespace
JSONFileValueSerializerTest.Roundtrip
JSONFileValueSerializerTest.RoundtripNested
JSONReaderTest.ReadFromFile
JsonPrefStoreTest.AlternateFile
JsonPrefStoreTest.AlternateFileDNE
JsonPrefStoreTest.AlternateFileIgnoredWhenMainFileExists
JsonPrefStoreTest.AsyncNonExistingFile
JsonPrefStoreTest.Basic
JsonPrefStoreTest.BasicAsync
JsonPrefStoreTest.BasicAsyncWithAlternateFile
JsonPrefStoreTest.InvalidFile
JsonPrefStoreTest.NonExistentFile
JsonPrefStoreTest.NonExistentFileAndAlternateFile
JsonPrefStoreTest.PreserveEmptyValues
JsonPrefStoreTest.ReadAsyncWithInterceptor
JsonPrefStoreTest.ReadWithInterceptor
JsonPrefStoreTest.RemoveClearsEmptyParent
OutOfMemoryDeathTest.ViaSharedLibraries
PathServiceTest.Get
ProcessUtilTest.LaunchProcess
RTLTest.WrapPathWithLTRFormatting
ReadOnlyFileUtilTest.ContentsEqual
ReadOnlyFileUtilTest.TextContentsEqual
SharedMemoryProcessTest.Tasks
SharedMemoryTest.AnonymousExecutable
SysStrings.SysNativeMBAndWide
SysStrings.SysNativeMBToWide
SysStrings.SysWideToNativeMB
SystemMetrics2Test.GetSystemMemoryInfo
5 尝试运行浏览器