背景
- Android studio不仅允许你为你的app和依赖库创建模块,同时也可为Android wear,Android TV,Google App Engine等创建模块,而这些单独的模块又可以在一个单独的项目中使用。举个栗子,在你的app开发后期阶段,你可能需要用到Google Clound或者Android Wear。这种情况下,你可以在你的工程下拥有三个模块:分别是app,google cloud,Android Wear整合。了解在一个工程下的多模块构建将会加速你的开发周期。
多模块构建的结构
- 一个工程包含多个模块,这些模块会存放到父目录下,然后为了告诉gradle,项目的结构及哪一个子文件夹包含模块,需要添加一个setting.gradle文件,每个模块可以提供其独立的build.gradle文件。举个例子,如下所示:
|
|
- setting.gradle文件声明的内容如下:
|
|
- 如果需要在你的app模块中添加library模块作为其依赖,可以在app的build.gradle中添加:
|
|
- 如果模块中还包含了子模块,gradle可以满足你的要求,比如:12345678910project├─── setting.gradle├─── build.grade├─── app│ └─── build.gradle└─── libraries├─── library1│ └─── build.gradle└─── library2└─── build.gradle
如果是这种情况,使用library1和library2就需要如下配置:
|
|
构建声明周期
- 初始化阶段,gradle首先会去找setting.gradle文件,如果该文件不存在,那么gradle会认为你只有一个模块。如果有多个模块,setting.gradle定义了这些模块的位置,如果子模块中包含build.gradle,那么gradle会执行他们,并将他们合并到构建任务中。
- gradle最大的策略是混合,你可以在根目录下定义一个build文件去定义所有模块相同的属性,然后在每个模块中的build文件去配置只属于该模块的参数。
建议
- 在AndroidStudio中运行tasks,假如你定义了多个tasks,在AndroidStudio gradle面板中是可以展示出来的,如下图所示:
加速你的多模块构建
- 当你构建你的多模块项目,gradle会依次执行所有的模块。当你的电脑内存够大的时候,让你的构建过程多线程将会更快。该特性在gradle早已存在,但是其默认关闭。所以如果你希望启动parallel构建,你需要在grade.properties文件中配置如下属性:
|
|
模块耦合
- 即你可以在一个模块中引用其他模块的属性,但是不建议这么做,可以在根目录下的build文件中定义这些公共属性。