0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

機器視覺軟件開發(fā)SDK的注意事項介紹

jt_rfid5 ? 來源:機械視覺沙龍 ? 2023-04-26 10:47 ? 次閱讀

其實很簡單,SDK 就是 Software Development Kit 的縮寫,中文意思就是“軟件開發(fā)工具包”。

這是一個覆蓋面相當廣泛的名詞,可以這么說:輔助開發(fā)某一類軟件的相關(guān)文檔、范例和工具的集合都可以叫做“SDK”。具體到我們這個系列教程,我們后面只討論廣義 SDK 的一個子集——即開發(fā) Windows 平臺下的應(yīng)用程序所使用的 SDK。

呵呵,其實上面只是說了一個 SDK 大概的概念而已,理解什么是 SDK 真有這么容易嗎?

恐怕沒這么簡單!為了解釋什么是 SDK 我們不得不引入 API、動態(tài)鏈接庫、導(dǎo)入庫等等概念。^_^,不要怕,也就是幾個新的名詞而已,其實學習新知識就是在學習新名詞、新概念和新術(shù)語。

首先要接觸的是“API”,也就是 Application Programming Interface,其實就是操作系統(tǒng)留給應(yīng)用程序的一個調(diào)用接口,應(yīng)用程序通過調(diào)用操作系統(tǒng)的 API 而使操作系統(tǒng)去執(zhí)行應(yīng)用程序的命令(動作)。其實早在 DOS 時代就有 API 的概念,只不過那個時候的 API 是以中斷調(diào)用的形式(INT 21h)提供的,在 DOS 下跑的應(yīng)用程序都直接或間接的通過中斷調(diào)用來使用操作系統(tǒng)功能,比如將 AH 置為 30h 后調(diào)用 INT 21h 就可以得到 DOS 操作系統(tǒng)的版本號。而在 Windows 中,系統(tǒng) API 是以函數(shù)調(diào)用的方式提供的。同樣是取得操作系統(tǒng)的版本號,在 Windows 中你所要做的就是調(diào)用 GetVersionEx() 函數(shù)??梢赃@么說,DOS API 是“Thinking in 匯編語言”的,而 Windows API 則是“Thinking in 高級語言”的。DOS API 是系統(tǒng)程序的一部分,他們與系統(tǒng)一同被載入內(nèi)存并且可以通過中斷矢量表找到他們的入口,那么 Windows API 呢?要說明白這個問題就不得不引入我們下面要介紹得這個概念——DLL。

DLL(又是一個縮寫,感覺 IT 這個行業(yè)里三字頭縮寫特別多),即 Dynamic Link Library(動態(tài)鏈接庫)。我們經(jīng)常會看到一些 .dll 格式的文件,這些文件就是動態(tài)鏈接庫文件,其實也是一種可執(zhí)行文件格式。跟 .exe 文件不同的是,.dll 文件不能直接執(zhí)行,他們通常由 .exe 在執(zhí)行時裝入,內(nèi)含有一些資源以及可執(zhí)行代碼等。其實 Windows 的三大模塊就是以 DLL 的形式提供的(Kernel32.dll,User32.dll,GDI32.dll),里面就含有了 API 函數(shù)的執(zhí)行代碼。為了使用 DLL 中的 API 函數(shù),我們必須要有 API 函數(shù)的聲明(.H)和其導(dǎo)入庫(.LIB),函數(shù)的原型聲明不難理解,那么導(dǎo)入庫又是做什么用的呢?我們暫時先這樣理解:導(dǎo)入庫是為了在 DLL 中找到 API 的入口點而使用的。

所以,為了使用 API 函數(shù),我們就要有跟 API 所對應(yīng)的 .H 和 .LIB 文件,而 SDK 正是提供了一整套開發(fā) Windows 應(yīng)用程序所需的相關(guān)文件、范例和工具的“工具包”。到此為止,我們才真正的解釋清楚了 SDK 的含義。

