Android 插件技术:动态加载dex技术初探
Android动态加载dex技术初探
http://blog.csdn.net/u013478336/article/details/50734108html
Android使用Dalvik虚拟机加载可执行程序,因此不能直接加载基于class的jar,而是须要将class转化为dex字节码。node
Android支持动态加载的两种方式是:DexClassLoader和PathClassLoader,DexClassLoader可加载 jar/apk/dex,且支持从SD卡加载;PathClassLoader听说只能加载已经安装在Android系统内APK文件。android
Android插件化基础
Android简单来讲就是以下操做:c++
- 开发者将插件代码封装成Jar或者APK
- 宿主下载或者从本地加载Jar或者APK到宿主中
- 将宿主调用插件中的算法或者Android特定的Class(如Activity)
插件化开发—动态加载技术加载已安装和未安装的apk
http://blog.csdn.net/u010687392/article/details/47121729?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io 为何引入动态加载技术?git
- 一个应用程序dex文件的方法数最大不能超过65536个
- 可让应用程序实现插件化、插拔式结构,对后期维护有益
什么是动态加载技术程序员
动态加载技术就是使用类加载器加载相应的apk、dex、jar(必须含有dex文件),再经过反射得到该apk、dex、jar内部的资源(class、图片、color等等)进而供宿主app使用。github
关于动态加载使用的类加载器算法
- PathClassLoader - 只能加载已经安装的apk,即/data/app目录下的apk。
- DexClassLoader - 能加载手机中未安装的apk、jar、dex,只要能在找到对应的路径。
插件化技术学习
缘由:编程
各大厂商都碰到了AndroidNative平台的瓶颈:设计模式
- 从技术上讲,业务逻辑的复杂代码急剧膨胀,各大厂商陆续触到65535方法数的天花板;同时,对模块热更新提出了更高的要求。
- 在业务层面上,功能模块的解耦以及维护团队的分离也是大势所趋。
插件化技术主要解决两个问题:
- 代码加载
- 资源加载
代码加载
类的加载可使用Java的ClassLoader机制,还须要组件生命周期管理。
资源加载
用AssetManager的隐藏方法addAssetPath。
Android插件化原理解析——Hook机制之动态代理
使用代理机制进行API Hook进而达到方法加强。
静态代理
动态代理:能够简单理解为JVM能够在运行时帮咱们动态生成一系列的代理类。
代理Hook
若是咱们本身建立代理对象,而后把原始对象替换为咱们的代理对象,就能够在这个代理对象中随心所欲了;修改参数,替换返回值,称之为Hook。
整个Hook过程简要总结以下:
- 寻找Hook点,原则是静态变量或者单例对象,尽可能Hook public的对象和方法,非public不保证每一个版本都同样,须要适配。
- 选择合适的代理方式,若是是接口能够用动态代理;若是是类能够手动写代理也可使用cglib。
- 偷梁换柱-用代理对象替换原始对象
昵称:
不改了 退出 订阅评论
[Ctrl+Enter快捷键提交]
【免费】从零开始学编程,开发者专属实验平台免费实践!
【推荐】如今注册又拍云,首月可享 200G CDN流量,还可免费申请 SSL 证书
【推荐】阿里云“全民云计算”优惠升级
· Mozilla开源语音识别库,帮助将来App开发
· Facebook被集体“声讨”,要求更改ReactJS许可
· Dropbox公司的Go语言探索之路
· 摩拜单车登录意大利 每半小时0.3欧元
· 暴风魔镜推出“白日梦”VR盒子,强行兼容谷歌Daydream
» 更多新闻...
· 程序员的工做、学习与绩效
· 软件开发为何很难
· 唱吧DevOps的落地,微服务CI/CD的范本技术解读
· 程序员,如何从平庸走向理想?