Android 动态加载

在程序运行的时候,加载一些程序自身不存在的可执行文件并运行这些文件里的代码逻辑。动态加载具有一下几个特点
摘要由CSDN通过智能技术生成

目录

一.动态加载技术介绍

二.动态加载技术的类型

1.动态加载so库

2.动态加载dex/jar/apk文件

三.类加载器的概念

四.动态加载的原理

五.动态加载的实现方式

1.简单动态加载模式

2.使用反射的方式

3.使用接口的方式

4.使用代理Activity模式

六.如何创建插件工程

七.动态加载的优点

八.动态加载的缺点


一.动态加载技术介绍

在程序运行的时候,加载一些程序自身不存在的可执行文件并运行这些文件里的代码逻辑。动态加载具有一下几个特点:

  1. 应用在运行的时候加载一些本地不存在的可执行文件实现一些特定的功能;
  2. 这些可执行文件是可以替换的;
  3. 更换静态资源不属于动态加载,如换启动图,换主题或者用服务器开关控制广告的隐藏实现等;
  4. Android中动态加载的核心思想是动态调用外部的dex文件。

二.动态加载技术的类型

在Android项目中,动态加载技术按照加载的可执行文件可以分为两种。

1.动态加载so库

Android的NDK中其实就是使用了动态加载.so库并通过JNI调用其封装的方法。后者一般是由C/C++编译而成,运行在Native层效率比在虚拟机执行的java代码高很多,所以Android经常加载动态.so库来完成一些对性能要求比较高的工作,如T9搜索,Bitmap的解码,图片的高斯模糊等。

2.动态加载dex/jar/apk文件

Android项目中,所有的java代码都会被编译成dex文件,Android应用运行时,就是通过执行dex文件里的业务逻辑来工作的。使用动态加载技术可以在Android应用运行是加载外部的dex文件,通过网络下载新的dex文件并替换原有的dex文件就可以达到不安装新的APK文件就升级应用的目的。

三.类加载器的概念

类加载器(Class Loader)是Java中一个很重要的概念,类加载器负责加载java类的字节码到Java虚拟机中。在Android中的类加载器有DexClassLoader和PathClassLoader。它们的区别是:

  • DexClassLoader:可以加载jar/apk/dex,可以从SD卡中加载未安装的apk;
  • PathClassLoader:只能加载已经安装的apk文件。

四.动态加载的原理

无论哪种动态加载其基本原理就是在程序运行时加载一些外部的可执行文件,然后调用这些文件的某个方法执行业务逻辑。对于这些外部的可执行文件,在Android应用调用前都要先把它们拷贝到data/packagename/内部存储文件路径,使用类加载器加载相应的文件通过反射获取内部资源,以供宿主APP的使用,动态加载的大致过程就是:

  1. 把可执行文件(.so/dex/jar/apk)拷贝到应用APP内部存储;
  2. 加载可执行文件;
  3. 调用具体的方法执行业务;

五.动态加载的实现方式

1.简单动态加载模式

通过JDK的编译命令javac把jiava代码编译成.class文件,再使用jar命令把.class文件封装成.jar文件。最后使用Android SDK的DX工具把.jar文件优化成.dex文件。

通过DexClassLoade

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值