安卓插件化之 插桩式

安卓插件化优缺点

优点:模块解耦,扩展性强;应用间的介入;解决65535不能编译问题;动态升级和修复bug;

缺点:增加主应用的逻辑难度;技术难度,现在成熟的技术都没有开源;

实现插件化方式:插桩式 ;hook;反射

插桩式原理:下载淘票票apk,利用packageManger解析获取packageInfo包信息(例如activity信息,service信息等等);这里我以activity为例;通过packageInfo获取插件的 dexClassLoad对象resources对象,在主APP创建个activity代理,代理插件里面所有activity;

通过 重写getClassLoad()方法返回插件的dexclassload对象(那加载的就是插件里面的类),getResources()方法 返回插件的resources对象(这样就加载插件里面的资源);因为插件apk没有安装所有是获取不到上下文的,通过接口回调方法,主APP反射获取接口实例 实现接口方法,插件activity实现接口,这个插件activity就能调用接口里面的方法;

核心原理是定义接口,主App实现接口里面的方法,插件实现接口;利用接口回调方法。

 

安卓插件化之   插桩式

 

我们以支付宝app为例,在支付宝里面我们点击淘票票就直接打开淘票票App了,但是实际我们手机可能都没有安装淘票票软件,而且支付宝apk安装包大小也不是很大,排除淘票票的apk依赖进去了;支付宝是如何做到的呢,利用插件化实现这功能的。

 

1:定义lib里面定义个接口  代码如下

安卓插件化之   插桩式

2:定义个插件(就是一个正常的apk工程)依赖接口lib,定义个BaseActivity实现接口

安卓插件化之   插桩式

 

3:主app 也需要依赖lib 负责获取插件包的classload 和resources

安卓插件化之   插桩式

 

//测试 插件打包成apk修改名字为taopiaopiao.apk,放到sd卡里面

安卓插件化之   插桩式

这里只是以activity为例,实际开发四大组件 都需要处理;

 

源码地址:https://github.com/zhudaihao/MyPlugIn

 

 

来源:zhudaihai

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2019年7月7日
下一篇 2019年7月7日

相关推荐