美文网首页
Gradle:第二篇

Gradle:第二篇

作者: 钉某人 | 来源:发表于2017-10-28 14:39 被阅读0次

    内容简介:

    • 构建全局配置
    • 构建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如下

    buildTypes.png

    使用命名查看 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 {
        ...
    }
    

    相关文章

      网友评论

          本文标题:Gradle:第二篇

          本文链接:https://www.haomeiwen.com/subject/amhspxtx.html