Gradle配置Android项目debug和release版本

分享到:

默认情况下,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构建类型

将debug版本的包名设置为.debug以便能够同时在一台设备上安装debug和release版本的apk。

创建了一个名为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。

 

可能会使用到的情况:

 

release模式不需要,只有debug模式下才使用到的权限

自定义的debug实现

为debug模式使用不同的资源(例如当资源的值由绑定的证书决定)

BuildType的代码和资源通过以下方式被使用:

manifest将被混合进app的manifest

代码行为只是另一个资源文件夹

资源将叠加到main的资源中,并替换已存在的资源。

昵    称:
验证码:

相关文档:

Android基础知识
Android组件
Android控件
Android实例