Android为TV端助力之热修复原理
通过源码我们知道Android加载类是通过ClassLoad类里面的findClass先去查找的,如下图所示
通过看源码我们知道,ClassLoad是一个抽象类,它本身并没有实现findclass()方法,而是通过Android双亲委托机制交给它的子类去实现的,如果子类没有找到,那最终就会调用自己的findclass方法
抛出ClassNotFoundException异常,接下来我们去看它的子类是如何实现findclass方法的,通过源码我们知道ClassLoad有两个子类SecureClassLoader跟BaseDexClassLoader,
我们在BaseDexClassLoader里面找到的findclass类的实现方法
通过此方法我们看到它是调用了pathList.findClass方法去查找类,而pathList是属于DexPathList的对象,那么我们点进去看看此方法是如何查找的
我们看到它首先遍历的一个叫dexElements的数组,得到一个DexFile对象,接着往下看,它接着又调用的dex.loadClassBinaryName方法的,我们在点进去看看
发现它最终走到的native方法里面了,那么我们就不深究的,回来上一步来看看dexElements是个什么东西??? dexFile是什么东西? 为什么要遍历它???
通过DexPahtList的构造方法,我们可以知道dexElements是在这里赋值的,如果
那么我们一如既往的点进去看看是如何实现的
看到这里我们明白的前面的dexFile是什么的,他是由loadDexFile构造出来的DexFile文件,纳尼???我们接着看loadDexFile
这里的optimizedDirectory:dex文件的输出目录(因为在加载jar/apk/zip等压缩格式的程序文件时会解压出其中的dex文件,该目录就是专门用于存放这些被解压出来的dex文件的)。
在构造方法的时候就已经传过来的,所以我们接着看optomizedPathFor方法
这个file就是在这里创建的
optimizedPathFor 方法执行完了,就是返回的一个FIle路径,里面放的是你补丁包,然后再把路径传给
返回一个dexFile文件,loadDex最终执行的是naitve方法,直白点说就是把我们的补丁包dex文件加载成dexFile对象,然后放到我们最开始的数组里面
最后回到我们最开始的地方,遍历这个数组,找到我们的class文件,返回结果,好了原理就讲到这里的,后续还需要自己多多操作,越用越熟练!
Android为TV端助力之热修复原理相关推荐
- Android为TV端助力 最详细的动画大全,包括如何在代码和在XML中使用
一.动画类型 Android的animation由四种类型组成:alpha.scale.translate.rotate XML配置文件中 alpha 渐变透明度动画效果 scale 渐变尺寸伸缩动画 ...
- Android为TV端助力 转载:android自定义view实战(温度控制表)!
效果图 package cn.ljuns.temperature.view; import com.example.mvp.R; import android.content.Context; imp ...
- Android为TV端助力 浅谈Aidl 通讯机制
服务端: 首先是编写一个aidl文件,注意AIDL只支持方法,不能定义静态成员,并且方法也不能有类似public等的修饰符:AIDL运行方法有任何类型的参数和返回值,在java的类型中,以下的类型使用 ...
- Android为TV端助力context转换类型
转载于:https://www.cnblogs.com/xiaoxiaing/p/7246761.html
- Android为TV端助力 同时setTag两次,保存多种值
示例代码: view.setTag(R.string.action_settings,hodler.content); 接收两个值,一个是key值,必须是唯一值,而且要写在values/ids.xml ...
- Android为TV端助力 转载:Java 泛型
一. 泛型概念的提出(为什么需要泛型)? 首先,我们看下下面这段简短的代码: 1 public class GenericTest {2 3 public static void main(Strin ...
- Android为TV端助力 post带数据请求方式,传递的数据格式包括json和map
如下: public static String httpPost(String url, String json) { try { URL u = new URL(url); HttpURLConn ...
- 【大牛系列教学】Android热修复原理,满满干货指导
优秀的战士需要出色的剑才能战斗.同样,在现代IT中,每个编码人员都需要最好的Android开发人员工具来提高他们的技能和效率.在Android应用程序开发这个残酷的竞争行业中,只有优秀的开发人员才能生 ...
- 【Android 热修复】热修复原理 ( 多 Dex 打包机制 | 多 Dex 支持 | Dex 分包设置 | 开发和产品风格设置 | 源码资源 )
文章目录 一.Dex 打包设置 1.多 Dex 支持 2.Dex 分包设置 3.开发和产品风格设置 ( 非必须 ) 二.完整 build.gradle 配置 1.build.gradle 配置 2.d ...
最新文章
- 采摘工人月薪十万却无人应聘,英澳农场求助 AI
- 初探Tomcat的架构设计
- YY提交招股书赴美上市:连续三季盈利(转)
- 利剑无意之Dubbo 面试题
- eclipse maven scm
- python list函数使用总结_python——list总结
- 在Docker上运行微服务
- html做table某一列的合计,Jquery、js计算table列合计
- 微信消息推送之过长的文本消息拆分踩坑
- oracle异步sql,Oracle sqlplus登陆异步io错误
- MATLAB之卷积码
- STM32WL开发之LORA产品选型
- 半导体物理学学习资源
- JS版汉字与拼音互转终极方案,附简单的JS拼音
- 用c语言编写的源文件 若没有产生编译错误,MSE C语言第一章习题
- 安泰电子科普:电压源和电流源的区别是什么意思
- 微信小程序在线知识答题有奖多开版源码
- 交换机短路_交换机端口短路 导致上网不正常
- 战神网络 战神引擎 配置的区组ID或服务器名字不一致 如何解决
- 解决webpack打包css时CssSyntaxError的问题
热门文章
- 新手学习次世代,需要了解哪些
- Wordpress自媒体主题:JustNews 5.7.2(113p.cn)
- java script this_Javavscript基础——this指向
- SV学习笔记—随机化约束的概率
- excel第一页第二页水印_python处理excel(19)行操作集锦
- lzma打包exe_将多个运行程序打包到一个exe中(Inno )
- AI创想秀,体验华为云ModelArts平台声音分类
- 第三代计算机 ibm360,IBM System/360诞生44周年
- 用链表储存学生信息然后排序输出
- iMindMap各种视图介绍