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

浙公網(wǎng)安備 33010602011771號(hào)