转-基于插件开发的Android实现流程
2014-09-30 14:14
232 查看
原始地址: http://www.2cto.com/kf/201403/284689.html
本文记述“柯元旦”Android内核剖析中基于类装载器的“插件”架构。
插件的概念:
1、插件不能独立运行,而必须运行于一个宿主程序中,即由宿主程序去调用插件程序。
2、插件一般可以独安装。
3、宿主程序中可以管理不同的插件,包括查看插件的数目,禁用或者使用某个插件。
4、宿主程序应该保证插件的向下兼容性,即新版本的宿主程序可以运行较老版本的插件。
下面详细看一下这种架构:
1、宿主程序:
新建Android项目PluginDevAndroid
![](http://www.2cto.com/uploadfile/Collfiles/20140311/20140311085638199.jpg)
2、插件项目1:Plugin1
![](http://www.2cto.com/uploadfile/Collfiles/20140311/20140311085638200.png)
3、插件项目2:
![](http://www.2cto.com/uploadfile/Collfiles/20140311/20140311085638201.png)
4、综述:
4.1、接口类一般定义在宿主项目中,比如本例中的IPluginDev.java
4.2、插件项目需要应用IPluginDev时,则必须通过一个外部的jar包,并且该jar包是以Library的形式被添加到Plugin项目的build Path,而不是以“外部的”jar方式添加。
如图:
![](http://www.2cto.com/uploadfile/Collfiles/20140311/20140311085639202.jpg)
4.3、宿主程序想要知道系统中有哪些插件,可以定义一个Action,本例中使用的是如下action。
![](http://www.2cto.com/uploadfile/Collfiles/20140311/20140311085639203.jpg)
这样的话,宿主程序就可以通过PackageManager类的queryIntentActivities函数查询相关的插件的列表了。
得到了插件的PackageName,就可以访问插件的资源内容。例如:
?
这段代码中,首先获取插件的Resource对象,接着得到名称为version字段的字符串id值,然后再调用getString获得该变量的值,于是宿主程序就知道插件程序中的资源内容了。
关键代码:
?
这段代码中,首先得到插件的List列表。
然后得到插件的packageName,以及插件的dexPath目录。
再次,得到dexOutputDir目录。
libPath一般只c/c++使用的库文件。
DexClassLoader的参数意义:
dexPath:插件apk或者jar包文件的路径
dexOutputDir:将目标apk或者jar包解压的文件的存放目录。因为宿主程序只对本应用程序所在的目录由存取权限。
运行截图:
本文记述“柯元旦”Android内核剖析中基于类装载器的“插件”架构。
插件的概念:
1、插件不能独立运行,而必须运行于一个宿主程序中,即由宿主程序去调用插件程序。
2、插件一般可以独安装。
3、宿主程序中可以管理不同的插件,包括查看插件的数目,禁用或者使用某个插件。
4、宿主程序应该保证插件的向下兼容性,即新版本的宿主程序可以运行较老版本的插件。
下面详细看一下这种架构:
1、宿主程序:
新建Android项目PluginDevAndroid
![](http://www.2cto.com/uploadfile/Collfiles/20140311/20140311085638199.jpg)
2、插件项目1:Plugin1
![](http://www.2cto.com/uploadfile/Collfiles/20140311/20140311085638200.png)
3、插件项目2:
![](http://www.2cto.com/uploadfile/Collfiles/20140311/20140311085638201.png)
4、综述:
4.1、接口类一般定义在宿主项目中,比如本例中的IPluginDev.java
4.2、插件项目需要应用IPluginDev时,则必须通过一个外部的jar包,并且该jar包是以Library的形式被添加到Plugin项目的build Path,而不是以“外部的”jar方式添加。
如图:
![](http://www.2cto.com/uploadfile/Collfiles/20140311/20140311085639202.jpg)
4.3、宿主程序想要知道系统中有哪些插件,可以定义一个Action,本例中使用的是如下action。
![](http://www.2cto.com/uploadfile/Collfiles/20140311/20140311085639203.jpg)
这样的话,宿主程序就可以通过PackageManager类的queryIntentActivities函数查询相关的插件的列表了。
得到了插件的PackageName,就可以访问插件的资源内容。例如:
?
关键代码:
?
然后得到插件的packageName,以及插件的dexPath目录。
再次,得到dexOutputDir目录。
libPath一般只c/c++使用的库文件。
DexClassLoader的参数意义:
dexPath:插件apk或者jar包文件的路径
dexOutputDir:将目标apk或者jar包解压的文件的存放目录。因为宿主程序只对本应用程序所在的目录由存取权限。
运行截图:
![](http://www.2cto.com/uploadfile/Collfiles/20140311/20140311085639204.jpg)
相关文章推荐
- 基于插件开发的Android实现流程
- 基于插件开发的Android实现流程
- 基于DotNet构件技术的企业级敏捷软件开发平台 - AgileEAS.NET平台开发指南 - 实现插件
- 基于模型设计的FPGA开发与实现:基本流程(一)之入门小例子(一):跑马灯
- 基于Android应用开发的跨进程通信实现(IPC)
- Android基于XMPP Smack Openfire下学习开发IM(一)实现用户注册、登录、修改密码和注销等
- 基于Android的小巫新闻客户端开发---显示新闻详细内容业务逻辑实现
- 基于Android源码开发的来电接通振动功能实现
- C# 优化基于插件的开发框架实现Ribbon界面与功能的分离附DEMO
- Android基于XMPP Smack Openfire开发IM【四】初步实现两个客户端通信
- 基于Android的小巫新闻客户端开发--主界面业务逻辑实现
- Android开发学习之基于ViewPager实现Gallery画廊效果
- Android Widget 电池插件的开发实现
- Android基于XMPP Smack Openfire下学习开发IM(一)实现用户注册、登录、修改密码和注销等
- [Java]Openfire插件开发心得:基于XMPP实现类Twitter功能
- 基于模型设计的FPGA开发与实现:基本流程(一)概述
- 基于人人网的Android开发流程介绍
- 基于人人网的Android开发流程介绍
- Android基于XMPP Smack Openfire下学习开发IM(一)实现用户注册、登录、修改密码和注销等
- 一、东软实践项目2-基于android平台的应用开发:实现页面之间的跳转