### 簡介:
Skia是一個開源的2D圖形庫,被用于Google Chrome和Chrome OS端盆,Android,Mozilla Firefox和Firefox OS等多個產(chǎn)品的圖形引擎
官網(wǎng):<https://skia.org/>
<!-- more -->
### 下載:
1. 下載depot_tools并配置環(huán)境
```java
git clone 'https://chromium.googlesource.com/chromium/tools/depot_tools.git'
export PATH="${PWD}/depot_tools:${PATH}"
```
這里經(jīng)常因為網(wǎng)絡(luò)或者墻的問題clone不下來,大家可以手動下載zip包并配置環(huán)境
2. 下載skia
```java
git clone https://skia.googlesource.com/skia.git
cd skia
python tools/git-sync-deps
```
skia是通過這里通過[GN](https://chromium.googlesource.com/chromium/src/tools/gn/)來構(gòu)建工程的件甥,
使用python tools/git-sync-deps有時候會失效何恶,這里還可以通過bin目錄下的fetch-gn腳本來配置gn環(huán)境
### 構(gòu)建
skia提供了一些參數(shù)可以進行構(gòu)建的配置孽锥,通過下面這個命令可以看到可使用的一些參數(shù)
```
bin/gn args out/Debug --list
```
skia可以通過參數(shù)來構(gòu)建多個特性的文件
```
bin/gn gen out/Static --args='is_official_build=true'
bin/gn gen out/Shared --args='is_official_build=true is_component_build=true'
bin/gn gen out/Debug
bin/gn gen out/Release? --args='is_debug=false'
bin/gn gen out/Clang? ? --args='cc="clang" cxx="clang++"'
bin/gn gen out/Cached? --args='cc_wrapper="ccache"'
bin/gn gen out/RTTI? ? --args='extra_cflags_cc=["-frtti"]'
```
使用Ninja命令來編譯和鏈接skia生成動態(tài)庫
```
ninja -C out/Static
ninja -C out/Shared
ninja -C out/Debug
ninja -C out/Release
ninja -C out/Clang
ninja -C out/Cached
ninja -C out/RTTI
```
如果一些頭文件缺失,可以通過下面的腳本來安裝一些依賴细层,這里可以打開腳本看看惜辑,這里只支持了Ubuntu|Debian這些系統(tǒng),我這里使用的fedora,因此執(zhí)行腳本時會提示'unknown system'
```
tools/install_dependencies.sh
```
在編譯生成過程中疫赎,往往會碰到下面這個錯誤
```
ninja: error: '../../third_party/externals/jsoncpp/src/lib_json/json_reader.cpp', needed by 'obj/third_party/externals/jsoncpp/src/lib_json/jsoncpp.json_reader.o', missing and no known rule to make it
```
這是因為skia使用很多第三方庫來提供多種功能盛撑,可以通過設(shè)置skia_use_xxx來啟用或關(guān)閉這些功能,或者你也可以在github上找到這些第三方庫代碼放置third_party/externals目錄下捧搞,但是這里得注意第三方庫的版本問題.如果啟用skia_use_xxx,則啟用skia_use_system_xxx時會在系統(tǒng)路徑下去找這些頭文件和庫抵卫,如果設(shè)置了is_official_build=true,則默認配置了所有skia_use_system_xxx默認值实牡,你也可以通過extra_cflags和extra_ldflags來添加庫路徑.