$dex 返回
Dex与Jar加载器
loadDex(dexPath)
版本:1.1.0
加载dex文件
$dex中存在一个内置的缓存机制,被加载的dex文件会被生成一个唯一的id作为类加载器的标识,
在起初加载dex文件的时候会保存id和类加载器对象
当再次加载相同的dex文件时,会通过id直接取得类加载器对象来执行类
如果想重新加载需要调用$dex.clear()清除id和类加载器
- 参数 : dexPath {string} dex文件路径
- 返回 : DexClassLoader
$dex.loadDex(path);
//开始使用dex中的类
loadJar(jarPath)
版本:1.1.0
加载jar文件
$dex中存在一个内置的缓存机制,被加载的jar文件会被生成一个唯一的id作为类加载器的标识,
在起初加载jar文件的时候会保存id和类加载器对象
当再次加载相同的jar文件时,会通过id直接取得类加载器对象来执行类
如果想重新加载需要调用$dex.clear()清除id和类加载器
- 参数 : jarPath {string} jar文件路径
- 返回 : DexClassLoader
$dex.loadJar(path);
//开始使用jar中的类
loadDex(options)
版本:1.1.0
加载dex/so文件
值得注意的就是so文件也有很多架构(x86_64,arm64_v8a等),根据自己手机的架构来选择需要加载的so文件(安卓特性);
此外:如果dex(java代码)中已经使用System.load(so);加载过的so文件不要重复加载,因为so文件只能被类加载器加载一次(安卓机制)
- 参数 : options {LoadDexConfig} 加载配置
- 返回 : DexClassLoader
let options = {
path:"dexOrJarPath",//jar或者dex文件路径
so:[
{path:"soPath", load:false},
{path:"soPath",//so文件路径 load:false //是否执行系统加载System.load(so); },
//...
]
}
$dex.loadDex(options);
//开始使用dex里面的类
loadJar(options)
版本:1.1.0
加载jar/so文件
值得注意的就是so文件也有很多架构(x86_64,arm64_v8a等),根据自己手机的架构来选择需要加载的so文件(安卓特性);
此外:如果dex(java代码)中已经使用System.load(so);加载过的so文件不要重复加载,因为so文件只能被类加载器加载一次(安卓机制)
- 参数 : options {LoadDexConfig} 加载配置
- 返回 : DexClassLoader
let options = {
path:"dexOrJarPath",//jar或者dex文件路径
so:[
{path:"soPath", load:false},
{path:"soPath",//so文件路径 load:false //是否执行系统加载System.load(so); },
//...
]
}
$dex.loadJar(options);
//开始使用jar里面的类
clear()
版本:1.1.0
清除缓存的类加载器
$dex中存在一个内置的缓存机制,被加载的jar/dex文件会被生成一个唯一的id作为类加载器的标识,
在起初加载jar/dex文件的时候会保存id和类加载器对象
当再次加载相同的jar/dex文件时,会通过id直接取得类加载器对象来执行类
如果想重新加载需要调用$dex.clear()清除id和类加载器
如果只是单纯的加载dex/jar文件,这个函数可以随便调用;
但是如果加载了so文件,这个函数最好只使用一次,因为so文件只能被一个类加载器加载一次
就算不小心把加载过so文件的类加载器清空了也没有关系,重启app重新运行即可。
$dex.clear();
delete()
版本:1.1.1
删除缓存文件
dex加载必须要在安卓的私有目录(安卓机制),所以每次加载的dex文件都会放在私有目录下面
然而我们最主要只是拿到类加载器,当加载完后dex文件也就不需要了,所以可以调用这个函数来删除dex文件
$dex.delete();