2016-02-27 48 views
1

在ART wiki中已经描述了它: https://en.m.wikipedia.org/wiki/Android_Runtime?_e_pi_=7%2CPAGE_ID10%2C1898354483 ,ART在安装时将apk文件编译成ELF文件。android art elf和Linux elf文件有什么区别?

GNU/Linux上的GCC也创建ELF文件作为输出,最近代替a.out格式。

我知道在这两种环境下API和架构都存在差异,但是这两种格式中是否存在任何结构或任何其他显着差异?

这些格式是否相互兼容,如果架构相同(Android已经移植到x86)?

或者这两种文件格式完全不同吗?

+0

解释是[这里](https://www.google.com/events/io/io14videos/b750c8da-aebe-e311-b297-00155d5066d7)6:30 - 10:00 – Enkelli

回答

2

自制解释:在PDF (Dalvik and ART)中,你可以发现“OAT文件实际上嵌入在ELF目标文件中”(在PDF的第16页上,你可以看到OAT结构)。文件结构与wiki相同。这是可能的,因为ELF“通过设计灵活且可扩展,并且不受任何特定处理器或体系结构的约束”。

elf format on wikipedia:使用Android Runtime(ART),默认Android 5.0为“Lollipop”后,所有应用程序在安装时都会编译为本机ELF二进制文件。

结论:回答你的问题是gcc elf和android elf是相同的文件格式。更多关于你可以在wiki找到的格式。

更新

“这些格式相互兼容,如果architechture是相同的”

Readelf为Android燕麦文件(我的应用程序之一检查)表明,燕麦文件类型是“DYN(共享对象文件)”。它与.so文件类似,如果您的项目使用jni库,您可以看到.so文件。由于“仿生学系统库函数和动态链接器”(在android中使用),即使为相同的体系结构构建,这些精灵文件也不能与通常的GNU/Linux精灵文件兼容。更多描述为什么他们不兼容,你可以找到here。仿生于wiki

+0

这些格式是否兼容其他,如果建筑是相同的(作为android已被移植到x86)?..这个问题还没有得到解答 –

+0

我添加更多的问题更新(没有张贴在评论中,因为我试图添加更多的描述这在评论中看起来很尴尬)。 –