Android 插件化开发

插件化开发在大项目中是一个架构层的核心技术之一,它能解决工程大了之后带来的限制65535方法数问题。另外一方面可自定义插件里的内容,来实现动态加载功能。

实现步骤(因为用的是自己老电脑,配置低,没装Android studio,这里demo是用eclipse写的,但在Android studio中代码编写一样。有需要源码或者有疑问的朋友可以在下面留言)

1.    首先创建一个插件的工程plugin,如图所示

2.    在drawable下放入一张图片plugin.png,如图:


3.    编译运行该项目,得到一个plugin.apk安装包。我们把这plugin,apk安装包用做我们的插件。在新项目中访问里面的资源,这里我们在demo中就访问它的drawable目录下的plugin.png图片

4.    创建一个我们开发的项目ChajianDemo,把plugin.apk放到assets目录下,如图


5.    至此,准备工作已完成。下面开始用代码来实现。

(1).在main.xml中定义一个imageview控件,用来显示加载插件中的图片。再定义一个button,当我们点击时执行加载操作。如图:


(2).给button设置点击事件,先检查本地有没有plugin.apk,如果有就开始获取插件中的资源,如果没有就从assets目录下获取插件的apk,存放到磁盘中。


(3).最麻烦的就是这一步,获取插件中的资源。如果是获取自己应用下的资源,可通过getResource(“文件名”)来直接获取,因为这里是会先获取自己应用的Classloader,然后拿classloader对象去获取资源。那么,要获取插件中的资源,就得拿到插件的classloader,用插件的classloader去获取资源得到的就是插件中资源。这一步必须要用到反射。根据查看Androidframework层的源码可知, Resource的构造方法需要三个参数(AssetManager assets, DisplayMetrics metrics,Configuration config),其中AssetManager assets就是指定哪个apk,所以在这可以依据apk来获取AssetManager对象。所以可以自定义一个PluginResource类继承Resource,在类中创建一个方法获取AssetManager对象,代码实现如下图所示:

(4)接下完成button点击事件中


if (fileApk.exists())的模块,代码实现如下图所示:



(5)至此,代码都已完成,运行测试效果。如下图所示

        

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值