近期个人由于公司需求,开发一个简单的sdk。其实sdk中并没有什么大批量的处理逻辑,只是提供几个简单的接口。但是里面比较特殊的是需要提供一个页面,这个页面用于显示一些接口回调的数据。
其实sdk大家一看到,不由自主的会想到是一些提供数据,或者提供一些封装好的方法或者逻辑算法等。但其实sdk 面向很广泛。可以做一切开发中能做到的。但是由于他比较偏向于逻辑,所以属于抽象层,一般实现起来会比较费脑力,但是我想如果经常开发这种接口 的人肯定就不会有这种感觉了。
一开始写的话我就在想写一个sdk那里面至少得有点内容吧。就是怎么说也得提供或者封装一些复杂的算法,或者逻辑。但是最终令我想不到的是,需要我的知识一个空框架,并不需要提供很复杂的功能。
1、 在sdk 中如果需要用到一些资源文件,例如一些预先装好的图片素材等等,或者一些预先写好的布局,这些资源我们平时开发都是直接通过id来获取的,但是如果封装成sdk的话。你的这些id由于编译的机制值是会变的。所以我们不能通过正常的方式来获取这些资源文件。在此我们需要通过java中的反射机制来获取这个id,通过传入的上下文,资源所属类型例如(id,layout,values、drawable、attrs、等等),接下来就是具体的名字了。其中上下文最主要的就是来获取包名。sdk 我们一般肯定是需要封装成jar 包的,如果在eclipse 中很简单,对工程进程导出,为jar。选择所需要的文件主要是一些源文件,资源文件、第三方的包等等。如果实在as中打包的话我们可以再gradle中添加task 然后通过执行这个task 导出jar 。最后我们将这个jar 引入我们的工程中,先通过初始化,然后一步步来完成接口的调用。但是我在完成demo引入jar包的时候出了问题,就是打开这个页面的时候显示的一直是demo中定义的布局。并不是我们在sdk 中预先写好的页面。切会有一些控件转换出错的问题。当时解决了很久,愣是找不到问题所在。最终通过请教别人得知。
2、我们在sdk中用到的静态页面需要导入到demo的工程中,不然资源还是会找不到的。然后按照这种方式试了一下,发现的确能达到这种效果。
其中还有一个需要注意的地方就是你所打开的页面必定是一个activity 那么你也需要在你的demo的mainfest页面进行注册,不然这个页面会找不到的。
其实我所说的这种类型的sdk的开发还是挺常见的。比如一些第三方的支付sdk 都会用到他们自己定义的支付页面我们需要跳转,然后里面会用到向我们一样的注册页面。引入布局等等。
最后想说的是,当你觉得这样比较麻烦的时候我们还有一种方式,是提供动态的页面。就是所有的控件等,都是通过动态的代码生成,这样就不需要这些资源文件,也就不会出现上面的问题了。
但是动态页面不好的地方就是在于页面我们难度相对较大。如果很复杂的页面我们建议还是通过静态页面相对比较简单。