由于 SDK 包含了使用 API 的必需資料,所以人們也常把僅使用 API 來編寫 Windows 應(yīng)用程序的開發(fā)方式叫做“SDK 編程”。而 API 和 SDK 是開發(fā) Windows 應(yīng)用程序所必需的東西,所以其它編程框架和類庫都是建立在它們之上的,比如 VCL 和 MFC,雖然他們比起“SDK 編程”來有著更高的抽象度,但這絲毫不妨礙它們在需要的時候隨時直接調(diào)用 API 函數(shù)。

開發(fā)SDK時需要注意的問題

1.修改類別文件名及類別方法。

開發(fā)SDK時通常會用到比較多的第三方的類別方法, 這樣的話, 開發(fā)者在使用你的SDK時, 因為他可能也會加一些第三方的開源庫, 比如都使用了NSString的md5類別文件。由于這兩個文件都是從網(wǎng)上下載來下的, 所以文件名是一樣的。這樣在編譯時就會報錯。然后就想到要去修改這個類別文件名, 等修改類別文件名后。發(fā)現(xiàn)類別中的方法名是一樣的, 而iOS在調(diào)用兩個相同方法的類別方法時, 不能確定其調(diào)用的哪個方法, 但可以肯定地是只會調(diào)用一個類別方法, 如果恰好開發(fā)者自己又修改了這個類別方法, 那就有問題了。

所以在SDK開發(fā)過程中, 需要修改引入進來的類名, 及方法名, 建議添加項目前綴, 最好是三個字母的, 如NAB, (兩個字母為蘋果自己保留使用)

2.在開發(fā)SDK時, 如果發(fā)現(xiàn)某個方法命名時比較困難, 那么幾乎可以肯定的是, 這個方法藕合度太高,需要再次進行分解。

3.開發(fā)SDK時, 需要考慮到升級的問題, 并且可以指定某些版本必須強制升級。(以防某些版本到后期發(fā)現(xiàn)有明顯問題, 需要及時替換)

4.開發(fā)SDK時, 需要留出一個接口, 能通過后臺服務(wù)器強制關(guān)閉掉某個接入應(yīng)用的調(diào)用。(這可能會發(fā)生在惡意地攻擊行為, 以及非惡意地使用行為,如某應(yīng)用頻繁自動重啟事故,每次重啟都會調(diào)用咱們的SDK,然后就會使得咱們的SDK服務(wù)器壓力陡增), 這個時候, 如果后臺能根據(jù)這個應(yīng)用的APP ID啥的, 強制關(guān)閉它發(fā)的請求,或者屏掉他的請求, 你會發(fā)現(xiàn)世界如此美好。

5.統(tǒng)計方面, SDK存儲每個接口調(diào)用的次數(shù),以在一定的情況下發(fā)送給服務(wù)器, 便于后期分析某些接口是否有問題,或者是根本就沒有用戶使用的情況。

6.有些SDK使用的前提條件,最好是在編譯期就提示給用戶,而不是在運行期, 可以使用類似下面代碼來進行提示

#warning - Release scheme, this is not work.

#if !__has_feature(objc_arc)

#error iBeaconSDK requires automatic reference counting

#endif

更好地構(gòu)建SDK

1. 了解墻外的世界,把握好需求

試著去關(guān)注你的競爭對手或者與你相似領(lǐng)域的公司都做了什么。這可能會給你一些參考的角度。采納你喜歡的地方,改善你不喜歡的地方。

2. 簡潔

代碼簡潔——簡潔的代碼意味著你的客戶用起來得心應(yīng)手。這可能包括盡可能減少與代碼交互的方式,比如只公開一個接口類;或是簡短的方法簽名,比如少量的輸入參數(shù),等等。

除了初始化階段(只發(fā)生一次且可能要求進行配置),請讓SDK方法使用起來盡可能簡單。

同樣地,請盡量減少方法簽名中的參數(shù)。

你可以通過提供默認配置以及允許高級用戶進行覆蓋的默認實現(xiàn)類來達到這一目的。

隱藏用戶不需要使用的類和方法,比如,只將用戶必須使用的類/方法設(shè)定為公有的,否則就將它們的使用范圍設(shè)定為局部或者私有。一個 IDEs 提供了代碼檢查與清除功能,可以幫你自動實現(xiàn)這一點。

