10

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

4

2 回答 2

15

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

对于 XML 文件,通常会保留注释。编译后的类文件只有一个用途(在虚拟机上运行),而 XML 文件可以用于多种用途。例如,您可以将 XML 文件加载到应用程序中并对其进行操作。根据应用程序中 XML 文件的使用情况,可能需要在其中保留注释 - 事实上,您的应用程序可能会专门寻找注释。因为 XML 文件可能有广泛的用途,所以不会从 XML 文件中删除注释,以防它们被用于其他目的。

于 2012-05-16T02:31:53.850 回答
5

文件的字节码/.class 版本中不存在注释。编译时编译器会忽略注释。

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

尝试使用任何存档器打开一个 zip 之类的 apk 文件 .. 你会在其中看到 classes.dex 文件..

就 xml 文件而言 .. 仅当您在屏幕上显示某些内容(即正在呈现的活动)时,应用程序才会使用它们..所以在显示活动时..其对应的 xml 文件用于构建 UI .. 这个过程称为充气!

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

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

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

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

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

希望它有所帮助!:)

于 2012-05-16T02:19:52.727 回答