SDK

SDK一般指软件开发工具包

软件开发工具包一般都是一些软件工程师为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件时的开发工具的集合。

软件开发工具广义上指辅助开发某一类软件的相关文档、范例和工具的集合。譬如做单片机软件开发,st公司提供软件开发工具包(包含数据手册、开发手册、STM32CubeMX、MDK和范例等)。

软件开发工具包是一些被软件工程师用于为特定的软件包、软件框架、硬件平台、操作系统等创建应用软件时的开发工具的集合,一般而言SDK即开发Windows平台下的应用程序所使用的SDK。它可以简单的为某个 程序设计语言提供应用程序接口API的一些文件,但也可能包括能与某种嵌入式系统通讯的复杂的硬件。一般的工具包括用于调试和其他用途的实用工具。SDK还经常包括示例代码、支持性的技术注解或者其他的为基本参考资料澄清疑点的支持文档。

为了鼓励开发者使用其系统或者语言,许多SDK是免费提供的。软件工程师通常从目标系统开发者那里获得软件开发包。也可以直接从互联网下载,有时也被作为营销手段。譬如营销公司会免费提供构建SDK以鼓励人们使用它,从而吸引更多人由于能免费为其编程而购买其构件。

SDK可能附带了使其不能在不兼容的许可证下开发软件的许可证。例如产品供应商提供一个专有的SDK可能与自由软件开发抵触。GPL能使SDK与专有软件开发近乎不兼容。LGPL下的SDK则没有这个问题。

API

API(Application Programming Interface,应用编程接口)其实就是操作系统留给应用程序 的一个调用接口,应用程序通过调用操作系统的API而是操作系统去执行应用程序的命令(动作)。其实早在DOS时代就有API的概念,只不过那个时候的API是以中断调用的形式(INT 21h)提供的,在DOS下跑的应用程序都直接或间接的通过中断调用来使用操作系统功能,比如将AH置为30h后调用INT 21h就可以得到DOS操作系统的版本号。而在Windows中,系统API是以函数调用的方式提供的。同样是取得操作系统的版本号,在Windows中你所要做的就是调用GetVersionEx()函数。

可以这么说,DOS API是“thinking in 汇编语言”的,而Windows API则是“thinking in 高级语言”的。

DOS API是系统程序的一部分,它们与系统一同被载入内存并且可以通过中断矢量表找到它们的入口,那么什么是Windows API呢?要说明白这个问题不得不引入下面要介绍的这个概念——DLL。

DLL

DLL。即Dynamic Link Library(动态链接库)。在Windows环境下含有大量 .dll 格式的文件,这些文件就是动态链接库文件,其实也是一种可执行文件格式。跟.exe文件不同的是, .dll 文件不能直接执行,通常由 .exe 在执行时装入,内含有一些资源以及可执行代码等。其实Windows的三大模块就是以DLL的形式提供的(Kernel32.dll , User32.dll , GDI32.dll),里面就含有了API函数的执行代码。为了使用DLL中的API函数,必须要有API函数的声明(.h 头文件)和其导入库(.lib),导入库可以先这样理解,导入库是为了在DLL中找到API的入口点而使用的。

为了使用API函数,我们就要有跟API所对应的.h 和 .lib 文件,而SDK正是提供了一整套开发Windows应用程序所需的相关文档、范例和工具的“工具包”。(譬如调用printf函数,需要引入头文件stdio.h)

SDK包含了使用API的必需资料,所以也常把仅使用API来编写Windows应用程序的开发方式叫做“SDK编程”。而API 和 SDK是开发Windows应用程序所必需的东西,所以其他编程框架和类库都是建立在它们之上的,比如VCL 和 MFC,虽然比起“SDK编程”来有着更高的抽象度,但这丝毫不妨碍在需要的时候随时直接调用API函数。

SDK 和 API 的区别

API: 譬如程序员A开发了软件A,程序员B正在开发软件B。程序员B想要调用软件A的部分功能来用,但是他又不想从头看一遍软件A的源码和功能实现过程,这时程序员A把软件A里他需要的功能打包好,写成一个函数,程序员B按照流程把这个函数放在软件B里就能直接用软件A的功能了。其中,API就是程序员A打包的那个函数。

SDK: SDK被开发出来是为了减少程序员工作量的,比如有公司开发出某种软件的某一功能,把它封装成SDK(比如语音识别SDK就是能够实现语音识别功能),出售给其他公司做开发用,其他公司如果想要给软件开发出某种功能,但又不想从头开始搞开发,直接付钱省事。

区别: 可以把SDK想象成一个虚拟的程序包,在这个程序包中有一份做好的软件功能,这份程序包几乎是全封闭的,只有一个小小接口可以联通外界,这个接口就是API。

比如我们现在要在机器人中增加某个功能(比如语音识别、智能对话等),但又不想耗费大量时间去研发这个功能。这时我们可以选择使用图灵机器人公司的“SDK”软件包,把机器人连接上API接口,就可以使用SDK软件包里的功能。

加入有一杯密封饮料,它的名字叫做“SDK”。饮料上插着吸管,吸管的名字叫“API”。如果想喝到SDK里的饮料(让系统拥有SDK中的功能),必须通过API这根吸管来实现(通过API连接你的系统和SDK工具包),否则就喝不到饮料。

SDK = 放着你想要的软件功能的软件包
API = SDK上唯一的接口

API是一个函数,有其特定的功能;而SDK是一个很多功能函数的集合体,一个工具包。
API是数据接口,SDK相当于开发集成工具环境,要在SDK的环境下来调用API。
API接口对接过程中需要的环境需要自己提供,SDK不仅提供开发环境,还提供很多API。
简单功能调用,API调用方便快捷;复杂功能调用,SDK功能齐全。

