1. 什么是SDK?
只要你是開發(fā)者,就一定聽過SDK這個詞,如:音視頻SDK、地圖導航SDK、支付SDK等等。那到底什么是SDK?它包含哪些東西呢?
1.1. SDK的定義
SDK是Software Development Kit的縮寫,翻譯成中文是:軟件開發(fā)工具包。SDK是一組工具、庫、文檔和示例代碼的集合,旨在幫助開發(fā)者更輕松地創(chuàng)建應用程序或集成特定服務。SDK通常由硬件平臺、操作系統(tǒng)或服務提供商提供,以便開發(fā)者能夠利用其平臺或服務的功能。
1.2. SDK的組成
SDK通??梢园ㄒ韵聝?nèi)容:
- 庫或框架:提供預先編寫的代碼庫,開發(fā)者可以直接調(diào)用這些庫來實現(xiàn)特定功能,而不必從頭開始編寫代碼。
-
驅(qū)動程序或固件: 針對特定硬件的驅(qū)動程序,或者針對特定操作系統(tǒng)(如
Linux、RTOS)的固件。 - 工具:包括調(diào)試工具、編譯器、模擬器等,幫助開發(fā)者更高效地進行開發(fā)和測試。
- 文檔:詳細說明SDK的使用方法、API接口、功能說明等,幫助開發(fā)者理解和使用SDK。
- 示例代碼:提供一些簡單的示例程序,展示如何使用SDK實現(xiàn)常見功能,幫助開發(fā)者快速上手。
說明: 上面列舉的內(nèi)容并不是每一項都需要包含,根據(jù)不同類型的SDK,可能只會包含其中的一項或多項。
通過使用SDK,開發(fā)者可以節(jié)省大量時間和精力,因為許多底層細節(jié)和復雜性已經(jīng)被SDK處理好了。這使得開發(fā)者能夠?qū)W⒂趯崿F(xiàn)應用程序的獨特功能,而不是從頭開始構(gòu)建所有基礎組件。
1.3. 舉例說明
為了方便說明,這里列舉幾個例子,讓大家對SDK有更直觀的認識。
1.3.1. 【示例一】 OpenCV
OpenCV(Open Source Computer Vision Library)是一個開源的計算機視覺和機器學習軟件庫。
OpenCV下載的.exe包含兩個東西:一個是壓縮的資源文件,一個是壓縮包提取器。雙擊.exe后可以將壓縮包的資源提取到指定的目錄下。
解壓出來的目錄,我們可以看到,里面包含了 源代碼、庫文件、文檔、示例代碼。
? pwd
/mnt/d/workspace/opencv
? tree ./ -d -L 2
./
├── build # 編譯后的庫文件
│ ├── bin
│ ├── etc
│ ├── include
│ ├── java
│ ├── python
│ └── x64
└── sources # 源代碼
├── 3rdparty
├── apps
├── cmake
├── data
├── doc # 文檔
├── include
├── modules
├── platforms
└── samples # 示例代碼
1.3.2. 【示例二】 JDK
相信有過Java學習經(jīng)歷的小伙伴們都知道,要運行Java需要先在電腦上安裝JDK,而JDK其實就是Java SDK。其安裝過程就是下載一個安裝包(Windows下是.exe或.msi,macOS是.dmg,Ubuntu是.deb)然后在本地計算機上安裝,看起來好像JDK是一個應用程序。
然而實際上這個應用程序只是JDK的安裝向?qū)?,它通過后臺操作幫你在電腦上安裝了Java的運行環(huán)境、工具和Java基礎的類庫,以上這些東西組合起來才是JDK的核心內(nèi)容。
1.3.3. 【示例三】微信SDK
微信SDK是微信官方提供的一套開發(fā)工具包,用于幫助開發(fā)者在自己的應用中集成微信的各項功能,如登錄、分享、支付等,而無需深入了解微信平臺的內(nèi)部工作原理。
以下是一些常見的微信SDK功能及其簡要介紹:
- 微信登錄: 允許用戶使用微信賬號快速登錄第三方應用,簡化了注冊流程。
- 微信分享: 支持將內(nèi)容分享到微信好友、朋友圈、微信收藏等。
- 微信支付: 提供微信支付功能,用戶可以通過微信完成支付操作。
- 微信小程序: 支持在應用中打開微信小程序,實現(xiàn)更豐富的功能交互。
- 微信卡券: 支持在應用中領取、使用微信卡券。
2. SDK與API
2.1. 什么是API?
API是Application Programming Interface的縮寫,翻譯成中文是:應用程序編程接口。API是一組預定義的函數(shù)或協(xié)議,用于構(gòu)建軟件應用程序。
API定義了SDK與上層應用程序之間如何進行通信和交互。通過使用API,開發(fā)者可以利用SDK的功能和服務,而無需從頭開始編寫所有代碼。
API通常可以分為兩種類型。
- 本地API: 通常是庫或框架提供的,用于訪問和調(diào)用底層SDK的功能。
- 遠程API: 也稱為Web API或REST API,通過網(wǎng)絡提供服務,允許不同的應用程序在不同的設備上進行通信。如微信提供的API允許開發(fā)者實現(xiàn)微信登錄、支付、分享等功能。
API的主要功能包括:
- 接口定義: API規(guī)定了如何請求和接收數(shù)據(jù),以及如何調(diào)用特定的功能。
- 數(shù)據(jù)傳輸: API允許在不同的軟件組件之間傳輸數(shù)據(jù),通常使用標準的格式如JSON或XML。
- 功能調(diào)用: API提供了一組函數(shù)或方法,開發(fā)者可以直接調(diào)用來實現(xiàn)特定的功能。
2.2. SDK與API的關(guān)系
可以從以下幾個角度來分析SDK與API的關(guān)系。
- 包含關(guān)系: SDK包含API,API是SDK的一部分,一個SDK可能包含多個API,以及其他工具、庫、文檔和示例代碼。根據(jù)SDK的組成來看,本地API是"庫或框架"的一部分,遠程API是“文檔”的一部分,它通常定義的是一組協(xié)議接口(如Http接口)。
- 使用場景: API通常是細粒度的,開發(fā)者可以直接調(diào)用API來實現(xiàn)特定的功能。而SDK則提供了一個更全面的解決方案,包括預先編寫的庫、工具、文檔和示例代碼,幫助開發(fā)者從零開始構(gòu)建應用程序。
- 目的: API的主要目的是定義接口,使得不同的軟件組件可以相互通信。SDK的主要目的是提供一套完整的開發(fā)工具和資源,幫助開發(fā)者更高效地進行軟件開發(fā)。
3. 什么是SDK開發(fā)?
SDK開發(fā)是指開發(fā)軟件開發(fā)工具包的過程。
3.1. SDK開發(fā)包含哪些過程?
SDK開發(fā)通常包括以下幾個方面:
- 設計API:定義應用程序接口(API),這些接口是開發(fā)者用來與SDK交互的橋梁。API的設計需要考慮易用性、靈活性和性能。
- 實現(xiàn)功能:根據(jù)設計好的API,實現(xiàn)具體的功能。這可能包括各種庫、工具和實用程序,用于處理數(shù)據(jù)、執(zhí)行計算、管理資源等。
- 編寫文檔:提供詳細的文檔,解釋如何使用SDK的各個部分。文檔通常包括API參考、教程、示例代碼和最佳實踐。
- 創(chuàng)建示例代碼:提供示例代碼,幫助開發(fā)者理解如何使用SDK。示例代碼應該覆蓋SDK的主要功能和常見用例。
- 測試和調(diào)試:確保SDK在各種環(huán)境和使用場景下都能正常工作。這包括單元測試、集成測試和性能測試。
- 發(fā)布和維護:將SDK發(fā)布給開發(fā)者使用,并提供持續(xù)的支持和更新,以修復bug、添加新功能和優(yōu)化性能。
3.2. SDK開發(fā)的目標是什么?
SDK開發(fā)通常是為了解決某一特定領域的技術(shù)問題,提供解決方案和具體的實現(xiàn),并開放給特定的用戶,降低目標用戶的開發(fā)難度,幫助目標用戶解決特定領域的技術(shù)問題,提高他們的開發(fā)效率。這些領域一般具有一定的技術(shù)門檻和復雜度,如下面這些領域的SDK。
-
地圖服務SDK: 如
Google Maps SDK、百度地圖SDK,用于集成地圖和地理信息服務。 -
支付服務SDK: 如
支付寶SDK、微信支付SDK,用于集成在線支付功能。 -
社交服務SDK: 如
Facebook SDK、Twitter SDK,用于集成社交網(wǎng)絡功能。 -
音視頻SDK: 如
FFmpeg SDK、WebRTC,用于音視頻編解碼和處理。 -
圖形圖像SDK: 如
OpenCV、OpenGL,用于圖像算法和高性能的圖形渲染。
3.3. SDK開發(fā)與應用開發(fā)的關(guān)系
對技術(shù)的要求:
上層應用開發(fā)是直接支撐企業(yè)的實際業(yè)務開展的,會有很大的業(yè)務壓力和KPI考核,很多時候是經(jīng)常被業(yè)務推著走的;而SDK的開發(fā)會更側(cè)重于底層框架、基礎庫、中間件等技術(shù)層的開發(fā),解決特定領域的技術(shù)問題,是為上層應用層做技術(shù)支撐的。SDK開發(fā)需要更多的考慮軟件的通用性、穩(wěn)定性和安全性,所以SDK的開發(fā)對開發(fā)人員的技術(shù)能力也要求會高一點。
依賴關(guān)系:
上層應用開發(fā)通常需要依賴一些底層的SDK或基礎庫。按軟件分層來講:SDK通常在底層,而應用程序通常上層,上層應用程序依賴底層SDK。
系列文章推薦:
大家好,我是陌塵。
IT從業(yè)10年+, 北漂過也深漂過,目前暫定居于杭州,未來不知還會飄向何方。
搞了8年C++,也干過2年前端;用Python寫過書,也玩過一點PHP,未來還會折騰更多東西,不死不休。
感謝大家的關(guān)注,期待與你一起成長。