Android培训班(71)Dex文件里类定义dvmDefineClass
2011-09-18 11:00
387 查看
clazz= dvmLookupClass(descriptor, loader, true);if(clazz == NULL) { constDexClassDef*pClassDef;这段代码是调用函数dvmLookupClass在已经加载的类里查找是否已经存在,如果已经存在,就直接使用就可以了。否则,就需要从Dex文件里读取出来。
#ifdefWITH_PROFILER dvmMethodTraceClassPrepBegin(); profilerNotified = true;#endif
#ifLOG_CLASS_LOADING u8 startTime =dvmGetThreadCpuTimeNsec();#endif
if(pDvmDex == NULL) { assert(loader ==NULL); /* shouldn't be hereotherwise */ pDvmDex =searchBootPathForClass(descriptor, &pClassDef);这段代码是当判断输入的参数Dex文件为空时,说明需要从系统缺省的库目录里加载,就是调用searchBootPathForClass函数去查找相应的类,并返回这个类的Dex文件对象。
} else{ pClassDef =dexFindClass(pDvmDex->pDexFile,descriptor);这行代码是当指定从Dex文件加载时,就调用函数dexFindClass从文件查找相应的类。
}
if(pDvmDex == NULL || pClassDef == NULL) { if(gDvm.noClassDefFoundErrorObj!= NULL) { /*usual case -- use prefabricatedobject */ dvmSetException(self,gDvm.noClassDefFoundErrorObj);这段代码是判断是否加载出错,如果出错就设置异常返回。 } else{ /*dexoptcase -- can't guarantee prefab(core.jar) */ dvmThrowExceptionWithClassMessage( "Ljava/lang/NoClassDefFoundError;",descriptor); }
这里都没有办法加载到指定类出错返回。 gotobail; }
#ifdefWITH_PROFILER dvmMethodTraceClassPrepBegin(); profilerNotified = true;#endif
#ifLOG_CLASS_LOADING u8 startTime =dvmGetThreadCpuTimeNsec();#endif
if(pDvmDex == NULL) { assert(loader ==NULL); /* shouldn't be hereotherwise */ pDvmDex =searchBootPathForClass(descriptor, &pClassDef);这段代码是当判断输入的参数Dex文件为空时,说明需要从系统缺省的库目录里加载,就是调用searchBootPathForClass函数去查找相应的类,并返回这个类的Dex文件对象。
} else{ pClassDef =dexFindClass(pDvmDex->pDexFile,descriptor);这行代码是当指定从Dex文件加载时,就调用函数dexFindClass从文件查找相应的类。
}
if(pDvmDex == NULL || pClassDef == NULL) { if(gDvm.noClassDefFoundErrorObj!= NULL) { /*usual case -- use prefabricatedobject */ dvmSetException(self,gDvm.noClassDefFoundErrorObj);这段代码是判断是否加载出错,如果出错就设置异常返回。 } else{ /*dexoptcase -- can't guarantee prefab(core.jar) */ dvmThrowExceptionWithClassMessage( "Ljava/lang/NoClassDefFoundError;",descriptor); }
这里都没有办法加载到指定类出错返回。 gotobail; }
相关文章推荐
- Android培训班(71)Dex文件里类定义dvmDefineClass
- Android培训班(71)Dex文件里类定义dvmDefineClass
- Android培训班(70)Dex文件里类定义dvmDefineClass
- Android培训班(70)Dex文件里类定义dvmDefineClass
- Android培训班(73)Dex文件里类定义dvmDefineClass
- Android培训班(70)Dex文件里类定义dvmDefineClass
- Android培训班(73)Dex文件里类定义dvmDefineClass
- Android培训班(73)Dex文件里类定义dvmDefineClass
- Android培训班(72)Dex文件里类定义dvmDefineClass
- Android培训班(72)Dex文件里类定义dvmDefineClass
- Android培训班(72)Dex文件里类定义dvmDefineClass
- Android培训班(69)Dex文件里类定义
- Android培训班(69)Dex文件里类定义
- class 文件与dex文件区别 (dvm与jvm区别)及Android DVM介绍
- class 文件与dex文件区别 (dvm与jvm区别)及Android DVM介绍
- Android培训班(69)Dex文件里类定义
- Android中的ClassLoader与dex文件加密实现分析
- Android手动打包:jar某目录下存在两个同名(不区分大小写)class文件,解压后如何再打包回dex
- Android培训班(62)dex文件格式3
- Android培训班(63)dex文件格式4