最近在ios和android SDK中写EventSource进行事件监听,实现动态显示列表功能,如果你做一个聊天室,聊天室里面的人员列表会随着人员的入会和退会进行不断的更新,这就需要EventSource了,就是对服务器端的事件进行监听,如果有人员入会,会收到入会事件,如果人员退出会收到删除事件,如果人员被静音等,会收到删除事件。
这些事件都需要EventSource在客户端进行监听,然后上报处理。
在晚上找了一个开源的库,其中我IOS端引入的开源库为:
object c event source
这个库采用swift语言编写,用起来还是蛮舒服的。
android使用的开源库为:
android eventSource
这两个都进行了实验,好用。
android的eventSource中引入了网络框架netty,所以我继续引入netty,但是netty中使用了javax servlet,所以我又引入了 javax servlet,在android中 build make project时,不知道为什么总是把netty 和 servlet中的资源文件也会打入到对应的class.jar中,如果我把sdk给上层,就会出现资源文件重复,报告如下错误:


这个目前我没有想到很好的解决方式,目前的解决方案是:
1、我把打包后的jar,解压后,删除重复打入的资源文件,然后再重新进行打包。
这种方式有一个问题:就是每次发版本都需要手工再删除资源文件,重新进行打包。会很麻烦。
2、直接把对应的netty 和servlet的jar包中的对应的资源文件去除,这样netty和servlet相当于经过了特殊处理,只要给一次即可。
这两种方式都不是很好的解决方式,目前只能用第二种先保证版本发布。
以后的尝试解决方式:据说这是gradle的一个bug,在0.7版本中有,我们现在的gradle太陈旧了,依然用的0.7的版本,尝试升级一下gradle,看下打包是否还有问题。
目前的解决方案中打包过程如下,首先把netty和servlet进行解压:

解压以后,删除对应的重复的资源文件,然后进行重新打包:
打包命令:
jar cvf servlet-api-2.5.jar javax/*

netty打包命令:
jar cvf netty-3.5.7.Final.jar org/*

网友评论