项目中需要把连接服务器的部分做成一个service并生成一个jar模块。其他产品就可通过这个包来快速的开发连接服务器的应用软件。做成一个service的优点是:
1. 在后台运行,可以一直保持与服务器的连接
2. 服务可以只对外提供接口,具体功能在服务内部实现
3. 增加项目代码的耦合性
当然你不想拿着一个service的源代码分享给别人。你需要把这个服务打包成一个jar包。并且打包的时候可以选择代码混淆,加强代码的易破解性。
我打包这样一个服务也不是突发奇想。是在使用佳博打印机开发项目的时候,使用了人家的连接sdk有的感触。我们开发的时候只需把jar库导入到项的libs文件夹。然后就可以通过sdk接口文档描述的函数来初始化打印服务并使用打印功能。
那么接下来就说一下怎样开发服务并且打包成一个jar文件并对外提供接口。即完成一个sdk的制作。
这里先说一下打包主要是在打包方面费了很多时间。首先我们知道eclipse可以很方便的打包为jar。但是由于使用了一段时间Android studio 所以就想在Android studio 导出jar包。我也是第一次这样做。遇到了好大的阻力,Android studio那一大堆文件夹真要把人给逼疯了。
本来看着一篇文章对Android studio 生成jar做了验证。文章地址为:
http://blog.csdn.net/ta893115871/article/details/46955791
但是在实际操作中,新建了一个存放service的module(文章里提到的生成库的叫法)作为主工程的子项目,但是这样的话主项目无法调用这个module里面的服务。让测试很沮丧。
虽然不能测试,但是好歹生成一个jar包,里面也包含了我需要打包的文件,但是呢,关键是但是,给附加了其它的文件是个什么意思。哎算了吧。上面截图中左下角的是使用jd-gui(java decompiler)查看jar包内容的截图。右面为生成的jar文件,背景为工程。
Android studio有自己的好处,但是在自己制作sdk的时候还是使用eclipse吧。当然把Android service代码和调用代码放在一个工程下在Android studio是可以正常使用的,下面打开几个我使用的第三方sdk的jar包看看:
这是微信的语音识别sdk的jar包的内容
这是我用eclipse生产的jar的内容,因此我觉得腾讯是用的eclipse打包的jar文件
Eclipse 打包jar的方式参照文章:http://blog.csdn.net/wantianpei/article/details/7638483
Eclipse打包jar的时候可以选择哪些文件打包到jar里.
制作所用的工具以及方式已经说明白了,下面接着介绍关于service的详细开发。
我们一般开发一个sdk当然是定义远程的service,也就是通过bingservice启动的方式来启动的服务。
同时,应用和服务通信的方式有Messenger和aidl,具体区别看别人的文章吧。
我们这里是开发一个sdk,因此选择了使用aidl,当然如果你的sdk并不包含任何服务,就没有这回事儿了。
现在以一个例子描述创建一个服务并调