在Android中编译java文件后,注释会发生什么?

时间:2012-05-16 02:05:16

标签: java android compiler-construction comments apk

Android编译器如何工作?它是否在编译时删除了Java代码和Android XML文件中的注释?

2 个答案:

答案 0 :(得分:12)

将Java文件中的注释编译到类文件中时,将删除或忽略它们。类文件不适合人工阅读 - 它们经过优化,可以在虚拟机上高效运行。如果要保留注释,它们只会导致类文件大于所需,并且没有额外的好处(即,编译器和虚拟机不理解注释,所以为什么要包含它们)

对于XML文件,通常会保留注释。虽然编译的类文件只有1个目的(在虚拟机上运行),但XML文件可以用于多种用途。例如,您可以将XML文件加载到应用程序中并对其进行操作。根据应用程序中XML文件的使用情况,可能需要将注释保留在那里 - 实际上,您的应用程序可能会专门查找注释。由于XML文件可能具有广泛的用途,因此如果出于某些其他目的需要注释,则不会从XML文件中删除注释。

答案 1 :(得分:5)

文件的字节代码/ .class版本中没有注释。编译时编译器会忽略注释。

编译器的工作方式是将所有高级语言代码一次性转换为机器可理解的Code..all ..不像解释器一样逐行。 在Android的情况下..编译器将.java源文件转换为其bytecode / .class文件...然后转换为.dex文件(Dalvik可执行文件).Android中的所有应用程序都运行在名为Dalvik Virtual的虚拟机之上需要.dex文件的机器..

尝试打开像zip一样的apk文件..使用任何归档器..你会在那里看到classes.dex文件..

就xml文件而言..只有当你在屏幕上显示某些内容时(即正在呈现的Activity),它们才被应用程序使用..所以在显示活动时...相应的xml文件用于构造UI ..这个过程称为膨胀!

编辑:[但有一点我记得现在关于这一点是...... Android手机中存在的系统应用程序......例如所有Google提供的应用程序(Gmail,地图等)..联系人,Phone.apk etc.all那些是系统apks ..存在于/ system / app /目录中..它们可能包含也可能不包含.dex文件。

如果它们包含apk文件中的.dex(就像我们开发的任何普通应用程序一样)..那么ROM被称为去索引ROM(Android OS的固件)..但这反过来会导致速度变慢由于将所有.dex文件从系统.apk文件复制到dalvik缓存,因此在第一次安装ROM时启动...因为在系统启动/启动时需要系统apks的所有.dex文件。

但是如果ROM被索引了..系统.apk的所有.dex文件都不在.apk中,而是作为/ system / app /目录中的单独文件..扩展名.odex

对于您和我开发的所有应用程序(非系统应用程序).​​.只是Play商店的应用程序..这些确实包含.apk中的.dex

编辑:我知道它与工作或问题没有多大关系......但只是想提一下sys和非sys应用程序的.dex文件的位置差异! :)

希望它有所帮助! :)