Android 编译器是如何工作的?它会在编译时删除 Java 代码和 Android XML 文件中的注释吗?
2 回答
Java 文件中的注释在编译成类文件时会被删除或忽略。类文件不是供人类阅读的——它们经过优化以在虚拟机上高效运行。如果要保留注释,它们只会导致类文件大于所需的大小,并且没有额外的好处(即编译器和虚拟机不理解注释,所以为什么要包含它们)
对于 XML 文件,通常会保留注释。编译后的类文件只有一个用途(在虚拟机上运行),而 XML 文件可以用于多种用途。例如,您可以将 XML 文件加载到应用程序中并对其进行操作。根据应用程序中 XML 文件的使用情况,可能需要在其中保留注释 - 事实上,您的应用程序可能会专门寻找注释。因为 XML 文件可能有广泛的用途,所以不会从 XML 文件中删除注释,以防它们被用于其他目的。
文件的字节码/.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 应用程序中的位置差异!:)
希望它有所帮助!:)