博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android 插件化
阅读量:2178 次
发布时间:2019-05-01

本文共 1171 字,大约阅读时间需要 3 分钟。

1、作用

大多数朋友开始接触这个问题是因为 App 爆棚了,方法数超过了一个 Dex 最大方法数 65535 的上限,从这个介绍中也知道可以通过多个 Dex 来解决这个问题,因而便有了插件化的概念,将一个 App 划分为多个插件(Dex或相关格式)
常用的其他解决方法还包括:删无用代码,用 H5 代替部分逻辑,买付费版的 Proguard
插件化的其他作用包括:(1) 模块解耦,(2) 单个dex函数不能超过 65535,(3) 动态升级,(4) 高效开发(编译速度更快)

 

2、概念

Android 插件化 —— 是指将一个程序划分为不同的部分,比如一般 App 的皮肤样式就可以看成一个插件
Android 组件化 —— 这个概念实际跟上面相差不那么明显,组件和插件较大的区别就是:组件是指通用及复用性较高的构件,比如图片缓存就可以看成一个组件被多个 App 共用
Android 动态加载 —— 这个实际是更高层次的概念,也有叫法是热加载或 Android 动态部署,指容器(App)在运⾏状态下动态加载某个模块,从而新增功能或改变某⼀部分行为

 

3、相关资料

插件化的原理实际是 Java ClassLoader 的原理,看其他资料前请先看:

 

Android 也有自己的 ClassLoader,分为 dalvik.system.DexClassLoader 和 dalvik.system.PathClassLoader,区别在于 PathClassLoader 不能直接从 zip 包中得到 dex,因此只支持直接操作 dex 文件或者已经安装过的 apk(因为安装过的 apk 在 cache 中存在缓存的 dex 文件)。而 DexClassLoader 可以加载外部的 apk、jar 或 dex文件,并且会在指定的 outpath 路径存放其 dex 文件

 

(1) 开源项目

这个项目实现了一部分的动态加载,原理是 DexClassLoader 加 Activity 代理,可以看看。
这个项目里有几个问题没解决,一个是 FragmentActivity 或是 ActionBarActiviy 的代理方式不行,因为存在 ClassLoader 隔离问题,可用打包方式去掉相同依赖包只保留一份来解决。that 指针可通过复写大部分接口从而改为 this 指针调用即可,另外 Activity 的创建过程有缺失

 


这是点评一个工程师介绍的方式,和上面不同的是:他不是用代理 Activity 的方式实现而是用 Fragment 以及 schema 的方式实现

 

(2) 其他资料
淘宝伯奎:Android插件化及动态部署—ATLAS 

 

来自:http://www.trinea.cn/android/android-plugin/

转载地址:http://zyjkb.baihongyu.com/

你可能感兴趣的文章
iOS开发中Instruments的用法
查看>>
iOS常用宏定义
查看>>
什么是ActiveRecord
查看>>
有道词典for mac在Mac OS X 10.9不能取词
查看>>
关于“团队建设”的反思
查看>>
利用jekyll在github中搭建博客
查看>>
Windows7中IIS简单安装与配置(详细图解)
查看>>
linux基本命令
查看>>
BlockQueue 生产消费 不需要判断阻塞唤醒条件
查看>>
强引用 软引用 弱引用 虚引用
查看>>
数据类型 java转换
查看>>
"NetworkError: 400 Bad Request - http://172.16.47.117:8088/rhip/**/####t/approval?date=976
查看>>
mybatis 根据 数据库表 自动生成 实体
查看>>
win10将IE11兼容ie10
查看>>
checkbox设置字体颜色
查看>>
第一篇 HelloWorld.java重新学起
查看>>
ORACLE表空间扩张
查看>>
orcal 循环执行sql
查看>>
web.xml配置监听器,加载数据库信息配置文件ServletContextListener
查看>>
结构型模式之桥接模式(Bridge)
查看>>