Android编程权威指南(第4版)
上QQ阅读APP看书,第一时间看更新

1.9 深入学习:Android编译过程

学到这里,你可能迫切想了解Android是如何编译的。你已看到,在项目文件有变动时,Android Studio无须指示便会自动进行编译。在整个编译过程中,Android开发工具将资源文件、代码以及AndroidManifest.xml文件(包含应用的元数据)编译生成.apk文件。为了在模拟器上运行,.apk文件还需以debug key签名。(分发.apk应用给用户时,应用必须以release key签名。要进一步了解编译过程,可参考Android开发文档。)

那么,activity_main.xml布局文件的内容是如何转变为View对象的呢?作为编译过程的一部分,aapt2(Android Asset Packaging Tool)将布局文件资源编译压缩紧凑后,打包到.apk文件中。然后,在MainActivity类的onCreate(Bundle?)函数调用setContentView(...)函数时,MainActivity使用LayoutInflater类实例化布局文件中定义的每一个View对象,如图1-22所示。

图1-22 activity_main.xml中的视图实例化

(除了在XML文件中定义视图外,也可以在activity里使用代码创建视图类。不过,从设计角度来看,应用展现层与逻辑层分离有很多好处,其中最主要的一点是可以利用SDK内置的设备配置变更,这一点将在第3章中详细讲解。)

有关XML不同属性的工作原理以及视图如何显示在屏幕上等更多信息,请参见第10章。

Android编译工具

当前,我们看到的项目编译都是在Android Studio里执行的。编译功能已整合到IDE中,IDE负责调用aapt2等Android标准编译工具,但编译过程本身仍由Android Studio管理。

有时,出于某种原因,可能需要脱离Android Studio编译代码。最简单的方法是使用命令行编译工具。Android编译系统使用的编译工具叫Gradle。

(注意,能读懂本节内容并按步骤操作是最好的。如果看不懂,甚至不知道为什么要手动编译代码,或者是无法正确使用命令行,也不必太在意,请继续学习下一章内容。命令行工具的具体使用不在本书讨论范围内。)

要从命令行使用Gradle,请切换至项目目录并执行以下命令:

$ ./gradlew tasks

如果是Windows系统,执行以下命令:

> gradlew.bat tasks

执行以上命令会显示一系列可用任务。你需要的任务是installDebug,因此,再执行以下命令:

$ ./gradlew installDebug

如果是Windows系统,执行以下命令:

> gradlew.bat installDebug

以上命令将把应用安装到当前连接的设备上,但不会运行它。要运行应用,需要在设备上手动启动。