前言
电信的编解码插件本意上是可以让我们的开发更加灵活,但是你好歹把文档写明白啊。。。同时在正常的生产中我们的产品不可能只使用电信的模块,有时甚至是客户要求使用移动还是电信的模块,所以兼容性给我们的体验非常直观!我们先不考虑兼容性问题,先把流程走通吧还是!
编解码插件的两种形式
1、线上编辑
当大家刚看到线上编辑的时候内心一定非常激动,想咋改咋改,而且看上去非常直观,但是当你真正用到这个页面时估计会懵逼,在定义profile的时候相信你已经发现了,字段类型只有int 和string类型,而且string类型是用ascii码传递的,而在线编解码工具规定,profile中字段是什么类型编解码就必须使用什么类型去接受!总之,非常难用~~,不推荐大家使用!!
2、离线编解码插件
离线编解码插件活动空间就比较大了,首先这个东西是一个jar包,当设备有上传信息的时候会调用你这个jar包中的一个接口,在接口内部你可以任意操作,然后根据不同的上传类型(根据解析16进制码流得出)传到不同的profile 中的对应的 service 中去(根据serviceId);下发也是同样的道理!但是捏,电信不可能什么东西都让你往他的服务器上传的,所以需要人工审核!
总结:华为官方的文档是不推荐使用离线编解码插件的,我们最开始也不太想用,太麻烦了,而且一旦修改就要现申请,但是最后大家都没研究透怎么使用在线编辑的方式,有能够吃透的大神欢迎留言!
下载离线编解码插件包包
如果你想在电信的文档中找到这个编解码插件的样例估计会很难,首先它没有一个明确的位置,其次电信网站非常卡点一下半天不动,所以我们是作者去华为的物联网平台文档去找,果然他就在 这里!
这是一个java 的 maven项目,下载完成之后我们来一起看下它的结构!
包包里有什么
如图所示:
codeDemo里面有两个文件夹,第一个文件夹是编解码插件上传格式,这里暂且不叙,等我们走到上传的时候在详细了解!
第二个文件夹中是项目,没错就是它!直接导入!
正常的maven项目导入过程,不多说了。
导入完成,项目结构如下图所示
这个地方乍看上去是个普通的项目,其实很有讲究哟!
没想到,你是这么不正经的包包
到了看项目结构就要先了解一下编解码插件包了,以下是上传的编解码插件包的要求:
1、产品已定义profile
2、插件包中应存在package-info.json文件
3、package-info.json文件中bundles.bundleName的值应为:‘设备类型-厂商Id-模型’
4、package-info.json文件中model的值与产品profile中的应保持一致
5、package-info.json文件中deviceType的值与产品profile中的应保持一致
6、package-info.json文件中manufacturerName的值与产品profile中的应保持一致
7、package-info.json文件中packageType的值应为’CIGPlugin’
8、package-info.json文件中version和bundleVersion的值应保持一致
9、package-info.json文件中platform的值应为’linux’
10、package-info.json文件中specVersion的值应为’1.0’
11、package-info.json文件中应有bundles字段值
12、package-info.json文件bundles.fileName的值应为编解码插件jar包中的./META-INF/MANIFEST.MF文件中[Bundle-Name的值]-[Bundle-Version的值].jar
13、package-info.json文件bundles.bundleVersion的值与编解码插件jar包./META-INF/MANIFEST.MF文件Bundle-Version的值应保持一致
14、package-info.json文件bundles.bundleName的值与编解码插件jar包./META-INF/MANIFEST.MF文件Bundle-Name的值应保持一致
15、插件jar包中的./META-INF/MANIFEST.MF文件中Bundle-Name与Bundle-SymbolicName的值应保持一致
16、插件jar包中应存在./META-INF/MANIFEST.MF文件
17、插件jar包中的./META-INF/MANIFEST.MF文件不应包含Export_Package属性
18、插件jar包中的./META-INF/MANIFEST.MF文件应包含Bundle-Name
19、插件jar包中的./META-INF/MANIFEST.MF文件应包含Bundle-Version
20、插件jar包中的./META-INF/MANIFEST.MF文件应包含Bundle-SymbolicName
21、插件jar包中./OSGI-INF目录下有且只有一个xml文件
22、在插件jar包中./OSGI-INF目录下的xml文件中,scr标签应包含name属性,implementation标签应包含class属性,provide标签应包含interface属性
23插件jar包中./OSGI-INF目录下的xml文件implementation标签的class属性值应与scr标签下的name属性值保持一致
没错足足有23条,那么我们怎样去满足这23条要求呢? 请看下回分解。