參考文檔簡潔——讓你的文檔盡可能簡單易懂。這意味著有時候你得多寫注釋,有時候又得盡量少寫。內(nèi)聯(lián)樣本代碼通常很有幫助,因為大多數(shù)人都是通過例子來學習的。

3. 提供簡單的開始步驟

這是指一個人可以在五分鐘內(nèi)上手使用你的代碼。這一點非常重要,因為客戶往往希望盡可能不費力地進行集成。除此之外,有時候客戶想要評估你的產(chǎn)品,但如果無法進行簡單的測試,他們就很可能選擇跳過你的產(chǎn)品。

4. 短小精悍

保持簡短主要是文檔的責任,但是同樣與用戶和SDK代碼的交互方式有關(guān);為了保持文檔的簡短,可以提供代碼樣例、一目了然的方法名或使用默認數(shù)據(jù)來實現(xiàn)。

5. 集成

請謹記客戶開發(fā)環(huán)境的多樣性。

比如說,如果你在寫一個安卓庫,它的集成方式在客戶使用Android Studio加gradle 框架和使用Eclipse集成開發(fā)環(huán)境時就非常不同。前者需要aar工件并發(fā)布到遠程存儲庫中,而后者需要你提供jar文件,以及關(guān)于如何為SDK更改AndroidManifext.xml文件和獨立eclipse項目的指導(dǎo)。

這可能會影響你的構(gòu)建機制及其工件。然而,不要試圖取悅所有客戶,請先滿足你的第一位客戶,或者預(yù)期中的大多數(shù)客戶的需求。

6. 項目示例

在GitHub上創(chuàng)建一個最基本的項目,模擬使用SDK包的用戶。

這可以向客戶展示你的產(chǎn)品如何滿足他們的需求,以及如何集成你的產(chǎn)品。如果你想展示高級用法,那就在另一個項目里進行展示。通常,客戶會將項目示例作為主要的參考文檔,因此,請?zhí)峁┬袃?nèi)評論,并盡量用一目了然的方式書寫代碼。

7. 概述

在參考文檔的開頭,或是GitHub項目的README.md文件中,請用直白的語言對你的解決方案進行概述。在此部分,筆者通常會提供一個使用樣例來解釋SDK的典型用法。如果有可能,請?zhí)峁┮粋€簡單的表格或是圖表,這樣一來,不喜歡閱讀操作指南的用戶也可以快速了解該SDK的優(yōu)勢。

8. 初始化

使用在SDK域內(nèi)可接受的慣例。

這些慣例可能是可重載的構(gòu)造函數(shù),某種構(gòu)建模式等。初始化應(yīng)當巧妙地使用默認值來簡化流程。

9. 默認值

默認值對于保持代碼的簡潔性和減少配置過程(見簡潔性部分)是非常重要的。你所提供的默認值(不管是在配置還是實施過程)應(yīng)該代表在你眼中大多數(shù)SDK用戶會進行的操作。

編輯:黃飛

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 機器視覺
    +關(guān)注

    關(guān)注

    161

    文章

    4304

    瀏覽量

    119892
  • API
    API
    +關(guān)注

    關(guān)注

    2

    文章

    1465

    瀏覽量

    61682
  • SDK
    SDK
    +關(guān)注

    關(guān)注

    3

    文章

    1015

    瀏覽量

    45612

原文標題:【光電智造】詳解,機器視覺軟件開發(fā)SDK

