Android 浅谈插件化技术

 

Android动态加载dex技术初探点击打开链接

Android使用Dalvik虚拟机加载可执行程序,所以不能直接加载基于class的jar,而是需要将class转化为dex字节码。Android支持动态加载的两种方式是:DexClassLoader和PathClassLoader,DexClassLoader可加载jar/apk/dex,且支持从外部加载;PathClassLoader只能加载已经安装在Android系统内APK文件。

 

Android插件化基础

简单来说就是如下操作:

  • 开发者将插件代码封装成Jar或者APK;
  • 宿主下载或者从本地加载Jar或者APK到宿主中;
  • 宿主调用插件中的Class或者Android特定的Class(如Activity).

 

插件化开发—动态加载技术加载已安装和未安装的apk  点击打开链接

为什么引入动态加载技术?

  • 一个应用程序dex文件的方法数最大不能超过65536个;
  • 可以让应用程序实现插件化、插拔式结构,对后期维护有益.

什么是动态加载技术?

动态加载技术就是使用类加载器加载相应的apk、dex、jar(必须含有dex文件),再通过反射获得该apk、dex、jar内部的资源(class、图片、color等等)进而供宿主app使用。

关于动态加载使用的类加载器

  • PathClassLoader - 只能加载已经安装的apk,即/data/app目录下的apk。
  • DexClassLoader - 能加载手机中未安装的apk、jar、dex,只要能在找到对应的路径。

 

插件化技术学习

各大厂商都碰到了AndroidNative平台的瓶颈:

  1. 从技术上讲,业务逻辑的复杂代码急剧膨胀,各大厂商陆续触到65535方法数的天花板;同时,对模块热更新提出了更高的要求。
  2. 在业务层面上,功能模块的解耦以及维护团队的分离也是大势所趋。

插件化技术主要解决两个问题:代码加载资源加载

代码加载类的加载可以使用Java的ClassLoader机制,还需要组件生命周期管理。

资源加载用AssetManager的隐藏方法addAssetPath。

Android插件化Java层原理浅析——Hook机制之动态代理

  • 静态代理
  • 动态代理:可以简单理解为JVM可以在运行时帮我们动态生成一系列的代理类。

代理Hook:如果我们自己创建代理对象,然后把原始对象替换为我们的代理对象,就可以在这个代理对象中为所欲为了;修改参数,替换返回值,称之为Hook。

整个Hook过程简要总结如下:

  1. 寻找Hook点,原则是静态变量或者单例对象,尽量Hook public的对象和方法,非public不保证每个版本都一样,需要适配。
  2. 选择合适的代理方式,如果是接口可以用动态代理;如果是类可以手动写代理也可以使用cglib。
  3. 偷梁换柱-用代理对象替换原始对象

Android插件化Native层原理浅析——替换方法结构体 artMethod

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值