[图形引擎Skia之一]源码下载与编译(Ubuntu)

本文介绍了Skia图形引擎的基本概念及其功能,如点、线、路径等的绘制,图像解码支持多种格式,PDF操作及硬件加速等。此外,还详细讲解了在Ubuntu环境下如何下载和编译Skia源码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先呢,作为一个懒了好几年不写博文的程序猿,我居然有脸回来写博客,好吧,话不多说,以后我会经常更新的,希望各位多多支持一下。

1.什么是SKIA?

Skia是一个跨平台的2D的向量图形引擎,原本是商业化的项目,后在2005年被Google收购后用于Android,Chrome等等众多Google的知名项目中,沉寂一年后,Google于2007年初将这神秘的代码公之于众。如果有兴趣深入了解可以到Skia的官方网站了解更多: https://skia.org/

2.SKIA能干啥?

Skia与大名鼎鼎的Cairo一样,都是知名的图形引擎,然而不同的是Skia是向量图形引擎,Cairo则是矢量图形引擎,前者作为Android的主要图形引擎,后者则是Linux界主要的图形引擎,Skia以其清爽的代码风格,简洁的API设计,高效的绘制机制,相对简单的结构设计而深受开发者们的喜爱。

Skia的主要功能包括:

绘制:点,线,路径,三角形,矩形,多边形,不规则多边形等。
图像解码:包括PNG,JPG,JPEG,BMP,GIF,SVG等多种格式的支持。
PDF操作:PDF生成,文字转PDF。
硬件加速:Skia集成了OpenGL,Vulkan等三维绘图API,所以可以在支持这些API的相关设备上使用硬件加速以及三维图形的绘制。由于Skia的接口设计非常友好,这会让你更方便的使用相关的API接口。

好吧,当然还有很多我不知道的,这里就不多BB,我们直接进入正题。

3.SKIA源码的下载

由于国内的情况,想必各位很多时候也只能望而却步了吧,不过不用担心,我们作为程序员,有的是办法。如果各位小伙伴实在找不到梯子或者实在没办法可以这样(截至目前时间2018年2月12日):

$ git clone https://github.com/1934016928/skia_full.git

以上同步的源码为本人漂洋过海从遥远的西方扒来的(滑稽),可供直接编译(PS:如果使用本人提供的源码,请忽略以下下载步骤,源码包含depot_tools,Skia源码,编译依赖等)。

首先,你需要一台能访问googlesource.com的Linux电脑(这里以Ubuntu 16.04 LTS为例),你也可以从Ubuntu服务器上完成以下步骤然后down到本地计算机进行后续工作。

1.下载depot_tools工具包
$ git clone 'https://chromium.googlesource.com/chromium/tools/depot_tools.git'
2.设置depot_tools工具包的环境变量
## ${depot_tools} 为第一步下载的工具包的路径
## 比如我的:
## export PATH=$PATH:/home/var_rain/files/depot_tools
$ export PATH=$PATH:${depot_tools}
3.同步SKIA源码
$ git clone 'https://skia.googlesource.com/skia.git'
4.同步编译依赖
$ cd skia
## 注意,此步骤可能部分依赖第一次会下载失败,等待其他下载结束后再试一次即可
$ python tools/git-sync-deps

好了,到这里就拿到SKIA的源码了,接下来…就是激动人心的编译时刻…

4.Ubuntu下编译
1.进入Skia源码目录并安装编译所需要的相关依赖软件包
$ cd skia

## 此步骤会提示你输入管理员密码,因为脚本使用APT工具来安装相关的软件包
$ tools/install_dependencies.sh
2.根据需要,执行不同的构建配置命令
## 如果提示未找到bin/gn命令:
## 1.请检查环境变量中是否存在名为depot_tools的文件夹指向
## 2.请检查depot_tools是否为空
## 3.啥都没有?你从头开始看这篇博文吧

## 配置静态library
$ bin/gn gen out/Static

## 配置动态library
$ bin/gn gen out/Shared --args='is_component_build=true'

## 配置Debug调试
$ bin/gn gen out/Debug

## 配置Release版本
$ bin/gn gen out/Release  --args='is_debug=false'

一般来说,Skia自带有很多library,如果不强制使用自带,编译的时候就会从系统里边找,如果找不到就会报错,所以呢,我就将构建配置改了一下

## 配置静态library
$ bin/gn gen out/Static

## 配置动态library
$ bin/gn gen out/Shared --args='is_component_build=true'

## 配置Debug调试
$ bin/gn gen out/Debug --args='skia_use_system_expat=false skia_use_system_freetype2=false skia_use_system_icu=false skia_use_system_jsoncpp=false skia_use_system_libjpeg_turbo=false skia_use_system_libpng=false skia_use_system_libwebp=false skia_use_system_lua=false skia_use_system_zlib=false'

## 配置Release版本
## 由于Release编译的时候会报出返回值的警告问题,导致编译失败
## 所以此处在extra_cflags_cc中加上编译忽略参数-Wno-unused-result
$ bin/gn gen out/Release  --args='is_debug=false skia_use_system_expat=false skia_use_system_freetype2=false skia_use_system_icu=false skia_use_system_jsoncpp=false skia_use_system_libjpeg_turbo=false skia_use_system_libpng=false skia_use_system_libwebp=false skia_use_system_lua=false skia_use_system_zlib=false extra_cflags_cc=["-Wno-unused-result"]'
3.开始编译
## 根据自己的构建配置进行编译

## 编译静态library
$ ninja -C out/Static

## 编译动态library
$ ninja -C out/Shared

## 编译Debug版本
$ ninja -C out/Debug

## 编译Release版本
$ ninja -C out/Release

编译完成后会在当前目录下的out目录里生成相应的文件。

5.附录(关于我提供的源码怎么用)
(1)同步我提供的源码(全部同步下来后大概有900M的样子)
## 由于全是压缩包,所以速度会比较慢,请耐心等待
$ git clone https://github.com/1934016928/skia_full.git
(2)合并文件(由于Github但文件最大支持100M,所以分包上传)
## 进入刚刚同步的目录,然后执行以下命令
$ cat skia_source.tar.gz* > skia.tar.gz
## 当然,合并完成之后你也可以选择删掉分包,只留下一个合并后的包,以节省空间
# $ rm -rf skia_source.tar.gz*
(3)解压文件
## 解压到当前目录
$ tar -zxvf skia.tar.gz
(4)后续步骤

解压出来后会有一个files文件夹,files文件夹内包含depot_tools和skia俩个文件夹,请先将depot_tools添加到环境变量后在进行下一步操作。参考:[4.Ubuntu下编译]

如果在编译时遇到问题或者有什么疑问,请在本文下方留言,我会逐一解答(仅限在我能力范围内)。

看完博文不留言的猿猿都不是好猿猿 (っ*´Д`)っ
最后,祝大家新年快乐~~

<think>我们面对的问题是在服务器上配置鸿蒙操作系统(HarmonyOS)并搭建Flutter引擎编译开发环境。这是一个复杂的任务,需要分步骤进行。请注意,鸿蒙系统目前主要支持在物理设备或模拟器上运行,而服务器环境通常是基于x86架构的Linux系统,而鸿蒙系统主要运行在ARM架构上(尤其是OpenHarmony支持多种架构)。因此,我们需要明确: 1. 目标环境:服务器上运行的是Linux(x86或ARM)?如果是x86,我们需要通过模拟或交叉编译的方式来构建ARM架构的鸿蒙应用和Flutter引擎。 2. 鸿蒙系统:我们指的是OpenHarmony(开源版本)还是HarmonyOS(华为的商用版本)?这里我们主要讨论OpenHarmony,因为它是开源的。 3. Flutter引擎:我们需要将Flutter引擎编译成支持OpenHarmony的版本。 由于OpenHarmony本身并不直接提供在服务器上安装的操作系统镜像(它主要面向嵌入式设备和手机等),我们通常是在Linux服务器上搭建OpenHarmony的编译环境,用于交叉编译出OpenHarmony系统镜像和应用程序。同时,我们需要为Flutter引擎添加OpenHarmony的支持并进行编译。 步骤概览: 1. 准备服务器环境:确保服务器是Linux(推荐Ubuntu 20.04或类似版本),并安装必要的依赖。 2. 获取OpenHarmony源代码并搭建编译环境。 3. 为Flutter引擎添加OpenHarmony支持(可能需要修改Flutter引擎代码)。 4. 编译Flutter引擎,生成OpenHarmony平台可用的库。 5. 使用编译好的Flutter引擎构建Flutter应用并运行在OpenHarmony设备或模拟器上。 详细步骤: ### 1. 准备服务器环境 首先,确保服务器是64位Linux系统(如Ubuntu 20.04),并安装以下依赖: ```bash sudo apt update sudo apt install -y git curl python3.8 python3-pip gcc g++ make bison flex texinfo libgmp-dev libmpc-dev libmpfr-dev libexpat-dev libssl-dev libncurses-dev libffi-dev zlib1g-dev libelf-dev libtool ``` 安装Node.js(用于部分构建工具): ```bash curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash - sudo apt install -y nodejs ``` 安装hb(OpenHarmony的构建工具): ```bash pip3 install --user ohos-build ``` 将hb工具路径添加到环境变量(假设用户目录为`~`): ```bash echo 'export PATH=$PATH:~/.local/bin' >> ~/.bashrc source ~/.bashrc ``` ### 2. 获取OpenHarmony源代码并编译 参考OpenHarmony官方文档(以OpenHarmony 3.2 Beta为例): ```bash mkdir openharmony cd openharmony repo init -u https://gitee.com/openharmony/manifest.git -b OpenHarmony-3.2-Beta --no-repo-verify repo sync -c repo forall -c 'git lfs pull' ``` 然后,配置编译环境(以标准系统为例,如rk3568开发板): ```bash ./build/prebuilts_download.sh hb set # 在出现的界面中选择目标平台,例如:standard hb build ``` 编译过程可能需要较长时间,编译完成后会生成镜像文件,可以烧录到开发板上。 ### 3. 为Flutter引擎添加OpenHarmony支持 Flutter官方尚未支持OpenHarmony,因此需要社区或自行添加支持。目前已有一些开源项目(如[OpenHarmony-SIG/flutter_engine](https://gitee.com/openharmony-sig/flutter_engine))在尝试适配。 步骤: - 克隆Flutter引擎源码(注意分支,例如对应Flutter 3.0的引擎): ```bash git clone https://github.com/flutter/engine.git cd engine git checkout <对应分支> ``` - 应用OpenHarmony支持的补丁(如果有现成的适配项目,可以参考其步骤)。 - 如果没有现成的适配,需要自行修改引擎代码,包括: - 添加OpenHarmony作为目标平台(修改构建系统,添加TOOLCHAIN等)。 - 适配Dart VM在OpenHarmony上的运行。 - 适配Skia图形库在OpenHarmony上的渲染后端(如使用EGL)。 - 适配平台插件(如文本输入、窗口管理、事件等)。 这是一个复杂的过程,需要深入了解Flutter引擎和OpenHarmony系统。 ### 4. 编译Flutter引擎 在修改好引擎代码后,进行编译编译Flutter引擎需要安装必要的依赖和工具(如depot_tools)。 安装depot_tools: ```bash git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git export PATH="$PATH:$(pwd)/depot_tools" ``` 生成构建配置(以release模式为例): ```bash ./tools/gn --runtime-mode=release --target-os=ohos --arm-float-abi=hard --target-cpu=arm --ohos-api-level=8 --ohos-ndk-path=<OpenHarmony SDK路径> --ohos-sysroot=<OpenHarmony SDK中的sysroot路径> ``` 然后进行编译: ```bash ninja -C out/ohos_release ``` 编译成功后,会生成`libflutter.so`等库文件。 ### 5. 使用编译好的Flutter引擎构建Flutter应用 在Flutter应用中,需要指定使用我们编译引擎。可以通过设置环境变量: ```bash export FLUTTER_ENGINE=<引擎路径>/src export FLUTTER_ROOT=<Flutter SDK路径> ``` 然后,在Flutter项目中,运行: ```bash flutter run --local-engine=ohos_release ``` 注意:这需要Flutter工具链支持OpenHarmony目标。因此,可能还需要修改Flutter工具(`flutter_tools`)以添加OpenHarmony平台。 ### 注意事项 - 整个过程非常复杂,且OpenHarmony和Flutter都在不断更新,可能遇到各种问题。 - 目前社区对Flutter在OpenHarmony上的支持尚不完善,建议关注开源社区(如Gitee上的OpenHarmony-SIG)的最新进展。 - 如果只是想在OpenHarmony上运行Flutter应用,也可以考虑使用已经适配好的第三方解决方案(如[arkui_flutter](https://gitee.com/openharmony-sig/arkui_flutter)),它们提供了预编译引擎和修改过的Flutter工具链。 ### 引用说明 [^1]: Flutter是由Google开发的开源UI工具包,支持跨平台应用开发。在OpenHarmony上运行Flutter应用需要将Flutter引擎适配到OpenHarmony系统。 [^2]: 日志展示了在鸿蒙设备上安装和运行应用的命令,这些命令对于调试在OpenHarmony上运行的Flutter应用可能有参考价值。 §§相关问题§§ 1. 如何为OpenHarmony交叉编译Flutter引擎? 2. 在OpenHarmony上运行Flutter应用需要哪些步骤? 3. 如何解决在OpenHarmony上编译Flutter引擎时遇到的依赖问题?</think>### 在服务器上配置鸿蒙系统并搭建 Flutter 引擎编译环境 #### 1. **准备鸿蒙开发环境** - **安装依赖工具** 在 Linux 服务器(推荐 Ubuntu 20.04+)安装基础编译工具: ```bash sudo apt update sudo apt install git python3.8 python3-pip curl openjdk-11-jdk pip3 install setuptools ``` - **配置鸿蒙编译工具(hb)** 安装鸿蒙专用构建工具: ```bash pip3 install ohos-build echo 'export PATH=$PATH:~/.local/bin' >> ~/.bashrc source ~/.bashrc ``` #### 2. **获取鸿蒙源代码** - **下载 OpenHarmony 源码**(以 3.2 Release 为例): ```bash repo init -u https://gitee.com/openharmony/manifest.git -b OpenHarmony-3.2-Release repo sync -c repo forall -c 'git lfs pull' ``` - **配置设备树**(以模拟器为例): ```bash ./build/prebuilts_download.sh hb set # 选择 `product` -> `qemu-mini-system-demo` ``` #### 3. **编译鸿蒙系统镜像** ```bash hb build # 生成镜像在 out/ohos-arm-release/packages/phone/images/ ``` 编译完成后可通过 QEMU 启动验证: ```bash ./qemu-run -b # 启动鸿蒙模拟器[^1] ``` #### 4. **搭建 Flutter 引擎编译环境** - **安装 Flutter SDK**: ```bash git clone https://github.com/flutter/flutter.git -b stable echo 'export PATH="$PATH:$(pwd)/flutter/bin"' >> ~/.bashrc source ~/.bashrc flutter doctor ``` - **配置鸿蒙平台支持**: 修改 Flutter 引擎代码支持鸿蒙: ```bash cd engine/src git apply ohos_support.patch # 需社区提供的鸿蒙适配补丁 ``` - **编译 Flutter 引擎**: ```bash ./flutter/tools/gn --runtime-mode=release --target-os=ohos --ohos-api-level=8 ninja -C out/ohos_release ``` #### 5. **集成 Flutter 应用到鸿蒙** - **创建 Flutter 鸿蒙项目**: ```dart flutter create --platforms=ohos my_app cd my_app ``` - **构建鸿蒙 HAP 安装包**: ```bash flutter build ohos --target-platform=arm64 ``` - **部署到鸿蒙设备**: ```bash hdc file send build/ohos/release/entry-debug-unsigned.hap /sdcard/ hdc shell bm install -p /sdcard/entry-debug-unsigned.hap # 安装应用[^2] ``` ### 关键注意事项 1. **架构兼容性** 服务器需为 ARM64 架构(或使用交叉编译),x86 服务器需配置 QEMU 虚拟化: ```bash sudo apt install qemu-system-arm ``` 2. **依赖冲突解决** 若遇 Python 版本冲突,使用 `update-alternatives` 管理多版本: ```bash sudo update-alternatives --config python3 ``` 3. **社区资源参考** - OpenHarmony SIG 的 Flutter 适配项目:[gitee.com/openharmony-sig/flutter_engine](https://gitee.com/openharmony-sig/flutter_engine) - 鸿蒙 Flutter 插件模板:[ohos_flutter](https://gitee.com/openharmony-sig/ohos_flutter) ### 验证环境 ```mermaid graph LR A[Ubuntu Server] --> B[OpenHarmony 3.2] B --> C[Flutter Engine] C --> D[QEMU/Real Device] D --> E[Flutter App on HarmonyOS] ``` > **提示**:首次编译 Flutter 引擎需 2-4 小时,建议使用 >=32GB RAM 服务器。完整流程需社区补丁支持,持续关注 [OpenHarmony SIG](https://gitee.com/openharmony-sig) 更新。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值