内容简介:
- 构建全局配置
- 构建buildTypes
- 构建signingConfigs
- 使用Java8的lambda新特性
- lintOptions
构建全局配置
我们在开发中,module的build.gradle中经常使用到常量,通常会提取出来作为全局常量,同时在多个module中也可以使用全局常量
默认的module中的gradle中的常量:
apply plugin: 'com.android.application'
android {
compileSdkVersion 25
buildToolsVersion "26.0.0"
defaultConfig {
applicationId "com.example.calculatorforprogrammer"
minSdkVersion 15
targetSdkVersion 25
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
compile 'com.android.support:appcompat-v7:25.3.1'
}
1.在项目的gradle文件中指定全局的配置信息,我们这里用ext领域来指定
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.3.2'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
ext{
compileSdkVersion = 25
buildToolsVersion = "26.0.0"
minSdkVersion = 15
targetSdkVersion = 25
versionCode = 1
versionName = "1.0"
}
2.在module的gradle文件中引用项目gradle文件的配置信息就可以咯
apply plugin: 'com.android.application'
android {
compileSdkVersion rootProject.ext.compileSdkVersion
buildToolsVersion rootProject.ext.buildToolsVersion
defaultConfig {
applicationId "com.dingmouren.test"
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode rootProject.ext.versionCode
versionName rootProject.ext.versionName
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:25.3.1'
compile 'com.android.support.constraint:constraint-layout:1.0.2'
testCompile 'junit:junit:4.12'
}
构建buildTypes
设置buildTypes{...}可以构建出不同类型的apk,例如:实现只有在debug类型下才开启的功能,调试 、log等。我们可以为不同构建类型实现不同的参数配置。系统默认的构建类型有debug和release,gradle支持自定义创建新的构建类型。
buildTypes属性详情
现在我们创建一个构建类型:dev 如下
apply plugin: 'com.android.application'
android {
compileSdkVersion rootProject.ext.compileSdkVersion
buildToolsVersion rootProject.ext.buildToolsVersion
defaultConfig {
...
}
buildTypes {
release {
minifyEnabled true //是否精简代码、资源,混淆
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
dev.initWith(buildTypes.release) //dev了继承release里面配置参数
dev {
applicationIdSuffix ".dev" //自定义构建类型,applicationIdSuffix 用来区分不同的构建类型,生成的apk的包名后缀有".dev"
shrinkResources false //是否删除一些无用的资源
zipAlignEnabled false //是否开启zip优化
}
}
}
dependencies {
...
}
在Android Studio的Terminal终端窗口执行命令: gradle build
,生成apk如下
使用命名查看 app-dev-unsigned.apk 的包名,applicationIdSuffix指定了包名的后缀哦
构建dev类型的apk(带有后缀).png
构建signingConfigs
首先我们在app目录下生成一个“dev_key.jks”的签名,配置签名.因为签名的信息都是一些常量,属于配置信息,我们将这里配置信息提取到 gradle.properties 这个文件中,这里演示了两种从 gradle.properties文件中获取配置信息的方式,选取一种即可。
apply plugin: 'com.android.application'
android {
compileSdkVersion rootProject.ext.compileSdkVersion
buildToolsVersion rootProject.ext.buildToolsVersion
defaultConfig {
...
}
buildTypes {
//为指定构建类型配置签名信息,这个要在buildTypes前面,不然的话buildTypes中的找不到指定的签名信息
signingConfigs {
dev {
//1.使用System.properties的方式获取在gradle.properties中自定义的配置参数
storeFile file(System.properties['keyStore'])
storePassword System.properties['keyStorePassword']
keyAlias System.properties['keyAlias']
keyPassword System.properties['keyAliasPassword']
//2.使用键值对的方式获取gradle.properties中自定义的配置参数
storeFile file(project.property('dev.keyStore'))
storePassword project.property('dev.keyStorePassword')
keyAlias project.property('dev.keyAlias')
keyPassword project.property('dev.keyAliasPassword')
}
}
release {
minifyEnabled false //是否精简代码、资源,混淆
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
dev.initWith(buildTypes.release) //dev了继承release里面配置参数
dev {
signingConfig signingConfigs.dev //为构建类型加入签名的设置,生成的apk包含有签名和未签名两种
applicationIdSuffix ".dev" //自定义构建类型,applicationIdSuffix 用来区分不同的构建类型,生成的apk的包名后缀有".dev"
shrinkResources false //是否删除一些无用的资源
zipAlignEnabled false //是否开启zip优化
}
}
}
dependencies {
...
}
gradle.properties 文件中的配置信息:
# 用来配置脚本中的动态参数
#获取这里自定义的配置参数 : 可以通过System.properties的方式
systemProp.keyStore=dev_key.jks
systemProp.keyStorePassword=testtest
systemProp.keyAlias=key1
systemProp.keyAliasPassword=testtest
#获取这里自定义的配置参数 : 通过键值对的方式
dev.keyStore=dev_key.jks
dev.keyStorePassword=testtest
dev.keyAlias=key1
dev.keyAliasPassword=testtest
使用Java8的lambda新特性
compileOptions是配置java编译的选项,可以指定Java的编译版本,我们通常为了使用某些java版本中的语言新特性,使用这个配置
1.在module的gradle文件顶部引入lamda的插件,配置compileOptions{..}要编译的java版本
apply plugin: 'com.android.application'
apply plugin: 'me.tatarka.retrolambda' //引入lambda的插件
android {
...
}
buildTypes {//构建类型
...
}
compileOptions{
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
dependencies {
...
}
2.在项目的gradle文件中也要添加lambda的插件
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.3.2'
classpath 'me.tatarka:gradle-retrolambda:3.2.5' //lambda的插件
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
lintOptions
lintOptions是用于控制Lint代码检查的,因为在Lint Check的时候,编译会因为Lint的error而终止,通过设置这个选项,可以在Lint Check发生error仍然可以继续编译
apply plugin: 'com.android.application'
apply plugin: 'me.tatarka.retrolambda'
android {
compileSdkVersion 25
buildToolsVersion "26.0.0"
defaultConfig {
...
}
buildTypes {//构建类型
...
}
lintOptions{
abortOnError false
}
dependencies {
...
}
网友评论