[图形引擎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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,392评论 5 470
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,258评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,417评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,992评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,930评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,199评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,652评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,327评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,463评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,382评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,432评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,118评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,704评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,787评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,999评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,476评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,057评论 2 341

推荐阅读更多精彩内容