Instant-Run与Tinker中Application替换
来源:互联网 发布:淘宝的1元秒杀在哪找 编辑:程序博客网 时间:2024/06/01 07:39
更多博客 https://70kg.info
- 为什么要替换application
因为5.0以下开始只会去加载第一个dex,如果appliaction不在第一个dex,则无法启动。如果把自己的appliaction放在第一个dex中,而自己的application没有使用multidex,则只会去加载原始加载生成的dex,也是会报错。所以办法就是去代理掉原始的application,将app启动的application设置为这个代理的application,在这个代理的application中可以确保使用multidex功能。
还有因为补丁是在appliaction中加载,这样会导致无法对appliaction的修复,还有因为 Android N 的混合编译的影响 ,Tinker 使用了类似 Instant-run 中 IncrementalClassLoader (具体实现过程还是有差距),新建一个classLoader,去 “替换”掉原始的 PathClassLoader 去加载所有dex。这些都需要在appliaction中进行修改。
- 替换操作的差异
Instant run 是在attachBaseContext的时候再去反射创建原始的application,然后再反射替换掉Framework中已经初始化的application(这个时候还是代理的application),还原回去我们原始的application。接下来就是正常的流程,在app中去get application也不会有问题。
Tinker使用的是静态代理,使用代理方案代码会更复杂一些,因为要去模拟出一个applicationLike的接口,在tinker中,我们真正的application只需要实现这个接口,并不需要去继承Android中的application,因为会在代理的application中反射调用我们的application生命周期方法。也就是说tinker中只有一个真正的application。
- 优缺点
在instant run中application的替换的透明的,两个application都是真正的Android application。好处就是透明,坏处也是使用了反射替换运行期的application,兼容性不如静态代理好,类似tinker中反射插入dex就分了好多个版本实习,这个会更复杂。tinker更加稳定。
- Instant-Run与Tinker中Application替换
- 从Instant run谈Android替换Application和动态加载机制
- 从Instant run谈Android替换Application和动态加载机制
- Tinker does not support instant run mode, please trigger build by assembleDebug or disable instant
- Instant Run与热修复
- Android Studio中Instant Run
- Instant Run
- Instant Run
- android studio 2.3与instant run
- Android Studio 中 Instant Run 日常BUG
- Android studio中settings下instant Run的四个属性
- Instant Run 浅析
- Instant Run实现原理
- Instant Run详解
- Instant Run 23事
- Instant Run 浅析
- Instant Run浅析
- Instant Run 瞬间启动
- Tomcat服务器虚拟目录
- [LabVIEW架构]ActorFramework(二)
- squid代理介绍
- 二级指针做输入的3种模型-3
- python——import导入模
- Instant-Run与Tinker中Application替换
- 练习(六)
- Spring 注解
- Python初学之注意事项
- 《笨办法学python》加分习题1——我的答案
- 理解JAVA数组
- 安装composer失败如何解决。
- K
- SQL查询和优化(二)