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 条评论
登录 后参与评论

相关文章

来自专栏cloudskyme

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

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

3465
来自专栏圣杰的专栏

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

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

2239
来自专栏大葡萄元元

开发一款app从PHP到API接口

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

3531
来自专栏古时的风筝

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

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

943
来自专栏互联网技术栈

Zookeeper 使用场景

821
来自专栏C++

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

1091
来自专栏Android 开发者

Android 开发者 | 应用兼容性注意事项

2583
来自专栏魏琼东

基于DotNet构件技术的企业级敏捷软件开发平台 - AgileEAS.NET平台开发指南 - 实现业务

业务分层         依据行业经验来看,分层是解决复杂问题的简单方法,通过分层,可以把一个复杂问题分解为不同层次应用的小问题,解决各层小问题的难度小于总的问...

19410
来自专栏Java技术栈

到底什么是分布式系统?

分布式系统背景 说分布式系统必须要说集中式系统,集中式系统中整个项目就是一个独立的应用,整个应用也就是整个项目,所有的东西都在一个应用里面。 如下图所示 ?...

3359
来自专栏hotqin888的专栏

HydroCMS水利设计管理系统,基于beego框架

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hotqin888/article/det...

1132

扫码关注云+社区