文章出處:【微信號:今日光電,微信公眾號:今日光電】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    433HZ頻率點菜寶的操作及注意事項

    方面非常強大的機器,他的特點是耐跌型,電路設(shè)計穩(wěn)定卓越,抗干擾性非常強。而且這款機器設(shè)計采用中性包裝,任何的軟件開發(fā)商都可以進行軟件及硬件的相互鏈接,而且可以自由的選擇加密程序,可以實
    發(fā)表于 11-03 19:14

    ucosii開發(fā)注意事項

    ucosii開發(fā)注意事項。
    發(fā)表于 08-15 22:37

    硬件開發(fā)流程及注意事項是什么

    硬件開發(fā)流程及注意事項是什么
    發(fā)表于 04-27 06:15

    CAN模塊特性與設(shè)計上的注意事項簡析

    文檔文章目錄目錄Part 1. CAN 模塊特性Part 2. 硬件設(shè)計上的注意事項Part 3. 軟件設(shè)計上的注意事項Part 4. CAN波特率與采樣點配置要求Part 5. 同步跳轉(zhuǎn)位寬時間設(shè)置的
    發(fā)表于 01-06 08:04

    ARM定制指令的設(shè)計注意事項和決策

    的硬件加速器時的一系列設(shè)計注意事項,以及它與Cortex-M33和Cortex-M55處理器上現(xiàn)有的協(xié)處理器接口功能的比較。 本文還介紹了ARM研究的一些用例,如數(shù)學加速器,最后還解釋了軟件開發(fā)人員如何訪問使用ARM定制指令實現(xiàn)
    發(fā)表于 08-23 06:39

    電容的用途及注意事項

    電容的用途及注意事項 什么電路板都要用到電容,但如果用得不好,后果很嚴重!下面介紹電容的用途及注意事項。 什么是好
    發(fā)表于 01-14 10:31 ?2047次閱讀

    TCL各機芯軟件升級操作步驟及注意事項

    TCL各機芯軟件升級操作步驟及注意事項
    發(fā)表于 09-06 15:02 ?18次下載

    工業(yè)機器人電器系統(tǒng)注意事項

    工業(yè)機器人電器系統(tǒng)注意事項:系統(tǒng)設(shè)計流程
    發(fā)表于 02-25 18:11 ?1次下載

    焊錫技巧及注意事項培訓(xùn)

    焊接技術(shù)簡單介紹 焊錫技巧及注意事項培訓(xùn)。
    發(fā)表于 05-13 15:39 ?0次下載

    GD32大容量產(chǎn)品軟件的移植注意事項

    本文檔的主要內(nèi)容詳細介紹的是GD32大容量產(chǎn)品軟件的移植注意事項。
    發(fā)表于 11-14 16:14 ?17次下載
    GD32大容量產(chǎn)品<b class='flag-5'>軟件</b>的移植<b class='flag-5'>注意事項</b>

    MCUXpresso IDE在Flash調(diào)試的注意事項

    大家好,我是痞子衡,是正經(jīng)搞技術(shù)的痞子。今天痞子衡給大家介紹的是 MCUXpresso IDE 下使用 J-Link 下載算法在 Flash 調(diào)試注意事項。 介紹一下如何使用新生成的 flash
    的頭像 發(fā)表于 12-23 13:53 ?965次閱讀

    H3 SDK1.0 USB模塊的配置方法及注意事項

    本文介紹H3 sdk1.0 USB模塊配置方法,以及使用注意事項。
    發(fā)表于 03-26 16:36 ?6次下載
    H3 <b class='flag-5'>SDK</b>1.0 USB模塊的配置方法及<b class='flag-5'>注意事項</b>

    OneCore存儲軟件開發(fā)工具包(SDK)

    電子發(fā)燒友網(wǎng)站提供《OneCore存儲軟件開發(fā)工具包(SDK).pdf》資料免費下載
    發(fā)表于 08-22 14:53 ?0次下載
    OneCore存儲<b class='flag-5'>軟件開發(fā)</b>工具包(<b class='flag-5'>SDK</b>)

    SS524V100 SDK安裝編譯osdrv注意事項(一)

    SS524V100 SDK安裝編譯osdrv注意事項(一) 一、開發(fā)環(huán)境 windows10電腦 + 虛擬機15 Pro + Ubuntu18.0.4 二、在 linux 服務(wù)器上安裝交叉工具鏈
    的頭像 發(fā)表于 10-23 17:18 ?1228次閱讀
    SS524V100 <b class='flag-5'>SDK</b>安裝編譯osdrv<b class='flag-5'>注意事項</b>(一)

    新版Hi3559AV100開發(fā)注意事項

    新版Hi3559AV100開發(fā)注意事項
    的頭像 發(fā)表于 11-13 09:17 ?660次閱讀
    新版Hi3559AV100<b class='flag-5'>開發(fā)</b><b class='flag-5'>注意事項</b>