前两章用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接口,通过这个接口我们就可以查询服务器上的插件了代码入下
02
|
*
插件搜索服务 appSearch 为BundleService提供的一个插件搜索服务
|
03
|
*
@param bean appSearchBean 可以填写你搜索插件的一些搜索条件 比如按关键词搜索 按时间排序 按模糊名称搜索等
|
04
|
*
@param callback 为服务结果回调接口 开发者可以通过该接口可以得知返回结果进行后续操作
|
06
|
public void search(appSearchBean
bean,AppSearchCallBack callback){
|
07
|
ServiceReference
reference=BundleContextFactory.getInstance().getBundleContext()
|
08
|
.getServiceReference(appSearch. class .getName());
|
11
|
appSearch
service=(appSearch) BundleContextFactory.getInstance().getBundleContext()
|
12
|
.getService(reference);
|
15
|
service.search(bean,callback);
|
17
|
BundleContextFactory.getInstance().getBundleContext()
|
18
|
.ungetService(reference);
|
当我们获取到appSearch 接口以后便可以service.search(appSearchBean bean,AppSearchCallBack callback);方法进行查询了。
appSearchBean.java类是一个查询类bean我们可以传入我们的查询条件
AppSearchCallBack.java类是一个回调函数,异步查询完成以后的值将通过这个回调函数返回给我们
以下便是我们初始化时查询代码
02
|
public void updataDate(){
|
04
|
appSearchBean
bean= new appSearchBean();
|
06
|
bean.setB_keywords( "test" );
|
08
|
bean.setG_order(appSearchBean.order_desc);
|
10
|
bean.setB_btime( "2013-10-15" );
|
17
|
search(bean, new AppSearchCallBack(){
|
19
|
public void onSuccess( int stutas,msg
msg,appSearchBean bean) {
|
22
|
if (msg.getStutes()>= 0 ){
|
27
|
List<appBean>
aps=(List)msg.getMsg();
|
28
|
for ( int i
= 0 ;
i < aps.size(); i++) {
|
29
|
appBean
ab=aps.get(i);
|
33
|
MainActivity. this .getListView().post( new Runnable(){
|
35
|
adapter.notifyDataSetChanged();
|
44
|
public void onFailure( int arg0, final String
arg1) {
|
很简单吧,通过这样就完成了客户端的开发工作。
四 注册帐号-->将主应用添加到服务器上如图
将插件apk上传到服务器上并且将插件与主应用绑定
如图

添加完成以后我们也可以看该应用一个添加了的插件

设置插件的关键词(可以做为我们本地查询的一个条件)
至此整个过程便都操作完毕了,我们可以运行应用查看效果了 如图


点击运行
最后源码奉上
最后注意的是服务器以应用的包路径做为ID(主应用和插件都是),所以在服务器上包路径是不可以重复了(跟应用商店一样),如果你要用以上的源码实验请修改为你自己的包路径再上传。
分享到:
相关推荐
在Android开发过程中,Android Studio是官方推荐的集成开发环境(IDE)。它提供了强大的功能,包括构建、调试和发布应用程序。本文将深入探讨如何在Android Studio中依赖远程的Gradle文件,以便于项目管理和版本控制...
Android 的 App Market 模式,软件开发者获得 7 成收入, 3 成用于系统维护。难点在于位置营销。 设备商通过卖设备、内置特色应用来获得盈利。也可以兼职专业软件开发者进行赢利。 Google 自身通过基于统一平台为...
通过分析和研究这个高仿QQ看房app的源代码,开发者可以学习到Android App开发的各个方面,包括UI设计、数据处理、网络通信以及性能优化等,对提升Android开发技能大有裨益。同时,这也是一个很好的实战项目,可以...
Drozer的强大之处在于它的模块化设计,开发者可以根据需要编写自己的插件,扩展其功能,以适应不断变化的安全威胁。同时,Drozer的社区活跃,持续更新和优化工具,使其始终保持在安全评估领域的前沿。 总之,Drozer...
在Android开发领域,构建一个完整的App涉及到多个环节,包括用户界面设计、数据管理、网络通信、功能实现等。本项目“Android-完整的APP流程含即时聊天Android端编辑发布文章”显然是一个综合性的应用,它涵盖了即时...
3. **无线通信模块**:为了实现手机APP的远程控制,STM32L432需要连接到Wi-Fi或蓝牙模块,将设备状态信息上传到服务器,并接收控制指令。这种无线通信技术可以是Wi-Fi Direct、Zigbee、Bluetooth Low Energy (BLE)等...
在Android系统中,宿主与插件数据交互是一个常见的需求,尤其在插件化开发中。插件化技术允许我们动态加载和卸载应用程序模块,提高应用的灵活性和可维护性。而宿主与插件之间的数据交互是实现这一目标的关键部分。...
4. **模块化**:随着项目的增长,Gradle化的另一个优势是支持模块化开发。在开源中国Android客户端2.0中,可能包含多个模块,每个模块有独立的`build.gradle`文件,这有利于代码组织和重用。 5. **Gradle脚本**:...
- **模块化**:将应用划分为多个模块,便于维护和扩展。 - **热更新支持**:如JAR/插件化技术,允许在不更新整个应用的情况下更新部分功能。 - **持续集成/持续部署(CI/CD)**:通过Jenkins、Travis CI等工具实现...
这个压缩包文件“本科毕业设计 - 基于Android的天气APP.zip”是一个典型的Android应用项目,用于本科毕业设计。这个应用很可能是一个功能完善的天气查询软件,用户可以通过它获取实时天气信息、预报以及相关的气候...
例如,一个智能家居应用可以通过Wi-Fi连接智能设备,实现远程控制或自动化操作。另外,开发者还需要理解如何使用Android的传感器API来获取和处理来自物联网设备的数据,如温度、湿度、运动状态等。 对于名为"MyApp...
Android应用组件化实现是现代Android应用开发中的一个重要话题,它旨在提高代码的可维护性、可扩展性和灵活性。组件化框架如阿里巴巴的Atlas,是实现这一目标的关键工具。以下是关于Atlas组件化实现的详细讲解: 1....
12. **热修复与插件化**:对于大型应用,热修复和插件化技术可以帮助快速修复线上问题和实现模块化开发。 13. **Android最新版本特性**:随着Android系统的迭代,新版本会引入新的API和功能,开发者需要关注并学习...
18. **Android插件化**:通过插件化技术,可以实现应用模块的动态加载和更新,提高灵活性。 19. **热修复与增量更新**:例如腾讯的AndFix和阿里巴巴的ARouter,用于修复线上问题和实现快速迭代。 20. **Kotlin**:...
Pimatic是一款开源的家庭自动化平台,允许用户通过自定义插件来实现对家庭设备的控制,而“android-pimatic-app”则是专为该平台设计的移动应用程序。 首先,我们要理解Android应用的基本架构。在Java语言环境下,...
1. **项目结构**:Android项目通常遵循一定的目录结构,如`app`模块、`build.gradle`文件、`src`目录等。这些示例代码将展示如何正确组织项目结构以符合Gradle的要求。 2. **构建脚本**:`build.gradle`文件是...
为了实现应用的热更新或插件化,可以使用如Dexposed、AndFix、DroidPlugin等框架,它们允许在不重新安装应用的情况下替换或加载新的库代码。 8. **优化依赖管理** 为了减小程序体积和提高编译速度,可以开启`...
本项目是一个基于Android平台的服装个性化定制电商平台的厂家模块App,旨在为用户提供一个创新的在线购物体验,允许消费者根据自己的需求定制独特的服装产品。通过这个App,制造商可以直接与消费者进行交流,了解并...
- **插件化开发**: 通过JSBridge,可以实现模块化开发,将部分功能封装为JavaScript插件,降低维护成本。 - **第三方服务集成**: 调用地图、支付、分享等第三方SDK时,可以通过JSBridge简化流程,提高灵活性。 这...