通过源码我们知道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端助力之热修复原理相关推荐

  1. Android为TV端助力 最详细的动画大全,包括如何在代码和在XML中使用

    一.动画类型 Android的animation由四种类型组成:alpha.scale.translate.rotate XML配置文件中 alpha 渐变透明度动画效果 scale 渐变尺寸伸缩动画 ...

  2. Android为TV端助力 转载:android自定义view实战(温度控制表)!

    效果图 package cn.ljuns.temperature.view; import com.example.mvp.R; import android.content.Context; imp ...

  3. Android为TV端助力 浅谈Aidl 通讯机制

    服务端: 首先是编写一个aidl文件,注意AIDL只支持方法,不能定义静态成员,并且方法也不能有类似public等的修饰符:AIDL运行方法有任何类型的参数和返回值,在java的类型中,以下的类型使用 ...

  4. Android为TV端助力context转换类型

    转载于:https://www.cnblogs.com/xiaoxiaing/p/7246761.html

  5. Android为TV端助力 同时setTag两次,保存多种值

    示例代码: view.setTag(R.string.action_settings,hodler.content); 接收两个值,一个是key值,必须是唯一值,而且要写在values/ids.xml ...

  6. Android为TV端助力 转载:Java 泛型

    一. 泛型概念的提出(为什么需要泛型)? 首先,我们看下下面这段简短的代码: 1 public class GenericTest {2 3 public static void main(Strin ...

  7. Android为TV端助力 post带数据请求方式,传递的数据格式包括json和map

    如下: public static String httpPost(String url, String json) { try { URL u = new URL(url); HttpURLConn ...

  8. 【大牛系列教学】Android热修复原理,满满干货指导

    优秀的战士需要出色的剑才能战斗.同样,在现代IT中,每个编码人员都需要最好的Android开发人员工具来提高他们的技能和效率.在Android应用程序开发这个残酷的竞争行业中,只有优秀的开发人员才能生 ...

  9. 【Android 热修复】热修复原理 ( 多 Dex 打包机制 | 多 Dex 支持 | Dex 分包设置 | 开发和产品风格设置 | 源码资源 )

    文章目录 一.Dex 打包设置 1.多 Dex 支持 2.Dex 分包设置 3.开发和产品风格设置 ( 非必须 ) 二.完整 build.gradle 配置 1.build.gradle 配置 2.d ...

最新文章

  1. 采摘工人月薪十万却无人应聘,英澳农场求助 AI
  2. 初探Tomcat的架构设计
  3. YY提交招股书赴美上市:连续三季盈利(转)
  4. 利剑无意之Dubbo 面试题
  5. eclipse maven scm
  6. python list函数使用总结_python——list总结
  7. 在Docker上运行微服务
  8. html做table某一列的合计,Jquery、js计算table列合计
  9. 微信消息推送之过长的文本消息拆分踩坑
  10. oracle异步sql,Oracle sqlplus登陆异步io错误
  11. MATLAB之卷积码
  12. STM32WL开发之LORA产品选型
  13. 半导体物理学学习资源
  14. JS版汉字与拼音互转终极方案,附简单的JS拼音
  15. 用c语言编写的源文件 若没有产生编译错误,MSE C语言第一章习题
  16. 安泰电子科普:电压源和电流源的区别是什么意思
  17. 微信小程序在线知识答题有奖多开版源码
  18. 交换机短路_交换机端口短路 导致上网不正常
  19. 战神网络 战神引擎 配置的区组ID或服务器名字不一致 如何解决
  20. 解决webpack打包css时CssSyntaxError的问题

热门文章

  1. 新手学习次世代,需要了解哪些
  2. Wordpress自媒体主题:JustNews 5.7.2(113p.cn)
  3. java script this_Javavscript基础——this指向
  4. SV学习笔记—随机化约束的概率
  5. excel第一页第二页水印_python处理excel(19)行操作集锦
  6. lzma打包exe_将多个运行程序打包到一个exe中(Inno )
  7. AI创想秀,体验华为云ModelArts平台声音分类
  8. 第三代计算机 ibm360,IBM System/360诞生44周年
  9. 用链表储存学生信息然后排序输出
  10. iMindMap各种视图介绍