Android动态加载jar,dex,apk文件

本文介绍了Android的动态加载技术,特别是如何利用DexClassLoader加载外部的apk、jar或dex文件。通过创建接口和实现类,可以高效地使用反射机制。文章详细阐述了实现过程,包括创建接口、导出jar、添加权限以及处理Android 4.0后的兼容性问题。
摘要由CSDN通过智能技术生成

最近发现Android有一个发展方向,插件化,像360等等,他把功能索引放在主界面,当使用哪个功能就调用哪个jar,dex,或者apk,这种技术叫做动态加载,那么我们来看看这个dex实现了什么功能
插件化的原理实际是 Java ClassLoader 的原理,
Android 也有自己的 ClassLoader,分为 dalvik.system.DexClassLoader 和 dalvik.system.PathClassLoader,区别在于 PathClassLoader 不能直接从 zip 包中得到 dex,因此只支持直接操作 dex 文件或者已经安装过的 apk(因为安装过的 apk 在 cache 中存在缓存的 dex 文件)。而 DexClassLoader 可以加载外部的 apk、jar 或 dex文件,并且会在指定的 outpath 路径存放其 dex 文件。
那么我们来看代码,怎么动态加载一个dex

使用到的工具都比较常规:javac、dx、eclipse等其中dx工具最好是指明–no-strict,因为class文件的路径可能不匹配
加载好类后,通常我们可以通过Java反射机制来使用这个类但是这样效率相对不高,而且老用反射代码也比较复杂凌乱。更好的做法是定义一个interface,并将这个interface写进容器端。待加载的类,继承自这个interface,并且有一个参数为空的构造函数,以使我们能够通过Class的newInstance方法产生对象然后将对象强制转换为interface对象,于是就可以直接调用成员方法了,下面是具体的实现步骤了:

首先建一个项目 新建一个interface
IDynamicsLoader.java

package com.example.interf;

public interface IDynamicsLoader {

    public String Helloworld();
}

然后建一个实现类
DynamicsLoader .java

package com.example.interf;

public class DynamicsLoader implements IDynamicsLoader {
   
    public DynamicsLoader() {
    }

    @Override
    public String Helloworld() {
        return "hellowrold";
    }

}

然后右键 导出-jar文件

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值