高德引擎构建与集成技术,革新之路!

时间:2024-05-28 18:00:56作者:技术经验网浏览:324

高德引擎构建及持续集成技术演进之路

在数字时代的浪潮中,地图导航应用已成为我们生活中不可或缺的一部分。作为其中的佼佼者,高德地图凭借其精准的定位和流畅的用户体验赢得了广大用户的青睐。这背后离不开强大的技术支撑,尤其是其C++引擎库的高效构建和持续集成技术。今天,我们就来聊聊高德地图在这方面的技术演进之路。

随着业务的飞速发展,高德地图客户端的功能越来越丰富,而地图渲染、导航等核心功能对性能的要求也越来越高。为了满足这些需求,高德地图团队大量采用C++语言来实现这些功能。随着代码量的不断增加,工程配置变得极其复杂,原有的构建及持续集成技术已无法满足日益增长的需求变化。

具体来说,高德地图客户端中的C++引擎库工程(以下简称引擎库)面临着以下几个主要挑战:

多团队协作:高德地图拥有多个开发团队,这些团队分布在不同的地理位置,使用不同的操作系统和IDE。如何降低不同环境下工程配置的难度,成为了团队需要解决的首要问题。

多业务线定制:引擎库需要为手机、车机、开放平台等多个业务线提供支持。由于各个业务线的需求不同,因此需要具备按功能构建的能力。

车机环境支持:车机业务作为高德地图的一个特殊业务线,其环境多为定制化,构建工具链各式各样。如何用一套构建配置满足车机的多样化构建需求,成为了团队亟需解决的问题。

源码与依赖库混杂:由于历史原因,引擎库中的源码和依赖库混杂在一起,存放在Git仓库中。这不仅导致仓库体积庞大,而且缺乏统一管理,依赖关系混乱,经常出现构建失败或运行时错误的情况。

在解决上述挑战之前,我们首先对现有的C++构建工具进行了深入的研究和分析。

Make,作为最早出现的构建工具之一,虽然有着广泛的应用,但其跨平台使用门槛较高,且对于大型项目的支持不够友好。CMake则是一个跨平台的编译、测试以及打包工具,它可以将配置文件转化为Makefile,并运行Make命令进行编译。CMake的配置文件复杂度较高,对于初学者来说有一定的学习成本。

除了传统的构建工具外,我们还关注了一些新兴的C++构建工具,如Bazel、Ninja和SCons等。这些工具各有特点,但同样存在一些不足。例如,Bazel虽然功能强大,但配置文件的编写相对复杂;Ninja则更侧重于构建过程的优化,而不太关注依赖管理等方面。

鉴于现有工具的不足和高德地图业务的特殊需求,我们决定基于CMake自建C++本地构建工具Abtor。

Abtor是一个跨平台的C++构建工具,它采用Python编写构建脚本,生成CMake配置文件,并通过内置CMake组件生成构建文件,最终产出可执行程序或库。Abtor抽象出构建描述,使得复杂的编译器和连接器对开发者透明;同时提供强大的内置功能,有效地降低了开发者编写构建脚本的难度。

在Abtor的构建流程中,开发者只需要编写简单的构建脚本,描述项目的依赖关系、构建目标等信息。然后,Abtor会根据这些信息生成CMake配置文件,并调用CMake和相应的编译器进行编译。整个过程自动化程度高,大大提高了开发效率。

在设计Abtor时,我们充分考虑了高德地图业务的特殊需求。具体来说,Abtor具有以下几个特点:

跨平台支持:Abtor支持多种操作系统和IDE,可以方便地在不同环境下进行构建。Abtor还提供了丰富的内置功能,如编译器选项配置、链接库管理等,使得开发者可以更加灵活地控制构建过程。

按需构建:Abtor支持按功能构建,开发者可以根据需要选择性地构建项目中的某个模块或功能。这大大提高了构建效率,并降低了不必要的资源浪费。

依赖管理:Abtor提供了强大的依赖管理能力,可以自动解析项目中的依赖关系,并确保在构建过程中正确地引入所需的依赖库。这有效避免了因依赖问题而导致的构建失败或运行时错误。

灵活配置:Abtor允许开发者通过配置文件或命令行参数进行灵活的配置。开发者可以根据项目的实际情况选择合适的配置选项,以满足不同的构建需求。

在实现Abtor时,我们充分利用了Python的灵活性和扩展性。通过编写Python脚本,我们可以方便地生成CMake配置文件、解析项目依赖关系、调用CMake和编译器进行编译等操作。我们还使用了一些开源库和工具来辅助实现Abtor的功能,如PyYAML用于解析配置文件、subprocess用于调用外部命令等。

除了本地构建工具Abtor外,我们还开发了持续集成工具Amap CI,以确保代码质量

文章评论