构建buildTypes
通过创建不同的构建类型,从而生成不同类型的apk,可以帮助开发者完成很多事情。例如实现只有在debug类型下才开启的功能,如调试、Log等功能,以及为不同构建类型实现不同的参数配置,等等。
构建类型基础
当创建好默认的Android Studio项目时,在android领域中系统默认配置了buildTypes。
- buildTypes {
- release {
- minifyEnabled false
- proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
- }
- }
如果直接在终端中执行gradle build命令,那么系统会在module的output/apk目录下创建生成apk文件,如图4.9所示。
图4.9 生成的apk文件
系统一共默认生成了3个apk文件、2个debug类型、1个release类型。而在build.gradle脚本中,虽然只有一个release类型,但实际上release和debug都是系统的默认类型,即使不写也会生成。当然,你也可以对默认的debug和release进行修改,给它配置更多的参数,这些参数。
那么除了系统默认的构建type——debug和release之外,gradle同样支持自定义创建新的构建类型。例如,在脚本中增加一个xys类型,同时设置该类型的applicationIdSuffix参数为“.xys”,代码如下所示。
- buildTypes {
- release {
- minifyEnabled false
- proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
- }
- xys {
- applicationIdSuffix ".xys"
- }
- }
在终端中执行gradle clean&gradle build指令,再打开之前生成apk的目录,可以发现生成的apk,如图4.10所示。
图4.10 新的构建类型
生成的apk文件在之前的基础上多了一个app-xys-unsigned.apk,这个就是自定义的新的buildType——xys类型。那么applicationIdSuffix参数的作用是什么呢?我们知道在Android系统中,系统是通过包名来区分应用的。如果应用的包名相同,那么就意味着这是一个应用。因此在构建类型的时候,可以指定applicationIdSuffix参数为默认的包名增加一个后缀。例如前面例子中的“.xys”,以此区分不同的构建类型。类似的方式,还可以给debug版本增加“.debug”的后缀,给release版本增加“.release”的后缀。
使用aapt工具,检查不同的构建类型所配置的包名是否进行了修改,可以执行以下指令。
- ./aapt dump badging……/GradleTest/app/build/outputs/apk/app-debug-unaligned.apk
显示效果如下所示。
- package: name='com.xys.gradletest' versionCode='1'
- versionName='1.0' platformBuildVersionName='6.0-2438415'
可以看见,debug构建类型的apk,由于没有设置applicationIdSuffix,其包名为默认的com.xys.gradletest。同样执行上面的指令,只是将apk换为xys的构建类型,显示效果如下所示。
- package: name='com.xys.gradletest.xys' versionCode='1'
- versionName='1.0' platformBuildVersionName='6.0-2438415'
可以看见xys构建类型的apk,由于指定了applicationIdSuffix参数为“.xys”。因此在默认包名的后面,增加了“.xys”后缀。
除了使用gradle build指令完成整个build任务之外,当指定了自定义的构建类型时,你还可以指定完成其中任何一个构建类型的构建任务。实际上,前面我们已经提到了gradle assembleDebug和gradle assembleRelease两个默认的构建类型。同理,系统也帮助我们生产了gradle assembleXys构建任务,单独运行这个Task就可以直接生成xys类型的构建任务。
构建类型buildTypes的继承
当创建自定义的构建类型时,不仅仅可以完全创建一个新的类型,而且还可以通过继承一个已有的构建类型来创建新的构建类型。也就是类似继承的方式,代码如下所示。
- buildTypes {
- release {
- minifyEnabled false
- proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
- }
- xys.initWith(buildTypes.debug)
- xys {
- applicationIdSuffix ".xys"
- }
- }
通过以上代码,xys构建类型就继承了默认的debug构建类型的配置,同时还添加了自定义配置。
构建类型的参数
在前文中只提到了applicationIdSuffix参数,实际上在配置构建类型时,还可以配置很多参数来区分不同的构建类型。文档中给出了详细的参数列表,以及这些参数在debug\release&other类型下的默认值。

通过这些配置参数,可以非常方便地对构建Type进行不同的自定义。
