摘要:
接着来分析函数dvmDefineClass,它的代码如下: ClassObject*dvmDefineClass(DvmDex*pDvmDex, constchar*descriptor, Object*classLoader) { 这个函数输入的参数有三个,第一个pDvmDex参数是表示Dex文件对象,第二个descriptor参数是需要加载类名称,第三个classLoader参数是类的加载对象。 assert(pDvmDex !=NULL); returnfindClassNoInit(descriptor, classLoader, pDvmDex);这行代码调用函数fi... 阅读全文
posted @ 2011-09-12 15:08
ajuanabc
阅读(301)
评论(0)
推荐(0)
摘要:
当在虚拟机里加载Dex文件后,这个文件的数据已经读取到内存里,能不能马上使用呢?能不能使用里面的类呢?显然是不行的,因为那些加载到内存的数据,只是储存的格式,不具备运行的条件,因此需要调用方法defineClass来定义类,才可以运行在虚拟机里。所有Java编译后的类保存在Dex文件里,使用上面介绍的方法openDexFile打开Dex文件,接着需要调用方法defineClass来定义类,其实就是调用原生的函数Dalvik_dalvik_system_DexFile_defineClass, 类的加载流程如下:1)方法openDexFile里通过dvmDexFileOpenFromFd函数调用 阅读全文
posted @ 2011-09-09 22:29
ajuanabc
阅读(336)
评论(0)
推荐(0)
摘要:
演示地址:http://www.corange.cn/demo/3785/index.html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Conte 阅读全文
posted @ 2011-09-06 12:06
ajuanabc
阅读(118)
评论(0)
推荐(0)
摘要:
在上面的函数里,提到使用dvmJarFileOpen函数找到classes.dex文件,并加载到内存里,然后提供后面的函数使用。现在就来分析这个函数的代码,如下:intdvmJarFileOpen(const char* fileName, const char* odexOutputName, JarFile** ppJarFile, bool isBootstrap){在这里提供四个参数,第一个参数fileName是输入的Jar的文件名称;第二个参数odexOutputName是进行优化后的Dex输出文件;第三个参数ppJarFile是已经打开并缓存到内存里的文件对象;第四个参数isB.. 阅读全文
posted @ 2011-09-04 14:21
ajuanabc
阅读(1215)
评论(0)
推荐(0)
摘要:
从上面可知调用函数Dalvik_dalvik_system_DexFile_openDexFile来打开Dex文件,这个函数的源码如下:staticvoid Dalvik_dalvik_system_DexFile_openDexFile(const u4* args, JValue* pResult){ StringObject* sourceNameObj =(StringObject*) args[0];这行是输入的Jar或Dex文件名参数。 StringObject* outputNameObj =(StringObject*) args[1];这行是输出的文件名参数。 ... 阅读全文
posted @ 2011-09-03 21:46
ajuanabc
阅读(441)
评论(0)
推荐(0)
浙公网安备 33010602011771号