android模块化app开发-3远程动态更新插件
来源:互联网 发布:淘宝联盟文案生成器 编辑:程序博客网 时间:2024/05/19 20:42
http://blog.csdn.net/o1587790525/article/details/13014283
前两章用apkplug框架实现了两个基本的功能,但它们都是在本地安装测试的,在实际开发过程中我们肯定是需要与服务器联网将更新的插件远程推送给用户手机客户端。今天利用apkplug提供的插件托管服务轻松实现插件的远程部署与客户端更新。
一,还是利用上一章所建的主应用,只是在主应用的assert文件夹中添加一个插件"BundleService0.0.2.apk",该插件是apkplug官网提供服务插件,它封装了与托管服务器通讯,文件下载,文件缓存等功能只留出了简单易用的接口给开发者,开发者通过接口可以任意设计自己的应用界面而不必关心通讯细节。
二,编写我们自己的应用更新插件
首先新建一个工程MyApkplugService 照例编写插件所必须的几个java类和plug.xml文档。工程结构如图
在这个插件中我们除了需要添加osgi.jar包以外还需要添加installService0.0.2.jar来与我们的BundleService0.0.2.apk插件通讯。
环境搭建好了现在我们可以在MyApkplugService通过与BundleService0.0.2.apk插件通讯更新下载插件了。
三 编写自己的应用管理插件
BundleService0.0.2.apk插件对插件管理的整个过程都封装的很好,提供给开发者一个灵活而方便的操作方式,其接口主要有
1.appSearch.java 通过这个接口我们可以任意组合查询条件如插件 appid,插件名称 appname,查询页page,插件关键词b_keywords,插件添加时间排序方式b_order等
2.appDownload.java 通过这个接口可以实现插件的自动下载安装
3.checkupdate.java 通过这个接口我们可以查询服务端插件与本地插件的差异,进而进行以后的操作
简单说明了托管服务的接口下面就通过具体的代码讲解其使用过程
我们的MyApkplugService只使用一个MainActivity做为显示界面。
首先我们编写一个search()函数来查找BundleService0.0.2.apk提供的appSearch接口,通过这个接口我们就可以查询服务器上的插件了代码入下
01
/**
02
* 插件搜索服务 appSearch 为BundleService提供的一个插件搜索服务
03
* @param bean appSearchBean 可以填写你搜索插件的一些搜索条件 比如按关键词搜索 按时间排序 按模糊名称搜索等
04
* @param callback 为服务结果回调接口 开发者可以通过该接口可以得知返回结果进行后续操作
05
*/
06
public
void
search(appSearchBean bean,AppSearchCallBack callback){
07
ServiceReference reference=BundleContextFactory.getInstance().getBundleContext()
08
.getServiceReference(appSearch.
class
.getName());
09
if
(
null
!=reference){
10
//获取appSearch服务因为BundleService自动启动所以服务应该能搜索到
11
appSearch service=(appSearch) BundleContextFactory.getInstance().getBundleContext()
12
.getService(reference);
13
if
(service!=
null
){
14
//搜索到服务就调用该服务与云平台通讯
15
service.search(bean,callback);
16
}
17
BundleContextFactory.getInstance().getBundleContext()
18
.ungetService(reference);
19
}
20
}
当我们获取到appSearch 接口以后便可以service.search(appSearchBean bean,AppSearchCallBack callback);方法进行查询了。
appSearchBean.java类是一个查询类bean我们可以传入我们的查询条件
AppSearchCallBack.java类是一个回调函数,异步查询完成以后的值将通过这个回调函数返回给我们
以下便是我们初始化时查询代码
01
//从云平台查询插件
02
public
void
updataDate(){
03
//初始化查询appSearchBean 查询该主应用中已添加插件
04
appSearchBean bean=
new
appSearchBean();
05
//该插件关键词为 ‘test’ (再后台管理平台设置)
06
bean.setB_keywords(
"test"
);
07
//按添加到主应用时间降序排列 时间分app上传时间和添加到主应用分组的时间
08
bean.setG_order(appSearchBean.order_desc);
09
//2013-10-15日上传或更新的应用
10
bean.setB_btime(
"2013-10-15"
);
11
//每次获取应用条数最多50条
12
bean.setPagenum(
10
);
13
//当前查询第0页
14
bean.setPage(
0
);
15
if
(apps.size()==
0
){
16
//调用 BundleService插件中的 appService服务查询
17
search(bean,
new
AppSearchCallBack(){
18
@Override
19
public
void
onSuccess(
int
stutas,msg msg,appSearchBean bean) {
20
//如果查询成功
21
if
(stutas>=
0
){
22
if
(msg.getStutes()>=
0
){
23
//如果云端返回的数据正确
24
//关于msg类详细请看api文档
25
//从msg类中获取符合查询条件的app
26
//通过appBean 开发者又可以调用BundleService提供的“插件下载服务”下载或更新指定的插件了
27
List<appBean> aps=(List)msg.getMsg();
28
for
(
int
i =
0
; i < aps.size(); i++) {
29
appBean ab=aps.get(i);
30
apps.add(ab);
31
}
32
//显示到页面商
33
MainActivity.
this
.getListView().post(
new
Runnable(){
34
public
void
run(){
35
adapter.notifyDataSetChanged();
36
}
37
});
38
}
39
}
else
{
40
//查询错误的操作
41
}
42
}
43
@Override
44
public
void
onFailure(
int
arg0,
final
String arg1) {
45
//查询错误的操作
46
}
47
});
48
}
49
}
很简单吧,通过这样就完成了客户端的开发工作。
四 注册帐号-->将主应用添加到服务器上 如图
将插件apk上传到服务器上并且将插件与主应用绑定 如图
添加完成以后我们也可以看该应用一个添加了的插件
设置插件的关键词(可以做为我们本地查询的一个条件)
至此整个过程便都操作完毕了,我们可以运行应用查看效果了 如图
点击运行
最后源码奉上
最后注意的是服务器以应用的包路径做为ID(主应用和插件都是),所以在服务器上包路径是不可以重复了(跟应用商店一样),如果你要用以上的源码实验请修改为你自己的包路径再上传。
- android模块化app开发-3远程动态更新插件
- android模块化app开发-3远程动态更新插件
- 动态更新android app
- android模块化app开发笔记-2插件间布局文件共享
- android 插件化 模块化开发(apkplug)
- android 插件化 模块化开发(apkplug)
- Android应用开发的插件化 模块化
- Android插件化,热修复,模块化开发
- android模块化app开发-4为APP减负
- android热插件,热更新,热修复,模块化
- android热插件,热更新,热修复,模块化
- iOS开发--动态更新插件、动态功能
- eclipse 插件开发 实现 远程更新
- js模块化插件开发
- android 开发 App下载更新
- android app开发之app本地更新
- android模块化app开发笔记-1环境搭建
- android模块化app开发笔记-1环境搭建
- jQuery deferred 对象的 promise 方法
- Android 多线程处理之多线程用法大集合
- iOS手势识别的详细使用(拖动,缩放,旋转,点击,手势依赖,自定义手势)
- SolrCloud Wiki翻译(3)Shards & Indexing Data
- iOS -- Crash处理方法总结
- android模块化app开发-3远程动态更新插件
- Judy矩阵--Judy.h文件
- shimmer/空气干扰/空间扭曲
- 苹果新的编程语言 Swift 语言进阶(十五)--协议
- poj1477 Box of Bricks
- 自动化测试 - 单元测试
- NFS客户端、服务器协商读写粒度(rsize、wsize)流程
- ios 获取当前wifi名称
- CentOS安装tomcat