什么是SDK?

1. 什么是SDK?

只要你是開發(fā)者,就一定聽過SDK這個詞,如:音視頻SDK、地圖導航SDK、支付SDK等等。那到底什么是SDK?它包含哪些東西呢?

1.1. SDK的定義

SDKSoftware Development Kit的縮寫,翻譯成中文是:軟件開發(fā)工具包。SDK是一組工具、庫、文檔和示例代碼的集合,旨在幫助開發(fā)者更輕松地創(chuàng)建應用程序或集成特定服務。SDK通常由硬件平臺、操作系統(tǒng)或服務提供商提供,以便開發(fā)者能夠利用其平臺或服務的功能。

1.2. SDK的組成

SDK通??梢园ㄒ韵聝?nèi)容:

  1. 庫或框架:提供預先編寫的代碼庫,開發(fā)者可以直接調(diào)用這些庫來實現(xiàn)特定功能,而不必從頭開始編寫代碼。
  2. 驅(qū)動程序或固件: 針對特定硬件的驅(qū)動程序,或者針對特定操作系統(tǒng)(如LinuxRTOS)的固件。
  3. 工具:包括調(diào)試工具、編譯器、模擬器等,幫助開發(fā)者更高效地進行開發(fā)和測試。
  4. 文檔:詳細說明SDK的使用方法、API接口、功能說明等,幫助開發(fā)者理解和使用SDK。
  5. 示例代碼:提供一些簡單的示例程序,展示如何使用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?

APIApplication 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ā)通常包括以下幾個方面:

  1. 設計API:定義應用程序接口(API),這些接口是開發(fā)者用來與SDK交互的橋梁。API的設計需要考慮易用性、靈活性和性能。
  2. 實現(xiàn)功能:根據(jù)設計好的API,實現(xiàn)具體的功能。這可能包括各種庫、工具和實用程序,用于處理數(shù)據(jù)、執(zhí)行計算、管理資源等。
  3. 編寫文檔:提供詳細的文檔,解釋如何使用SDK的各個部分。文檔通常包括API參考、教程、示例代碼和最佳實踐。
  4. 創(chuàng)建示例代碼:提供示例代碼,幫助開發(fā)者理解如何使用SDK。示例代碼應該覆蓋SDK的主要功能和常見用例。
  5. 測試和調(diào)試:確保SDK在各種環(huán)境和使用場景下都能正常工作。這包括單元測試、集成測試和性能測試。
  6. 發(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。

系列文章推薦:

01. 什么是SDK

02. SDK的設計目標

03. 接口設計與規(guī)范

04. 接口注釋與接口文檔

05. 原理篇:字符集與字符編碼(一)

06. 原理篇:字符集與字符編碼(二)

附錄A-計算機術(shù)語中成對出現(xiàn)的單詞

附錄B: 計算機術(shù)語中常見的單詞縮寫


大家好,我是陌塵。

IT從業(yè)10年+, 北漂過也深漂過,目前暫定居于杭州,未來不知還會飄向何方。

搞了8年C++,也干過2年前端;用Python寫過書,也玩過一點PHP,未來還會折騰更多東西,不死不休。

感謝大家的關(guān)注,期待與你一起成長。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容