您的位置:首页 > 移动开发 > Android开发

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; }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: