1.文件类型
Android 应用程序一般包含在一个单一的文件夹中,即每一个 Android 应用程序是一个独立的工程,包含了以下文件:
Android.mk:统一工程文件,在 SDK 开发中可以不需要;
AndroidManifest.xml:工程描述文件,在其中定义了各种组件;
Java 源代码:按照 Java 包的方式来组织目录结构,包括各个 Java 类的源代码;
资源文件:包含 XML 文件、图片、原始数据文件等,其中表示界面情况的布局(Layout)文件比较重要。
2.文件结构
安卓项目中文件结构如图所示:
3.文件编译
在编译 Android 应用程序的过程中,Java 源代码使用 Sun JDK 将 Java 源程序编译成 Java 字节码文件(多个后缀名为.class 的文件),这一步骤和标准的 Java 一致,然后通过 Android 自带的工具软件 dex 把所有的字节码文件转成 dex 文件(单一文件 classes.dex)。
AndroidManifest.xml 文件经过 Android 打包工具(aapt)处理后形成二进制格式 AndroidManifest.xml 文件,实质的内容与以前相同。
各个资源文件也经过 aapt 处理,其中布局等文本文件处理成二进制文件,图片等文件保持不变。
最后将这三个部分组合成一个应用程序包(*.apk)。AndroidManifest.xml 描述文件、Java 源文件、资源文件是 Android 应用程序的三个部分;在编译之前的工程中是这三个部分,在编译之后 APK 包依然是由这三个部分组成的。
Android 应用程序的编译过程如图所示:
如图所示,Android 源文件经过了标准的 Java 编译器的编译,又经过了 dx 工具的处理,标准的 Java 字节码作为整个 Android 编译的中间过程,最终生成的 dex 文件(classes.dex)是一个单一文件,将工程中所有的 Java源代码文件对应的字节码集成在一起。资源文件和 AndroidManifest.xml 文件通过 aapt 工具进行处理。
4.程序运行
在运行时,APK 包将首先进行“安装”,也就是将其中的 dex 文件进行优化,优化后的文件被保存到缓存区域,生成格式为 dey 的优化文件,然后 Dalvik 虚拟机将运行这些 dey 文件。如果应用程序包文件不发生变化,dey 文件不会被重新生成;在应用程序包发生更新的情况下,将重新由 dex 生成 dey。
5.安卓和原生java 字节码的区别
Android 和标准 JAVA 开发的 JAR 包最大的不同在于,标准 JAVA 字节码是每个文件一个 Clash 文件,而Android 中的一个包将生成一个 Dex 文件。其中kotlin代码最终也是转化为java字节码运行,因此,一般认为二者在底层上并无差异。
6.扩展
涉及kotlin在安卓开发中的应用可访问下方链接,下载电子书-------《Kotlin从零到精通Android开发》进行参考研究。
http://code.drjtrtj.xyz/downCode?id=4022
电子书部分目录如下图所示: