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

由于常年混迹于CSDN,一个偶然的机会发现了的界面非常简洁友好,所以准备把CSDN上的文章迁移到,希望各位看官多多支持一下。

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/scvax/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/scvax/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下编译]

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

为了给各位提供方便,这里提供编译好的库,包括:
Linux (x64)
Android (armeabi-v7a , arm64-v8a , x86 , x86_64)
下载链接: https://pan.baidu.com/s/1JpPC4P0BbCdUH6eoiJba4Q
提取码: xjyq

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

你可能感兴趣的:([图形引擎Skia之一]源码下载与编译(Ubuntu))