01-android运行附加的dex中非android组件类中的方法

Android的类加载器

在这里插入图片描述

  • ClassLoader
    • 为抽象类
  • BootClassLoader
    • 预加载常用类,单例模式。与Java中的BootClassLoader不同,它并不是由C/C++代码实现,而是由Java实现的
  • BaseDexClassLoader
    • 是PathClassLoader、DexClassLoader、InMemoryDexClassLoader的父类,类加载的主要逻辑都是在BaseDexClassLoader完成的
  • SecureClassLoaser
    • 继承了抽象类ClassLoader,拓展了ClassLoader类。加入了权限方面的检查,加强了安全性,其子类URLClassLoader是用URL路径从jar文件中加载类和资源
  • PathClassLoader
    • 是android默认的类加载器,一个apk中Activity等类便是在其中加载
  • DexClassLoader
    • 可以加载任意目录下的dex/jar/apk/zip文件,比PathClassLoader更灵活,是实现插件化、热修复以及dex加壳的重点
  • InMemoryDexCalssLoader
    • 由android8.0新引入,从名字便可以看出是用于直接从内存中加载dex
code
File optfile=context.getDir("opt_dex",0);
File libfile=context.getDir("lib_path",0);

DexClassLoader dexClassLoader=new DexClassLoader(dexfilepath,optfile.getAbsolutePath(),
		libfile.getAbsolutePath(),MainActivity.class.getClassLoader());

// 或者
//PathClassLoader dexClassLoader=new PathClassLoader(dexfilepath,MainActivity.class.getClassLoader());

Class<?> clazz=null;
clazz = dexClassLoader.loadClass("类名");

Method testFuncMethod=clazz.getDeclaredMethod("testFunc");
Object obj=clazz.newInstance();
testFuncMethod.invoke(obj);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值