什么是SDK?

本文主要解释了SDK的含义,SDK即软件开发工具包,本教程主要讨论Windows平台应用程序开发的SDK。为解释SDK引入了API、DLL等概念,介绍了DOS和Windows中API的不同调用方式,说明了DLL的作用,指出SDK提供开发所需文件等,还提及了SDK编程。
部署运行你感兴趣的模型镜像

    经常会在技术论坛里面看到类似这样的帖子:“什么是 SDK?”,“请高手讲一下 SDK 是什么东东?”……

    其实很简单,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 函数。

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

<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 模型,无需从零实现神经网络计算。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值