默认情况下,Android Plugin会自动给项目设置同时构建应用程序的debug和release版本。 两个版本之间的不同主要围绕着能否在一个安全设备上调试,以及APK如何签名。
Debug版本采用使用通用的name/password键值对自动创建的数字证书进行签名,以防止构建过程中出现请求信息。Release版本在构建过程中没有签名,需要稍后再签名。
这些配置通过一个BuildType
对象来配置。默认情况下,这两个实例都会被创建,分别是一个debug
版本和一个release
版本。
Android plugin允许像创建其他构建类型一样定制debug
和release
实例。这需要在buildTypes
的DSL容器中配置:
android {
buildTypes {
debug {
applicationIdSuffix ".debug"
}
jnidebug.initWith(buildTypes.debug)
jnidebug {
packageNameSuffix ".jnidebug"
jnidebugBuild true
}
}
}
以上代码片段实现了以下功能:
debug
构建类型jnidebug
的新构建类型,并且这个构建类型是debug
构建类型的一个副本。jnidebug
构建类型,允许使用JNI组件,并且也添加了不一样的包名后缀。创建一个新的构建类型就是简单的在buildType
标签下添加一个新的元素,并且可以使用initWith()
或者直接使用闭包来配置它。
以下是一些可能使用到的属性和默认值:
Property name | Default values for debug | Default values for release / other |
---|---|---|
debuggable |
true | false |
jniDebugBuild |
false | false |
renderscriptDebugBuild |
false | false |
renderscriptOptimLevel |
3 | 3 |
applicationIdSuffix |
null | null |
versionNameSuffix |
null | null |
signingConfig |
android.signingConfigs.debug | null |
zipAlign |
false | true |
runProguard |
false | false |
proguardFile |
N/A (set only) | N/A (set only) |
proguardFiles |
N/A (set only) | N/A (set only) |
除了以上属性之外,Build Type还会受项目源码和资源影响: 对于每一个Build Type都会自动创建一个匹配的sourceSet。默认的路径为:
src/<buildtypename>/
这意味着BuildType名称不能是main或者androidTest(因为这两个是由plugin强制实现的),并且他们互相之间都必须是唯一的。
跟其他sourceSet设置一样,Build Type的source set路径可以重新被定向:
android {
sourceSets.jnidebug.setRoot('foo/jnidebug')
}
另外,每一个Build Type都会创建一个新的assemble
assembleDebug
和assembleRelease
两个Task在上面已经提到过,这里要讲这两个Task从哪里被创建。当debug
和release
构建类型被预创建的时候,它们的tasks就会自动创建对应的这个两个Task。
上面提到的build.gradle代码片段中也会实现assembleJnidebug
task,并且assemble
会像依赖于assembleDebug
和assembleRelease
一样依赖于assembleJnidebug
。
提示:你可以在终端下输入gradle aJ去运行assembleJnidebug task
。
可能会使用到的情况:
BuildType的代码和资源通过以下方式被使用: