RE:从零开始学gradle(三)

上一章传送门:RE:从零开始学gradle(二)

关于构建变量

在开发应用程序时,通常拥有几个不同的版本。有用于本地测试的测试版本,用于发行的生产版本。还有可能有免费版本以及付费版本。不同的版本之间的API的URL通常是不同的,这样会导致管理起来特别复杂。为了解决这一问题,Gradle提出了一些可扩展的概念。这次,我们就来看看Gradle是如何做到多版本开发的。

BuildTypes(构建类型)

在Gradle的Android插件中,BuildTypes用于定义应用程序或者库。每个BuildTypes都可以指定调试符号是什么,应用程序ID是什么,未使用的资源是否需要删除等等。下面是一个标准的BuildTypes:

android {
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}
一般当新建好项目的时候AS就会在模块的build.gradle文件中配置以上的BuildTypes。通过设置minifyEnabled 为false可以禁止删除未使用的资源。通过设置proguardFiles来设置混淆文件。

当然,我们可以自己创建自定义的BuildTypes,下例创建了一个名为dlsdubug的自定义BuildTypes:

    buildTypes {
        dlsdebug {//会在BuildConfig.class 下生成常量
            applicationIdSuffix ".dlsdebug"
            versionNameSuffix "-dlsdebug"
            buildConfigField("String", "API_URL", "\"http://test.example.com/api/\"")//定义常量
            buildConfigField("boolean", "LOG_HTTP_CALLS", "true")
            resValue("string", "APP_NAME", "DLS_VIEW")//string的首字母需要小写
        }
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
通过设置applicationIdSuffix ".dlsdebug"给应用程序ID定义了一个新的后缀,这样的话,应用程序的ID应该是这样的:

Debug:com.dlsapp

Release:com.dlsapp

Dlsdebug:com.dlsapp.dlsdebug
这就意味着,可以同时在一个终端上安装自定义版本和生产版本,而且不会导致任何冲突。

创建新的BuildTypes并不总是从头开始,也可以继承复制另外一个BuildTypes的属性来构建:例如以下:

    buildTypes {
        dlsdebug.initWith(buildTypes.debug)
        dlsdebug {//会在BuildConfig.class 下生成常量
            applicationIdSuffix ".dlsdebug"
            versionNameSuffix "-dlsdebug"
            buildConfigField("String", "API_URL", "\"http://test.example.com/api/\"")//定义常量
            buildConfigField("boolean", "LOG_HTTP_CALLS", "true")
            resValue("string", "APP_NAME", "DLS_VIEW")//string的首字母需要小写
        }
    }
initWith()方法创建了一个新的BuildTypes并复制现有的BuildTypes到新的BuildTypes中。

针对型依赖

每个BuildTypes都可以有自己的依赖关系。Gradle自动创建每个BuildTypes的新依赖关系配置。如果要添加某个依赖仅仅用于debug版本的话,可以这样来实现:

dependencies {
    debugCompile 'com.android.support:appcompat-v7:23.1.1'
}
Product flavors(产品风格)

这点很好解释。就拿最简单的一款游戏来说,这款游戏会有多个渠道多个代理商,这些不同代理商都有着自己的账号系统以及支付系统,甚至连开启的LOGO和插件都不同。针对这些不同代理商,产品风格大大的简化了不同渠道下的程序的开发难度。

下面给出一个简单的Product flavors的例子:

    productFlavors {
        baidu {
            applicationId 'com.dlsview.baidu'
            versionCode 1
        }
        tecent {
            applicationId 'com.dlsview.tencent'
            minSdkVersion 14
            versionCode 2
        }
    }
产品风格主要是用于定义区别于基本风格的属性,其他未定义的属性是继承基本属性的。

Siging Configurations(签名配置)

先看一个实例:

签名设置:

项目右键,选择Open Module Settings 或者快捷键F4


进入Siging标签页


再具体设置一下你的签名信息就可以了。设置完这些信息,点击OK,Gradle就会在该module下的build.gradle的android块内生成以下代码:

    signingConfigs {//配置签名
        dlsdebug.initWith(signingConfigs.debug)
        dls {
            keyPassword '139dls'
            storeFile file('D:/MyView/dls.jks')//签名路径
            storePassword '139dls'
            keyAlias 'dls'
        }
    }
配置完以上签名信息后,在BuildTypes中调用
        dlsdebug {
            signingConfig signingConfigs.dls
        }
就可以自动给包签名。再执行build命令,就会生成不同的APK包了。


以上。未完待续~~












猜你喜欢

转载自blog.csdn.net/shirakawakanaki/article/details/52931237