惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

I
InfoQ
Hugging Face - Blog
Hugging Face - Blog
月光博客
月光博客
量子位
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
S
SegmentFault 最新的问题
罗磊的独立博客
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
L
LINUX DO - 最新话题
T
Threatpost
Cisco Talos Blog
Cisco Talos Blog
The GitHub Blog
The GitHub Blog
V
V2EX
SecWiki News
SecWiki News
P
Privacy & Cybersecurity Law Blog
Forbes - Security
Forbes - Security
T
Troy Hunt's Blog
S
Security @ Cisco Blogs
Martin Fowler
Martin Fowler
Attack and Defense Labs
Attack and Defense Labs
A
Arctic Wolf
C
CXSECURITY Database RSS Feed - CXSecurity.com
The Register - Security
The Register - Security
Blog — PlanetScale
Blog — PlanetScale
The Last Watchdog
The Last Watchdog
T
Tor Project blog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
C
Cisco Blogs
P
Proofpoint News Feed
O
OpenAI News
Hacker News - Newest:
Hacker News - Newest: "LLM"
小众软件
小众软件
雷峰网
雷峰网
H
Heimdal Security Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
Stack Overflow Blog
Stack Overflow Blog
Engineering at Meta
Engineering at Meta
云风的 BLOG
云风的 BLOG
Last Week in AI
Last Week in AI
C
Cyber Attacks, Cyber Crime and Cyber Security
Webroot Blog
Webroot Blog
C
Check Point Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
W
WeLiveSecurity
T
Threat Research - Cisco Blogs
人人都是产品经理
人人都是产品经理
Hacker News: Ask HN
Hacker News: Ask HN
The Hacker News
The Hacker News
V
Vulnerabilities – Threatpost
Microsoft Security Blog
Microsoft Security Blog

博客园 - 灰色飘零

Hilt 依赖注入实战指南 Android R8适配全流程详解 AI Coding逐步引导式开发,从零到一生成完整技术方案 AI 时代的新项目技术最佳选型 如何建立人类与 AI 的协作习惯 【实战】用 AI 吃透 Git Commit:从代码修改到原理拆解 + 学习规划 端侧大模型实践 - 生成预测模型&模型轻量化&端侧部署 端侧大模型实践-ESC上实现大模型轻量化功能 端侧大模型实践 - Hadoop + Spark 配置方案 端侧大模型实践 - 端侧大模型极简版Demo版落地概述 Agent 会重构数字服务入口与分发逻辑,但不会彻底消灭 APP 解构 AICoding 底层逻辑:人的能力定义 AI 边界 告别AI概念混乱!一次性讲透 Agent Skills、Rules、Prompt、MCP AI编程的实践场景与未来可能:一场开发范式的演进 Android WebView不显示Mixed Content的问题解决方案 Android SDK 组件化 AAR 打包集成 【工信部】App违法违规收集使用个人信息行为认定方法 Git 远程删除分支后,本地 git branch -a 依然能看到的解决办法 Java 安全密码学 Android使用ContentProvider初始化SDK库方案总结
移动端 SDK 开发经验总结及梳理
灰色飘零 · 2021-11-20 · via 博客园 - 灰色飘零

做Android开发很多年了,多次思考过App开发和SDK开发在架构方面及其他各个方面的异同,以及各自方向开发时需要注意的事项。

下面是我个人对SDK开发的理解及相关经验分享。

一、SDK 开发概念

SDK即Software Development Kit,通常是为辅助开发某类软件,而编写的特定的软件包、框架集合。同App开发不同,一般我们开发的SDK为相对独立的业务、拥有特定功能的工具集合,使用SDK的一般为B端的用户,一般是集成SDK来实现相关功能的App端开发者,我们会以 代码 + Demo + 文档 的方式交付。

二、SDK 开发建议

1. 便于参考的Demo

集成 Demo 通常是一个简单的 App,用来展示如何快速地接入 SDK。Demo 的源码需要保证方便使用者参考,其版本变更策略和 SDK 版本的变化保持一致。它的开发原则也要与 SDK 一致,确保高质量的交付。

2. 方便查阅的文档

接入文档用来告诉 SDK 使用者,如何使用 SDK、详细使用步骤和可能发生的问题。文档内容包括:更新记录、基本信息、API 说明、集成步骤、FAQ等。好文档的标准就是清晰明了,通俗易懂。一个完全不懂 SDK 的开发者看着文档就能对接,对于经常遇到的问题要逐条列出,专业名词要有对应的解释。

3. 慎用黑科技

开发SDK的人可以注意下以下几个点:

  • 能用系统的API解决的,就不要使用第三方,减少对其他库的依赖
  • 黑科技虽然好,但是能不用的就不要用
  • 多考虑第三方带来的影响
  • 依赖其他SDK的,尽量别打包在一起
  • 能不用单例的就尽量少的使用
  • 核心代码的安全性

三、SDK 开发要领

SDK是需要我们提供给其他开发者使用的,简洁和高效的对接是非常有必要的。如果对接一个SDK很繁琐,或者需要关心很多业务之外的问题,那么说明SDK的设计就是存在问题的。

1. SDK 易用性

SDK本身就是一些公用的代码或者业务的集合,内部做了很多工作,实现了很多细节。 对于开发者而言,一个好的SDK应该是简洁易用的,不应该花费太多时间去对接。通过阅读Demo的代码和文档,就能对接好,才是SDK易用性的体现。

2. SDK 稳定性

我们必须要保证设计的SDK是稳定的,所以在SDK的设计及实现阶段,最好做到以下几点:

a). 尽量保证对外提供的API是稳定的,非特殊情况不要更改。

b). 必须要保证有稳定的业务支撑API的使用。

c). 尽可能屏蔽掉SDK的迭代过程,尽量让用户升级时只需要关注版本号即可,避免出现不必要的升级适配操作。

3. SDK 高性能

性能问题,无论是普通的SDK开发还是应用的开发,都需要考虑到。作为SDK的开发者,我们必须时刻注意到性能问题,否则会影响到接入SDK的App的整体性能。

一般的最需要关注的就是内存及电量这块的使用情况。

a). 优化SDK的内存占用。一般 SDK 和 App 运行在同一进程,此时 SDK 要管理好自己占用的内存,合理分配,注意释放,并避免出现内存抖动。

b). 优化电量消耗。尽量避免在后台运行一些不必要的服务,并优化SDK使用时的CPU使用情况。

四、SDK 设计规范

API 设计在任何开发中都非常重要,许多时候软件的质量好坏体现在 API 的设计上。

在普通的应用开发中,API 只会在开发人员间流通,不会暴露给非本应用开发的其他人员。但是 SDK 作为一种服务,需要向开发者暴露一部分 API,这样才能使用 SDK 的服务。

1. SDK 结构清晰

SDK提供给别人使用的时候,结构清晰非常重要,以下几个点,可以供大家参考:

  • 文件组织方式清晰明了:给别人的SDK,解压下来后第一眼就能够分辨出每个文件夹是什么作用。资源文件,文档,demo,库,应该很容易进行区分。
  • 类名前缀和包命名或者缩写要一致:一定要以正常思考方式进行命名或者缩写。建议以驼峰命名方式。
  • 代码风格一定要一致:不要让人感觉接入过一个SDK,感觉到每一行代码都是不同人操刀的。
  • 函数命名遵循共性,表明其用途:命名这个问题,每个人都有自己的一套,但自己。
  • 代码注释要规范和清楚:接入者不一定回去仔细看文档,所以接口里面的注释必须要认认真真写。
  • API的访问权限必须要控制:不应该出现一些不需要暴露出来的方法,必须控制好API的访问权限,避免出现因此导致的未知异常。

2. SDK 方便调试

SDK提供给别人使用的时候,方便调试是很重要的,能减少对接过程中的问题反馈,以下几点可以参考:

  • 可以对外提供当前SDK状态的一些属性:SDK应该提供一些方法和属性,让接入者知道SDK的当前状态,但是绝对不能让用户直接设置这些状态。
  • SDK功能正确:编译无警告和错误,支持最新的特性,这是用户自行调试解决问题的前提。
  • API调用简单:SDK好用不好用,看调用API就感受出来了。
  • 便于调试:打印出SDK debug日志,给出一些提示性的信息,方便排查问题。
  • API回调参数明确:SDK调用完,需要在合理的实际给用户结果,设计好这些也能便于用户调试。

一般开发SDK是需要包含的辅助功能如下(这里指的是除去主业务功能之外的其他功能):

  • SDK使用日志系统,自由筛选不同日志。
  • Crash日志本地收集。
  • SDK版本控制系统,方便升级及排查问题。

以上这些功能不仅可以方便开发和调试,也提高了测试同学的效率。