# 背景
随着代码的变更,无效代码会不断累积。这会影响包大小和功能迭代。希望有一套方案,可以统计线上代码覆盖率,且不要有较大性能开销。
# 原理
Java虚拟机规范规定,任何类在使用前都需要先被虚拟机加载。Java虚拟机通过各种不同的classLoader完成类加载后,会保存在Native层的ClassTable中。
因此有两种方案可以获得所有的class信息:
1、通过反射获取classLoader中的classTable。通过classTable获取所有类信息。(可以在cs.android.com中,搜索ClassLoader.java和ClassTable.java, 看一下源码).
2、通过反射替换系统classLoader的parent(需要了解类加载的双亲委派模型)
以上两种方式各有优劣。
# 方案

881

被折叠的 条评论
为什么被折叠?



