能力值:
( LV7,RANK:110 )
|
-
-
2 楼
1、defineClass就是加载对应的classObject,每次只加载自己对应的类就ok,所以我觉得不需要else后面的代码。
2、因为继承了DexClassLoader,在调用了super(oriPath, fakePath, libraryPath, parent);继续跟踪代码发现,还是执行了优化dex,所以还是耗时。不耗时,就得直接加载dex,参考http://bbs.pediy.com/showthread.php?t=205577。
3、因为4.4已经把java层的openDexFile移除了,在这个版本就不能通过反射获取这个方法了,为了通用型,所以才这么大费周折。
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
非常感谢你的回答,对于你的回答:“2、因为继承了DexClassLoader,在调用了super(oriPath, fakePath, libraryPath, parent);继续跟踪代码发现,还是执...”
这里的super传进去的dex路径是壳程序的路径,所以应该不会执行dexopt的优化,我实现的原理和你发的那个链接里的方法是一样的,但就是不知道为什么这么慢,有可能是在defineClass的那个循环里没有break吧,我改一下看看怎么样。
多谢!
|
能力值:
( LV7,RANK:110 )
|
-
-
4 楼
public DexClassLoader(String dexPath, String optimizedDirectory,
String libraryPath, ClassLoader parent) {
super(dexPath, new File(optimizedDirectory), libraryPath, parent);
}
继续执行
public BaseDexClassLoader(String dexPath, File optimizedDirectory,
String libraryPath, ClassLoader parent) {
super(parent);
this.pathList = new DexPathList(this, dexPath, libraryPath, optimizedDirectory);
}
继续执行
在DexPathList构造函数中调用了makeDexElements,makeDexElements又调用了loadDexFile,loadDexFile调用了 DexFile.loadDex,这个方法走进了native方法里面,先优化,再形成Dexfile结构。
|
|
|