Android插件化及动态加载
2016-01-10 15:13
323 查看
缘由及作用
App方法爆棚方法数超过了一个Dex最大方法数65535的上限,可以通过多个 Dex来解决这个问题,因而便有了插件化的概念,将一个App 划分为多个插件(Dex或相关格式)
其他解决方法还包括:删无用代码,用H5代替部分逻辑,买付费版的Proguard
作用
a、模块解耦;
b、动态升级;
c、高效并行开发(编译速度更快) ;
d、按需加载,内存占用更低;
e、节省升级流量
原理
插件化的原理实际是 Java ClassLoader 的原理,具体可参考Java ClassLoader基础但是对比于java还是有区别的:
Java ClassLoader加载的是class文件到JVM
对于Android应用程序,本质上使用的是java开发,使用标准的java编译器编译出Class文件,和普通的java开发不同的地方是把class文件再重新打包成dex类型的文件,这种重新打包会对Class文件内部的各种函数表、变量表等进行优化,最终产生了dex文件。
在Android中可以动态加载,但无法像Java中那样方便动态加载jar
原因:Android的虚拟机(Dalvik VM)是不认识Java打出jar的byte code,需要通过dx工具来优化转换成Dalvik byte code才行。这一点在Android项目打包的apk中可以看出:引入其他Jar的内容都被打包进了classes.dex。
将打包的jar包拷贝到SDK安装目录android-sdk-windows\platform-tools下,执行命令:dx –dex –output=test.jar suishen_exitpage_sdk.jar
Android ClassLoader
DexClassLoader API地址用来从.jar和.apk类型的文件内部加载classes.dex文件,通过这种方式可以执行非安装的程序代码,作为程序的一部分进行运行。
PathClassLoader
只能加载已经安装到Android系统中的apk文件,一般用于系统应用。
DexClassLoader的使用:
调用构造函数,获得classLoader对象
通过classLoader加载相应的类,反射调用方法。
开源项目
dynamic-load-apk缺点:遵守一套插件apk的开发规范,开发不便。
DynamicLoadApk 源码解析
git上源码地址
AndroidDynamicLoader
git上源码地址
参考文章
Android 插件化Android动态加载jar/dex
携程Android App插件化和动态加载实践
相关文章推荐
- java自动生成验证码插件-kaptcha
- jQuery菜单插件用法实例
- 加载flash9.ocx出现错误的解决方法
- jquery实现的代替传统checkbox样式插件
- 10款新鲜出炉的 jQuery 插件(Ajax 插件,有幻灯片、图片画廊、菜单等)
- 推荐40个非常优秀的jQuery插件和教程【系列三】
- Node.js插件的正确编写方式
- 推荐十款免费 WordPress 插件
- 使用JavaScript开发IE浏览器本地插件实例
- jQuery实现的简单提示信息插件
- 推荐25个超炫的jQuery网格插件
- 纯JavaScript实现的分页插件实例
- JQuery插件jcarousellite的参数中文说明
- jQuery插件kinMaxShow扩展效果用法实例
- jQuery插件制作之全局函数用法实例
- 精心收集的jQuery常用的插件1000
- 40款非常棒的jQuery 插件和制作教程(系列二)
- 40款非常有用的 jQuery 插件推荐(系列一)
- FullCalendar日历插件应用之数据展现(一)
- 制作高质量的JQuery Plugin 插件的方法