Gradle的理解

根Gradle中闭包的解释:



buildscript {//构建脚本引用
    
    repositories {//插件仓库的配置
        //jcenter和google本质上是一个maven仓库
        google()
        jcenter()
    }
    dependencies {//依赖插件
        //Google的Android Gradle插件
        classpath 'com.android.tools.build:gradle:3.2.1'
        

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {//全部项目的配置
    repositories {//全部项目引用的基础仓库配置
        google()
        jcenter()
    }
}

task clean(type: Delete) {//声明任务
    delete rootProject.buildDir //删除主路径buildDir文件夹
}

app下的Gradle闭包的理解:

apply plugin: 'com.android.application'//引入编译构建Gradle插件

android {
    signingConfigs {
        config {
            keyAlias 'key0'
            keyPassword 'yanghailin'
            storeFile file('C:/Users/yanghailin/Desktop/keyApp/key.jks')
            storePassword 'yanghailin'
        }
    }
    compileSdkVersion 29//编译的SDK
    defaultConfig {//默认配置
        applicationId "com.yhl.project.demo.getgradle"
        minSdkVersion 15 //最低支持版本
        targetSdkVersion 29 //支持的目标版本
        versionCode 1 //版本号
        versionName "1.0" //版本名称
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"//测试脚本
    }
    buildTypes {//构建类型
        release {//release版本配置
            manifestPlaceholders = [test: "ceshiban"]
            minifyEnabled false//不使用混淆
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'//混淆文件
            debuggable true
            jniDebuggable false
            signingConfig signingConfigs.config//设置签名信息
            renderscriptDebuggable false
            zipAlignEnabled true//是否对APK包执行ZIP对齐优化,减小zip体积,增加运行效率
        }
        debug {
            manifestPlaceholders = [test: "ceshiban"]
            minifyEnabled false//不使用混淆
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'//混淆文件
            debuggable false
            jniDebuggable false
            signingConfig signingConfigs.config
            debuggable false//是否支持断点调试
            jniDebuggable false//是否可以调试NDK代码
            renderscriptDebuggable false
            zipAlignEnabled true
            pseudoLocalesEnabled false//是否在APK中生成伪语言环境,帮助国际化的东西,一般使用的不多
            applicationIdSuffix 'test'//在applicationId 中添加了一个后缀,一般使用的不多
            versionNameSuffix 'test'//在applicationId 中添加了一个后缀,一般使用的不多
        }
    }
    sourceSets {//目录指向配置
        main {
            jniLibs.srcDirs = ['libs']//指定lib库目录
        }
    }
    packagingOptions {//打包时的相关配置
        //pickFirsts做用是 当有重复文件时 打包会报错 这样配置会使用第一个匹配的文件打包进入apk
        // 表示当apk中有重复的META-INF目录下有重复的LICENSE文件时 只用第一个 这样打包就不会报错
        pickFirsts = ['META-INF/LICENSE']
        //merges何必 当出现重复文件时 合并重复的文件 然后打包入apk
        //这个是有默认值得 merges = [] 这样会把默默认值去掉 所以我们用下面这种方式 在默认值后添加
        merge 'META-INF/LICENSE'
        //这个是在同时使用butterknife、dagger2做的一个处理。同理,遇到类似的问题,只要根据gradle的提示,做类似处理即可。
        exclude 'META-INF/services/javax.annotation.processing.Processor'
    }
//    productFlavors {
//        wandoujia {}
//        xiaomi {}
//        _360 {}
//    }
    productFlavors.all {
            //批量修改,类似一个循序遍历
        flavor -> flavor.manifestPlaceholders = [IFLYTEK_CHANNEL: name]
    }
    //程序在编译的时候会检查lint,有任何错误提示会停止build,我们可以关闭这个开关
    lintOptions {
        abortOnError false
        //即使报错也不会停止打包
        checkReleaseBuilds false
        //打包release版本的时候进行检测
    }
}

dependencies {
    //项目的依赖关系
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    //本地jar包依赖
    implementation 'com.android.support:appcompat-v7:+'
    //远程依赖
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    testImplementation 'junit:junit:4.12'
    //声明测试用例库
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}

android{}闭包:这个闭包主要为了配置项目构建的各种属性;

  •         signingConfigs{}闭包:可以手动添加签名配置,也可以通过Project Structure 选中app,点击Singing添加
  •         compileSdkVersion:设置编译时用的Android版本
  •         buildToolsVersion:设置编译时使用的构建工具的版本,Android Studio3.0后去除此项配置
  •         defaultConfig{}闭包:

                 applicationId:指定了项目的包名。
                 minSdkVersion:指定项目最低兼容的版本,如果设备小于这个版本或者大于maxSdkVersion(一般不用)将无法安装这                   个应用,这里指定为16,表示最低兼容到Android 4.1系统。
                  targetSdkVersion:指定项目的目标版本,表示在该目标版本上已经做过充分测试,系统会为该应用启动一些对应该                    目标系统的最新功能特性,Android系统平台的行为变更,只有targetSdkVersion的属性值被设置为大于或等于该系统                    平台的API版本时,才会生效。例如,若指定targetSdkVersion值为22,则表示该程序最高只在Android5.1版本上做                      过充分测试,在Android6.0系统上(对应targetSdkVersion为23)拥有的新特性如系统运行时权限等功能就不会被启                      用。
                  versionCode:表示版本号,一般每次打包上线时该值只能增加,打包后看不见。
                  versionName:表示版本名称,展示在应用市场上。
                  testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"表明要使用AndroidJUnitRunner进行单 
          元测试

  • buildTypes{}闭包:release{}闭包和debug{}闭包两者能配置的参数相同,最大的区别默认属性配置不一样:

               minifyEnabled:表明是否对代码进行混淆,true表示对代码进行混淆,false表示对代码不进行混淆,默认的是false。
               proguardFiles:指定混淆的规则文件,这里指定了proguard-android.txt文件和proguard-rules.pro文件两个文件,                         proguard-android.txt文件为默认的混淆文件,里面定义了一些通用的混淆规则。proguard-rules.pro文件位于当前项目                   的根目录下,可以在该文件中定义一些项目特有的混淆规则。
               buildConfigField:用于解决Beta版本服务和Release版本服务地址不同或者一些Log打印需求控制的。例如:配置                          buildConfigField("boolean", "LOG_DEBUG", "true"),这个方法接收三个非空的参数,第一个:确定值的类型,第二                      个:指定key的名字,第三个:传值,调用的时候BuildConfig.LOG_DEBUG即可调用。
               debuggable:表示是否支持断点调试,release默认为false,debug默认为true。
               jniDebuggable:表示是否可以调试NDK代码,使用lldb进行c和c++代码调试,release默认为false
               signingConfig:设置签名信息,通过signingConfigs.release或者signingConfigs.debug,配置相应的签名,但是添加此                 配置前必须先添加signingConfigs闭包,添加相应的签名信息。
                renderscriptDebuggable:表示是否开启渲染脚本就是一些c写的渲染方法,默认为false。
                renderscriptOptimLevel:表示渲染等级,默认是3。
                pseudoLocalesEnabled:是否在APK中生成伪语言环境,帮助国际化的东西,一般使用的不多。
                applicationIdSuffix:和defaultConfig中配置是一的,这里是在applicationId 中添加了一个后缀,一般使用的不多。
                versionNameSuffix:表示添加版本名称的后缀,一般使用的不多。
                zipAlignEnabled:表示是否对APK包执行ZIP对齐优化,减小zip体积,增加运行效率,release和debug默认都为true

  • sourceSets{}闭包:配置目录指向
  • packagingOptions{}闭包:打包时的相关配置(当项目中依赖的第三方库越来越多时,有可能会出现两个依赖库中存在同一个(名称)文件。如果这样,Gradle在打包时就会提示错误(警告)。那么就可以根据提示,然后使用以下方法将重复的文件剔除,比较常用的是通过exclude去除重复的文件)
  • productFlavors{}闭包:多个渠道配置
  • lintOptions{}闭包:代码扫描分析
  • dependencies{}闭包:该闭包定义了项目的依赖关系,一般项目都有三种依赖方式:本地依赖、库依赖和远程依赖。

你可能感兴趣的:(gradle)