Windows SDK,除了包含Windows API 即<Windows.h>系列头文件以及.lib 和 .dll 以外还有可供开发者查阅的文档,以在线/离线的方式向开发者提供。同时还包括一些列的工具,比如代码签名工具集,调试工具集Debugging Tools For Windows,性能工具集Windows Performance ToolKit等等。开发者在编写代码的过程可以参考SDK的开发文档,了解API的功能,同时还可以使用SDK中的工具帮助自己实现某些数据的转换、代码的声明等等。在代码编写完成之后,可以通过各种工具集对代码的稳定性、性能等等各个方面进行验证和分析。

Java SDK 简称 JDK。内含有Java定义的基础功能包,如Java.Io等,这属于API的部分。在JDK的bin目录下还有jmap、jstat、jvisualvm等一系列工具帮助开发者动态地分析Java代码的运行情况。同时,JDK中还包含了大量的文档,对Java API和各种工具的使用有完整详细的说明。

Android SDK , IOS SDK, .NET Framework SDK等等内涵基本上都是一样的。

SDK 和 API 的区别相关推荐

  1. SDK和API的区别

    SDK和API的区别 一.API的概念 二.SDK的概念 三.SDK和API的区别 在正式了解它们的区别之前,我们得先知道 SDK 和 API 分别是什么? 一.API的概念 我们先来看这样一张图: ...

  2. SDK 和 API 的区别,你都知道吗?

    API 概念 API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而 ...

  3. 快速了解SDK和API的区别

    快速了解SDK和API的区别 SDK 是 Software Development Kit 的缩写,软件开发的工具包.辅助开发某一类软件的相关文档.范例和工具的集合都能叫做SDK. SDK被开发出来是 ...

  4. SDK与API的区别

    SDK就是Kit,工具箱嘛,IOS平台上就是XCode,一系列的工具组合在一起,比如你在编辑器里敲代码的时候它会自动补全代码,自动错误检查,你点一下Run,它会调用编译器来自动编译,编译完它会调用iP ...

  5. SDK和API的区别?

    转载自:点击打开链接 SDK就是Kit,工具箱嘛,IOS平台上就是XCode,一系列的工具组合在一起,比如你在编辑器里敲代码的时候它会自动补全代码,自动错误检查,你点一下Run,它会调用编译器来自动编 ...

  6. SDK与API的联系与区别

    在手机App的世界里,法规条文里所谓的"第三方应用或服务"是个看得见摸不着的存在.但事实上,不管是你每天收到的新闻推送,还是促销活动广告,甚至短信验证码,都有可能出自第三方之手. ...

  7. API,SDK和API之间的关系和区别

    随着软件规模的日益庞大,常常需要把复杂的系统划分成小的组成部分,编程接口的设计十分重要,程序设计的实践中,编程接口的设计首先要使软件系统的职责得到合理划分,良好的接口设计可以降低系统各部分的相互依赖, ...

  8. SDK和API有哪些区别

    SDK和API的区别 软件开发中经常混淆的两个术语是 API 和 SDK.API 代表"应用程序编程接口",是指用于访问 Web 工具或数据库的编程指令和标准.例如,软件公司通常会 ...

  9. 什么是API,SDK和API之间有什么关系呢?

    随着软件规模的日益庞大,常常需要把复杂的系统划分成小的组成部分,编程接口的设计十分重要,程序设计的实践中,编程接口的设计首先要使软件系统的职责得到合理划分,良好的接口设计可以降低系统各部分的相互依赖, ...

最新文章

  1. OPenCv java 形态学操作(12)
  2. Feature Selection: A Data Perspective --阅读笔记2 传统数据的特征选择算法
  3. python爬取mysql_Python如何爬取51cto数据并存入MySQL
  4. Java获取上一周、上一个月、上一年的时间
  5. 5种SpringBoot热部署方式,你用哪种?
  6. Linux学习总结(65)——Linux 服务器安全强化的七个步骤
  7. PHPCMS之 列表和内容页
  8. 【BZOJ2839】集合计数【BZOJ3622】已经没有什么好害怕的了
  9. html5弹性盒子模型,推荐10款弹性盒子源码(收藏)
  10. 捷联惯导系统学习3.3(引力位函数)
  11. elementui 多选框的使用
  12. GB/T 36964-2018《软件工程 软件开发成本度量规范》国家标准正式发布...
  13. Prometheus资源监控工具配置小结
  14. android 喇叭帧动画,CSS动画效果——语音播放小喇叭
  15. 少年,请多一些开疆拓土的勇气——写给在C和C++间犹豫的学生
  16. 计网第三章答案(谢希仁 第七版)
  17. mysql 数据精确度_mysql数据精度丢失问题深入探讨
  18. python集成环境pydev如何使用_Eclipse+PyDev环境搭建
  19. java判断是否是数组_Java判断对象类型是否为数组
  20. 阿里巴巴的卫哲现在在做的事

热门文章

  1. 订阅号运营规范(安全教程):数据分析
  2. 宝塔面板:Linux系统安装教程分享(适合小白参考)
  3. 禁止浏览器复制,手机复制文字
  4. GAN、CGAN、DCGAN、Cycle GAN、SAGAN、WGAN、StarGAN
  5. python中字节的介绍
  6. python实现最大矩形问题
  7. 工业镜头外部主要参数(视场、分辨率、工作距离、景深)介绍
  8. 开发增强现实(AR)教程——识别图的那些坑
  9. ElasticSearch有关查询的那些事
  10. 怎么能够使网络交换机通过USB-A线材连接type-c手机上网呢?LDR6023SS帮您实现!