美文网首页
Android 插件化

Android 插件化

作者: 孤独的根号十二 | 来源:发表于2018-12-26 17:42 被阅读3次

    前言

    Android的可执行文件是 dex文件,运行在 Dalvik/ART虚拟机上,在apk文件中会有一个或多个 dex文件,而我们写的所有的代码都会被编译到这些 dex文件中,Android运行的时候就是通过执行这些 dex文件来完成应用功能的。

    什么是插件化?

    插件化顾名思义,更多是想把需要实现的模块或功能当做一个独立的提取出来,减少宿主的规模,当需要使用到相应的功能时再去加载相应的模块,通常是apk或者dex文件,插件可以提供一种动态扩展的能力,让app在运行时候可以加载原本不属于该应用的功能,可以做到动态更新和替换
    例如:

    比如输入法的截图功能,刚刚安装好的输入法是没有截图功能的,当你在第一次使用的时候,输入法会从服务器中下载并安装截图软件,然后就可以执行截图功能;

    插件化的基础

    插件化的基础是动态加载,动态加载的核心是:动态调用外部的 dex文件,有一种极端情况就是:Android Apk自身带有的 dex文件只是一个程序的入口,所有的功能可以直接从服务器中下载 最新的 dex文件来完成;

    Android动态加载的类型

    1>:动态加载 so库;
    2>:动态加载 dex/jar/apk;

    Android动态加载的流程

    动态加载流程如下:
    1>:把可执行的文件,如dex、含有dex文件的jar、apk,拷贝到应用私有目录下,防止被篡改,
    2>:加载可执行的文件;
    3>:调用其对应方法,执行逻辑即可;

    类加载器

    android中的类加载器和java中的不同,dex文件是Android对与Class文件做的优化,以便于提高手机的性能。可以想象dex为class文件的一个压缩文件。dex在Android中的加载和class在jvm中的相同都是基于双亲委派模型,都是调用ClassLoader的loadClass方法加载类
    android中有两种类加载器

    1. DexClassLoader:可以加载jar/apk/dex,可以加载sd卡中未安装的apk;
      2 .PathClassLoader:只能加载系统中已经安装过的 apk;
      PathClassLoader和DexClassLoader都是继承与BaseDexClassLoader,BaseDexClassLoader继承与ClassLoader

    第三方动态加载框架

    1>:Small;
    2>:DL动态加载框架;
    3>:360的RePlugin;
    4>:360的DroidPlugin;

    demo

    https://github.com/CodeHurricane/PlugInDemo

    相关文章

      网友评论

          本文标题:Android 插件化

          本文链接:https://www.haomeiwen.com/subject/htiflqtx.html