-
-
[求助]dex内存加载的问题
-
发表于:
2016-5-27 09:01
5117
-
最近研究了下art环境下, dex内存加载的办法, 遇到了些问题, 现在贴出来, 希望哪位大拿能帮助解惑下。
加载思路:
第一步调用libart.so内的:
MemMap* MapAnonymous(const char* ashmem_name, byte* addr, size_t byte_count, int prot,bool low_4gb, std::string* error_msg)
(构造一个MemMap, 这个的目的就是, 把dex加载到内存里)
第2步调用libart.so内的:
DexFile* DexFile::OpenMemory(const std::string& location,uint32_t location_checksum,MemMap* mem_map,std::string* error_msg)
(构造一个DexFile, 其实这个函数就是一个DexFile构造函数, 没有其它功能)
通过上一步获得了一个DexFile指针, 直接传递给java层面。 就是对应的DexFile java类的mCookie。
第3步使用: java 代码, 直接反射使用defineClassNative这个函数, 获取一个类对象。
问题来了: 大部分类都可以获取, 但是如果a类继承了b类, 而这时候b类没有初始化, 就加载a类, 就会出现b类找不到的错误
由于我对安卓代码不是很熟悉, 不太理解, art下class是如何加载的, 以我目前的理解, 我的
加载过程跟系统没有太大区别了, 难道defineClassNative默认没有处理这种类和类之间的相互
依赖关系?
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课