在Android中,2D渲染的引擎為SGL,為了給上層應(yīng)用提供更便捷的服務(wù),Android通過android.graphics.*實(shí)現(xiàn)了對SGL引擎的Java JNI接口封裝;通過android.graphics、android.graphics.drawable、android.graphics.drawable.shapes等包,Android提供了對2D渲染如Canvas、Color、Paint、Path、Point、Drawable等的渲染支持。Skia在Android中的位置如下圖所示。
下面是Surface Flinger的監(jiān)聽線程處理事件的實(shí)現(xiàn)過程:

Skia在Android中的位置
Skia的源代碼主要位于external\skia目錄下。與Firefox采用的Cairo相比,Skia更加小而高效,接口也更加簡潔。
external\skia\src\animator目錄下的文件用來實(shí)現(xiàn)Skia的動畫效果,分為Animator、Display、Draw、SkScript等邏輯模塊。其中Animator部分包括SkAnimatorActive、SkAnimatorBase、SkAnimatorField、SkAnimatorSet、SkAnimatorScript等;Display 部分包括SkDisplayAdle、SkDisplayAdd、 SkDisplayEvents、SkDisplayList、SkDisplayInput、SkDisplayMovie等;Draw部分包括SkDraw3D、 SkDrawBitmap、SkDrawClip、SkDrawColor、SkDrawBlur、SkDrawLine、SkDrawPaint、 SkDrawPath、SkDrawPoint等;SkScript部分包括SkScript、SkScriptRuntime、SkScriptDecompile等。
external\skia\src\core目錄下的文件為Skia的核心部分,執(zhí)行圖形繪制功能,主要類包括SkColor、SkCanvas、SkBitmap、SkPicture、SkBlitter、SkCordic、SkPath、SkPoint、SkRect、SkRegion、SkMask 等。
external\skia\src\gl目錄下的文件實(shí)現(xiàn)了Skia的圖形庫。其引擎為Open GL或者 Open GL ES,用于實(shí)現(xiàn)一些簡單的3D效果。
external\skia\src\images目錄下的文件實(shí)現(xiàn)了Skia的圖像部分。支持常見圖像的解碼、部分圖像的編碼和動畫等。
external\skia\src\ports目錄下的文件定義了Skia的移植封裝接口,包括Font、Event、File、Thread、Time、XMLParser等。
external\skia\src\svg目錄下的文件實(shí)現(xiàn)了Skia對矢量圖像SVG的支持。
external\skia\src\utils目錄下的文件實(shí)現(xiàn)了Skia的一些輔助工具,包括SkCamera、SkColorMatrix、SkOSFile、SkProxyCanvas、SkInterpolator等。
external\skia\src\views目錄下的文件實(shí)現(xiàn)了Skia的界面UI庫,控件包括Window、Menu、 TextBox、ListView、 ProgressBar、 Widget、 ScrollBar、TagList、Image等。目前Skia的UI庫暫未被Android使用。
external\skia\src\xml目錄下的文件實(shí)現(xiàn)了Skia對XML的DOM、解析器的封裝。具體的XML解析器的實(shí)現(xiàn)需要根據(jù)不同的操作系統(tǒng)及宿主程序來實(shí)現(xiàn)。相關(guān)的類包括SkDOM、SkDOMNode、SkDOMAttr、SkXMLParser、SkXMLParserError、SkXMLPullParser、SkDisplayXMLParser、SkXMLWriter、SkXMLStreamWriter、SkXMLAnimatorWriter等。相關(guān)的實(shí)現(xiàn)位于external\skia\src\xml目錄下。