SDK设计心得之架构和资源

由于SDK的特殊性,所以对于SDK的开发来说,一开始对于SDK的一些通用的整体的元素的设计至关重要。因为SDK(尤其很多平台SDK,使用的应用成百上千)一个及其细微的调整都会影响很多开发者的版本周期。因此前期的设计显得尤为重要。关于这部分内容,我会分两篇来介绍,这篇重点介绍SDK的架构和一些资源的使用方式。另另一篇SDK设计心得之接口设计将重点介绍具体接口的设计。

最近一直看Android training相关的东西,慢慢发现拖太久了,这部分内容没之前想的那么清楚了,看来以后还是要勤快。目前先按照之前的规划全部写完,后续有一些想法再陆续补充。

关于SDK架构

对于这部分内容,处于种种原因吧,就简单介绍下。其实SDK的架构都差不多,类似与系统架构。一般:

  • 大体上可以分为三层。API层、Framework层、Module层。
  • API层最容易理解,他是对整个SDK的对外封装,经过这一层以后仅仅把需要暴露给外部的接口、结构体声明出来,向开发者隐藏具体实现。
  • Framework层是核心层也是最底层,完成SDK的初始化、模块管理以及一些公共基础工具,例如数据存储、网络请求处理等。也有可能再细分一层libware,主要承载一些通用方法(如字符编码、文件读取、包信息读取等)的实现以及对通用库的封装(例如AsyncHttp等)
  • Module层严格意义上应该称中间层,这一层一般是具体模块的业务逻辑,主要是具体的功能实现。
  • 一般对于Module也又按照上面的三层结构来划分,做到各个模块之间的功能独立。

关于SDK目录层级

一般SDK的层级取决于SDK的复杂程度。初期我们的SDK比较简单,只有两层如下:

- SDK
	- API
	- Module
	- Framework
- SDKDemo

图中文件结构仅是为了说明问题哈,最终交付给游戏的内容是一个jar和一个demo工程。

后来随着SDK的发展,需求的不断增加,SDK的内容也逐渐增加。加入资源和JNI文件以后,只使用两层结构就出现了比较多的问题。于是MSDK的结构变成了三层。

- SDK
	- API
	- Module
	- Framework
- SDKlibrary
	- res
	- jni
	- libs
	- ...
- SDKDemo

此时的目录结构下,最终交付给游戏的内容将会包括:一个包含了SDK的代码jar以及资源和JNI的SDKLibrary工程(一个Android Library工程)和一个Demo工程。

目前最新的SDK开始支持Android Studio,因此我们的SDK的包又做了调整。除了上面的内容,还会提供一个SDK的aar给游戏。

关于资源

关于资源就几点:

  • 所有的资源都放在Library中,然后SDK直接通过反射调用。这样可以方便SDK代码的打包、混淆等。
  • 所有的资源和代码一样都是用统一前缀,并且可以区分到模块。例如com_example_sdk_module_XXX.xml;这样即有利于不同模块的资源区分,又可以防止资源冲突。

好吧,这里就再讲一个故事,前期我们的资源文件命名并不是很规范,都是直接随便用驼峰命个名。然后悲催的故事就这样埋下了伏笔。合入另一个SDK的,时候,就是那么巧,我们和他们的资源文件命名一致冲突了~~~呵呵呵呵!当时就在想,上天其实对我们不薄,要是我们的名字和开发者接入的别的SDK的资源文件名称冲突了,那才真真丢人呀。我们遇到的这种合入的时候就发现的,只是多了点工作量,其余都还好。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Vue ssr

php,vue,vue-ssr 三版本页面对比Demo

目前我这边的web页面,都是采用php+smarty模板生成的,是一种比较早期的开发模式。好处是没有现阶段常用的前后端分离出现的首屏问题,因为其本身就是服务器渲...

4440
来自专栏古时的风筝

学了两天 react,乱讲一下学习思路,顺便弄了一个脚手架

现在的项目基本上都是前后端分离的,后端就先不提了。前端的框架也是层出不穷,使用最多的就是 angular、vue、react 。angular 是前几年用的比较...

1073
来自专栏我是攻城师

如何使用Jekyll+GitHub Pages搭建个人博客站点

4217
来自专栏编程

开发一款app从PHP到API接口

一、先简单回答两个问题: 1、PHP 可以开发客户端? 答:不可以,因为PHP是脚本语言,是负责完成 B/S架构 或 C/S架构 的S部分,即:服务端的开发。(...

4149
来自专栏大葡萄元元

开发一款app从PHP到API接口

答:不可以,因为PHP是脚本语言,是负责完成 B/S架构 或 C/S架构 的S部分,即:服务端的开发。(别去纠结 GTK、WinBinder)

5171
来自专栏cloudskyme

众推平台架构——分布式爬虫

分布式爬虫架构 经过新一轮的投票,项目的范围已经基本确定。 ? 大家决定 全力以付,集中攻克“分布式爬虫”。 分布式爬虫架构1 使用队列,即生产者,消费都模式。...

3585
来自专栏C++

python笔记:#006#程序执行原理

1211
来自专栏CSDN技术头条

微博宕机背后,高并发有哪些常见问题?

上周,赵丽颖、冯绍峰结婚官宣造成微博宕机,那么回归技术,面对如此大的高并发流量和屡次崩溃的系统,作为程序员是否有较好的方法来应对及解决?在此,技术专家丁浪为我们...

3831
来自专栏圣杰的专栏

DDD理论学习系列(9)-- 领域事件

1. 引言 A domain event is a full-fledged part of the domain model, a representati...

2639
来自专栏韩伟的专栏

分布式本质论:高吞吐、高可用、可扩展

大量用户访问同一个互联网业务,所造成的问题并不简单。从表面上看,要能满足很多用户来自互联网的请求,最基本的需求就是所谓性能需求:用户反应网页打开很慢,或者网游中...

3.1K0

扫码关注云+社区

领取腾讯云代金券