由于常年混跡于CSDN,一個(gè)偶然的機(jī)會發(fā)現(xiàn)了簡書的界面非常簡潔友好,所以準(zhǔn)備把CSDN上的文章遷移到簡書,希望各位看官多多支持一下。
1.什么是SKIA?
Skia是一個(gè)跨平臺的2D的向量圖形引擎,原本是商業(yè)化的項(xiàng)目,后在2005年被Google收購后用于Android,Chrome等等眾多Google的知名項(xiàng)目中,沉寂一年后,Google于2007年初將這神秘的代碼公之于眾。如果有興趣深入了解可以到Skia的官方網(wǎng)站了解更多: https://skia.org/
2.SKIA能干啥?
Skia與大名鼎鼎的Cairo一樣,都是知名的圖形引擎,然而不同的是Skia是向量圖形引擎,Cairo則是矢量圖形引擎,前者作為Android的主要圖形引擎,后者則是Linux界主要的圖形引擎,Skia以其清爽的代碼風(fēng)格,簡潔的API設(shè)計(jì),高效的繪制機(jī)制,相對簡單的結(jié)構(gòu)設(shè)計(jì)而深受開發(fā)者們的喜愛。
Skia的主要功能包括:
繪制:點(diǎn),線,路徑,三角形,矩形,多邊形,不規(guī)則多邊形等。
圖像解碼:包括PNG,JPG,JPEG,BMP,GIF,SVG等多種格式的支持。
PDF操作:PDF生成,文字轉(zhuǎn)PDF。
硬件加速:Skia集成了OpenGL,Vulkan等三維繪圖API,所以可以在支持這些API的相關(guān)設(shè)備上使用硬件加速以及三維圖形的繪制。由于Skia的接口設(shè)計(jì)非常友好,這會讓你更方便的使用相關(guān)的API接口。好吧,當(dāng)然還有很多我不知道的,這里就不多BB,我們直接進(jìn)入正題。
3.SKIA源碼的下載
由于國內(nèi)的情況,想必各位很多時(shí)候也只能望而卻步了吧,不過不用擔(dān)心,我們作為程序員,有的是辦法。如果各位小伙伴實(shí)在找不到梯子或者實(shí)在沒辦法可以這樣(截至目前時(shí)間2018年2月12日):
$ git clone https://github.com/scvax/skia_full.git
以上同步的源碼為本人漂洋過海從遙遠(yuǎn)的西方扒來的(滑稽),可供直接編譯(PS:如果使用本人提供的源碼,請忽略以下下載步驟,源碼包含depot_tools,Skia源碼,編譯依賴等)。
首先,你需要一臺能訪問googlesource.com的Linux電腦(這里以Ubuntu 16.04 LTS為例),你也可以從Ubuntu服務(wù)器上完成以下步驟然后down到本地計(jì)算機(jī)進(jìn)行后續(xù)工作。
1.下載depot_tools工具包
$ git clone 'https://chromium.googlesource.com/chromium/tools/depot_tools.git'
2.設(shè)置depot_tools工具包的環(huán)境變量
## ${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
## 注意,此步驟可能部分依賴第一次會下載失敗,等待其他下載結(jié)束后再試一次即可
$ python tools/git-sync-deps
好了,到這里就拿到SKIA的源碼了,接下來...就是激動人心的編譯時(shí)刻...
4.Ubuntu下編譯
1.進(jìn)入skia源碼目錄并安裝編譯需要的依賴軟件包
$ cd skia
## 此步驟需要輸入管理員密碼,因?yàn)樵撃_本使用的系統(tǒng)自帶的APT工具
$ tools/install_dependencies.sh
2.根據(jù)需要,執(zhí)行不同的構(gòu)建配置命令
## 如果提示未找到bin/gn命令:
## 1.請檢查環(huán)境變量中是否存在名為depot_tools的文件夾指向
## 2.請檢查depot_tools是否為空
## 3.啥都沒有?你從頭開始看這篇博文吧
## 配置靜態(tài)library
$ bin/gn gen out/Static
## 配置動態(tài)library
$ bin/gn gen out/Shared --args='is_component_build=true'
## 配置Debug調(diào)試
$ bin/gn gen out/Debug
## 配置Release版本
$ bin/gn gen out/Release --args='is_debug=false'
一般來說,Skia自帶有很多l(xiāng)ibrary,如果不強(qiáng)制使用自帶,編譯的時(shí)候就會從系統(tǒng)里邊找,如果找不到就會報(bào)錯(cuò),所以呢,我就將構(gòu)建配置改了一下
## 配置靜態(tài)library
$ bin/gn gen out/Static
## 配置動態(tài)library
$ bin/gn gen out/Shared --args='is_component_build=true'
## 配置Debug調(diào)試
$ 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編譯的時(shí)候會報(bào)出返回值的警告問題,導(dǎo)致編譯失敗
## 所以此處在extra_cflags_cc中加上編譯忽略參數(shù)-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.開始編譯
## 根據(jù)自己的構(gòu)建配置進(jìn)行編譯
## 編譯靜態(tài)library
$ ninja -C out/Static
## 編譯動態(tài)library
$ ninja -C out/Shared
## 編譯Debug版本
$ ninja -C out/Debug
## 編譯Release版本
$ ninja -C out/Release
編譯完成后會在out目錄下生成相應(yīng)的文件。
5.附錄(關(guān)于我提供的源碼怎么用)
(1)同步我提供的源碼(全部同步下來后大概有900M的樣子)
## 由于全是壓縮包,所以速度會比較慢,請耐心等待
$ git clone https://github.com/scvax/skia_full.git
(2)合并文件(由于Github但文件最大支持100M,所以分包上傳)
## 進(jìn)入剛剛同步的目錄,然后執(zhí)行以下命令
$ cat skia_source.tar.gz* > skia.tar.gz
## 當(dāng)然,合并完成之后你也可以選擇刪掉分包,只留下一個(gè)合并后的包,以節(jié)省空間
# $ rm -rf skia_source.tar.gz*
(3)解壓文件
## 解壓到當(dāng)前目錄
$ tar -zxvf skia.tar.gz
(4)后續(xù)步驟
解壓出來后會有一個(gè)files文件夾,files文件夾內(nèi)包含depot_tools和skia倆個(gè)文件夾,請先將depot_tools添加到環(huán)境變量后在進(jìn)行下一步操作。參考:[4.Ubuntu下編譯]
如果在編譯時(shí)遇到問題或者有什么疑問,請?jiān)诒疚南路搅粞裕視鹨唤獯?僅限在我能力范圍內(nèi))。
為了給各位提供方便,這里提供編譯好的庫,包括:
Linux (x64)
Android (armeabi-v7a , arm64-v8a , x86 , x86_64)
下載鏈接: https://pan.baidu.com/s/1JpPC4P0BbCdUH6eoiJba4Q
提取碼: xjyq
看完博文不留言的猿猿都不是好猿猿 (っ*′Д`)っ
最后,祝大家新年快樂~~