SDK开发经验之谈:
一、SDK是什么?
包含特定功能的软件开发工具包。一些重复使用性很高的功能模块和代码
二、这个工具包应该具有什么样的特征?
1-简洁易用
①一个好的SDK,应该让使用者不用花太多时间去学习如何使用。接口尽量简单易懂,包括接口命名,形参命名,以及异常抛出,都要明确。最好每个API都有对应注释。方便进入源码查看。
②一个SDK 包(比如android里面aar),它对外开放的最好只有一个类,由它作为整个SDK的入口。
③不要依赖外部的其他的第三方包或者库,因为这样,会受到其他库的牵制,使用起来也不方便。
总之一句话,一个sdk封装的好不好,就看使用者使用的爽不爽
2-安全
①SDK不应该入侵宿主代码,也就是说,SDK最主要的作用,应该是接收参数以及输出结果,不能将 调用API时传入的某些对象进行改造,Android java也是有指针的,尽量不要改变传入的对象和数据结构,System.arraycopy和对象clone的使用(比如,传入了一个ArrayList,SDK内部对这个list进行了增删,这种类似的动作最好不要做);
②由于android 的apk,或者SDK 的aar包,都是可以被反编译的,虽然可以用混淆的方式来稍微抵抗一下反编译,但是还是有可能泄漏核心代码。对于这种情况,使用JNI调用核心代码的方式,将核心代码放在动态库文件so里面,是不错的解决办法。
③权限最小原则,本SDK内不需要用到的权限,就不要在注册文件里面写。
3-稳定
①SDK的迭代周期相对较长,也就意味着,一个版本的SDK可能会维持很长时间,这段时间之内,要保持接口始终可用。
②另外一点,如果遇到了SDK迭代,需要删除某些API,也不能立即删除,而是要先标记该方法过时,然后在下下次迭代时,予以@hide,或者直接删除。
③android版本很多,为了让SDK兼容更低的版本,有时候需要在一些方法的上头加上可调用的最低SDK版本号,或者在java代码中判定当前的SDK版本,然后根据不同版本走不同的程序分支。
4-高效
①如果程序运行过程中进入了SDK的某个接口,然而这个接口的执行效率相当低,拖慢了整个程序执行的效率。那么这种SDK是不合格的。
②编写SDK内部代码,应该注意尽量减少内存损耗,电量损耗,CPU占用等;当然,如果直接在SDK内部就造成了内存泄漏,那么这个SDK肯定不合格。
5-健壮
①作为一个公用模块,什么样的使用者什么样的情况都有可能,所以方法流程严谨,错误引用处理,和简单的一个就是接收到的对象和数组都要进行判空,为空之后的流程
②无论使用者怎么调用都不能引起使用者软件报挂问题,把相应问题通过对外接口传递出去
③要形成闭环,不能出现有头没尾的情况,使使用者的在使用过程中出现断层,而不能圆业务逻辑,即使出现抛异常问题
网友评论