【基础】嵌入式浏览器移植基本要素

2019-07-12 20:29发布

前言:本文以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 尝试运行浏览器