什么是SDK?

本文深入浅出地介绍了SDK(软件开发工具包)和API(应用程序编程接口)的概念,阐述了两者之间的关系及其在Windows应用程序开发中的作用。文章还探讨了动态链接库(DLL)和导入库(LIB)的作用。

SDK   就是   Software   Development   Kit   的缩写,就是“软件开发工具包”。   
  这是一个覆盖面相当广泛的名词,可以这么说:辅助开发某一类软件的相关文档、   
  范例和工具的集合都可以叫做“SDK”。具体到我们这个系列教程,我们后面只讨   
  论广义   SDK   的一个子集——即开发   Windows   平台下的应用程序所使用的   SDK。   
    
    
          呵呵,其实上面只是说了一个   SDK   大概的概念而已,理解什么是   SDK     
  真有这么容易吗?恐怕没这么简单!为了解释什么是   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(又是一个缩写,感觉   IT   这个行业里三字头缩写特别多),即     
  Dynamic   Link   Library(动态链接库)。我们经常会看到一些   .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   应用程序所需的相关文件、   
  范例和工具的“工具包”。到此为止,我们才真正的解释清楚了   SDK   的含义。   
    
          由于   SDK   包含了使用   API   的必需资料,所以人们也常把仅使用   API     
  来编写   Windows   应用程序的开发方式叫做“SDK   编程”。而   API   和   SDK   
    是开发   Windows   应用程序所必需的东西,所以其它编程框架和类库都是   
  建立在它们之上的,比如   VCL   和   MFC,虽然他们比起“SDK   编程”来有着   
  更高的抽象度,但这丝毫不妨碍它们在需要的时候随时直接调用   API   函数

<think> 我们正在讨论SDK的定义。根据引用[1]和[2],SDK(Software Development Kit,软件开发工具包)是一套开发工具的集合,它为开发者提供了创建特定平台、操作系统、硬件或软件框架的应用程序所需的工具。这些工具包括但不限于:库文件、文档、示例代码、调试工具等。引用[3]则强调了SDK设计的一些原则,比如接口隔离、易用性、向后兼容和文档编写的重要性。 总结SDK的关键点: 1. **工具集合**:SDK不仅包含API(应用程序编程接口),还包括编译器、调试器、文档、示例代码等,形成一个完整的开发环境。 2. **目标明确**:每个SDK都是针对特定平台或框架(如Android SDKWindows SDK)设计的,帮助开发者快速构建应用。 3. **与API的关系**:API是接口规范,定义了如何与软件组件交互;而SDK是更广泛的工具集,通常包含API实现和其他辅助工具。 例如,Android SDK提供了开发Android应用所需的所有工具,包括Android Studio(IDE)、adb调试工具、模拟器以及各种库文件。 **实际应用场景**: - 移动开发:使用Android SDK或iOS SDK开发手机应用。 - 游戏开发:Unity SDK提供游戏引擎和跨平台支持。 - 云服务:AWS SDK封装了调用云服务的复杂逻辑。 §§相关问题§§ 1. SDKAPI有什么区别? 2. 如何为一个新的硬件平台设计SDK? 3. SDK开发中如何保证向后兼容性? </think> ### SDK 的定义详解 SDK(**S**oftware **D**evelopment **K**it,软件开发工具包)是**一套用于开发特定平台或框架应用程序的工具集合**。其核心定义为: 1. **工具集合的本质** SDK 包含开发、测试和部署所需的完整工具链: - 核心组件:API 接口文件、库函数、编译器 - 辅助工具:调试器、文档生成器、模拟器 - 示例资源:代码案例、技术文档、测试数据 *类比:如同木匠的工具箱(锤子、尺子、钉子),SDK 提供程序员所需的“开发工具组合”*[^1]。 2. **与 API 的关键区别** | **维度** | API | SDK | |----------------|--------------------------------|------------------------------| | **定位** | 服务访问接口规范 | 完整开发环境 | | **范围** | 定义数据交互协议 | 包含API+工具+文档+示例 | | **交付形式** | 接口描述文档 | 可执行文件+库+集成开发插件 | | **使用场景** | 跨系统调用服务 | 特定平台原生应用开发 | *示例:Android SDK 包含 API 接口、模拟器、ADB 调试工具,而 Google Maps API 仅提供地图服务调用规范*[^1][^2]。 3. **核心设计要求** 根据引用[3]的工业实践原则: - **接口隔离**:模块化设计,如支付 SDK 分离订单创建/查询接口 ```java // 示例:支付SDK接口设计 public interface PaymentService { void createOrder(Order order); // 独立订单接口 OrderStatus queryOrder(String orderId); // 独立查询接口 } ``` - **向后兼容**:新版 SDK 必须兼容旧版应用(如微信 SDK 保留过时方法至少两个大版本) - **易用性优先**:提供开箱即用的默认配置,减少复杂参数 - **文档完备性**:包含快速入门指南、API 参考、故障排查手册[^3]。 ### 典型 SDK 实例剖析 - **Android SDK**:含 Android Studio IDE、ADB 调试工具、系统镜像 - **AWS SDK**:提供云服务 API 封装 + 凭证管理工具 + CLI - **Unity SDK**:集成 3D 渲染引擎 + 物理引擎 + 平台发布插件 > SDK 的本质是**降低特定领域开发门槛的工具包**,例如使用 TensorFlow Lite SDK 可在移动端快速部署 AI 模型,无需从零实现神经网络计算。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值