笔记
无    2017-04-01 18:03:01    169    0    0
xianglijiaxing

1.双亲委托模型

    请求是从父类向子类开始的

    

2.Android中国的ClassLoader的继承体系

     参考QQ空间的热补丁技术: https://zhuanlan.zhihu.com/p/20308548?columnSlug=magilu 

    参考Android中的ClassLoader:http://jaeger.itscoder.com/android/2016/08/27/android-classloader.html 

    android官方文档:https://developer.android.com/reference/java/lang/ClassLoader.html 

    PathClassLoader是Android中默认的ClassLoader.

    

 

PathClassLoader:  /* Provides a simple {@link ClassLoader} implementation that operates on a list of files and directories in the local file system, but does not attempt to load classes from the network. Android uses this class for its system class loader and for its application class loader(s).*/ (已安装的dex + apk)

 

BootClassLoader 是 PathClassLoader 的父加载器,其在系统启动时创建,在 App 启动时会将该对象传进来

     在Android系统启动的时候会创建一个Boot类型的ClassLoader实例,用于加载一些系统Framework层级需要的类,我们的Android应用里也需要用到一些系统的类,所以APP启动的时候也会把这个Boot类型的ClassLoader传进来。

----

DexClassLoader:  /*A class loader that loads classes from .jar and .apk filescontaining a classes.dex entry. This can be used to execute code notinstalled as part of an application.*/(参数中传入的dexPath,可以是多个,以”:“分割)

 

3.class对象对于ClassLoader是唯一的。加载dex时,会产生新的*.class变量。(编译期间自动加入)

    

4.gralde中配置生成多个dex文件。

    借鉴dexknife:                 https://github.com/ceabie/DexKnifePlugin

    gradle中拆分dex:           http://www.jianshu.com/p/9b9cfb20bf7d 

彻底掌握Android多分包技术MultiDex-用Ant和Gradle分别构建(一) http://blog.csdn.net/mynameishuangshuai/article/details/52703029 

 彻底掌握Android多分包技术MultiDex-用Ant和Gradle分别构建(二)http://blog.csdn.net/mynameishuangshuai/article/details/52716877 

 

      前提是熟悉gradle打包额详细流程;

       参考QQ空间hotFix.

       ----------------------------------------------------------------------------- 

    eclipse中流程:

        ant打包: http://blog.csdn.net/lisdye2/article/details/52049857 

        多dex分割: http://blog.csdn.net/lisdye2/article/details/52094693 

        动态加载: http://blog.csdn.net/lisdye2/article/details/52119602 

        

5.dex动态加载流程:

    ①生成补丁包的BaseDexClassLoader类;
    ②获取到BaseDexClassLoader中的DexPathList字段的dexElements;
    ③将补丁包的dexElements和本身的dexElements合并为一个新的数组(补丁包的放在前面);
    ④将新合并的dexElements设置到系统的dexElements中。

 

6.dex安全性校验

    放置于私有目录下。

    md5校验。

    加密。

    

    完整流程:

        dex加壳--> 下载,md5校验--->存放至私有目录解密,加载完成后删除。(加载外部dex风险浅析http://www.tuicool.com/articles/MFJJv2b

    

7.需要解决的问题

 

    CLASS_ISPREVERIFIED:

如果某个类直接方法中引用到的类(第一层级关系,不会进行递归搜索)在同一个 dex 中的话,那么这个类就会被打上 CLASS_ISPREVERIFIED 标志。

 

解决方式:

 打桩,对性能有一定程度的影响。


so库的动态更新问题:

http://www.androidchina.net/6176.html



 

上一篇: 动态权限请求

下一篇: 推送笔记

169 人读过
立即登录, 发表评论.
没有帐号? 立即注册
0 条评论
文档导航