Gradle的使用总结

Android Studio 是谷歌推出一个Android集成开发工具,基于IntelliJ IDEA

  • 基于Gradle的构建支持
  • 支持ProGuard 和应用签名

Gradle 是一个基于Apache Ant和Apache Maven概念的项目自动化构建开源工具。它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,抛弃了基于XML的各种繁琐配置。

1、Gradle版本和Gradle插件的关系

在Gradle爆红之前,常用的构建工具是ANT,然后又进化到Maven。ANT和Maven这两个工具其实也还算方便,现在还有很多地方在使用。但是二者都有一些缺点,所以让更懒得人觉得不是那么方便。比如,Maven编译规则是用XML来编写的。XML虽然通俗易懂,但是很难在xml中描述if{某条件成立,编译某文件}/else{编译其他文件}这样有不同条件的任务。

Gradle选择了Groovy。Groovy基于Java并拓展了Java。Java程序员可以无缝切换到使用Groovy开发程序。Groovy说白了就是把写Java程序变得像写脚本一样简单。写完就可以执行,Groovy内部会将其编译成Java class然后启动虚拟机来执行。当然,这些底层的渣活不需要你管。 除了可以用很灵活的语言来写构建规则外,Gradle另外一个特点就是它是一种DSL,即Domain Specific Language,领域相关语言。

Gradle详解

低版本的插件不支持高版本的gradle

  • Gradle版本配置在gradle-wrapper.properties里:
//gradle版本号
distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip
复制代码
  • gradle插件版本配置在project的build.gradle里

    buildscript中的repositoriesallprojects的repositories的区别

//buildscript中的repositories:是gradle脚本执行所需依赖,分别是对应的maven库和插件 
buildscript {
    repositories {
        jcenter()
        maven {
            url 'https://maven.google.com/'
            name 'Google'
        }
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.1.0' //gradle插件版本
    }
}

//allprojects的repositories:项目本身需要的依赖。
allprojects {
    repositories {
        jcenter()
        mavenCentral()
        maven { url "https://jitpack.io" }
    }
}
复制代码

2、api、implementation、compile关系

gradle插件3.0 支持 api、implementation,废弃了compile

api: 和compile使用一致;

implementation: implementation编译的依赖只作用于当前的module。

  • 如果APP module依赖了core module,core module中使用implementation编译的三方库,core module可以使用三方库,app module中无法使用该三方库;

  • 如果core module 使用implementation依赖了base module,则APP module中也无法使用base module。

升级到gradle插件(gradle-tools)3.0.0:需要gradle版本升级到4.1以上;android studio版本升级到3.0.0以上。

3、buildTypes 构建类型

buildConfigField

构建时配置的参数:buildConfigField "type", "name", "value"

if(BuildConfig.LOG_DEBUG){ //使用
    //Debug,打印日志
}else{
    //release,关闭日志
}

buildConfigField "String", "SERVER_HOST", "200.200.200.50"
String host = BuildConfig.SERVER_HOST; //取值
复制代码

minifyEnabled 是否进行混淆

buildTypes { //位于module中的,build.gradle中的,android {} ,括号里
        debug {
            buildConfigField "boolean", "LOG_DEBUG", "true"
            minifyEnabled false
            zipAlignEnabled false
            shrinkResources false
            debuggable true
            signingConfig signingConfigs.debug
        }

        release {
            // 不显示Log
            buildConfigField "boolean", "LOG_DEBUG", "false"
            minifyEnabled true //混淆
            zipAlignEnabled true //对齐app所有资源,运行时Android与应用程序间的交互更加有效率;
            debuggable false
            shrinkResources true  // 移除无用的resource文件,可以减小apk包的大小
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.release
        }
    }
复制代码

4、依赖更新

项目依赖的远程包如果有更新,会有提醒或者自动更新吗? 不会的,需要你手动设置changing标记为true,这样gradle会每24小时检查更新,通过更改resolutionStrategy可以修改检查周期。

configurations.all {
    // check for updates every build
    resolutionStrategy.cacheChangingModulesFor 0, 'seconds'
}
复制代码

5、lintOptions

stackoverflow地址

android {
    lintOptions {
        // true--关闭lint报告的分析进度
        quiet true
        // true--错误发生后停止gradle构建
        abortOnError false
        // true--只报告error
        ignoreWarnings true
        // true--忽略有错误的文件的全/绝对路径(默认是true)
        //absolutePaths true
        // true--检查所有问题点,包含其他默认关闭项
        checkAllWarnings true
        // true--所有warning当做error
        warningsAsErrors true
        // 关闭指定问题检查
        disable 'TypographyFractions','TypographyQuotes'
        // 打开指定问题检查
        enable 'RtlHardcoded','RtlCompat', 'RtlEnabled'
        // 仅检查指定问题
        check 'NewApi', 'InlinedApi'
        // true--error输出文件不包含源码行号
        noLines true
        // true--显示错误的所有发生位置,不截取
        showAll true
        // 回退lint设置(默认规则)
        lintConfig file("default-lint.xml")
        // true--生成txt格式报告(默认false)
        textReport true
        // 重定向输出;可以是文件或'stdout'
        textOutput 'stdout'
        // true--生成XML格式报告
        xmlReport false
        // 指定xml报告文档(默认lint-results.xml)
        xmlOutput file("lint-report.xml")
        // true--生成HTML报告(带问题解释,源码位置,等)
        htmlReport true
        // html报告可选路径(构建器默认是lint-results.html )
        htmlOutput file("lint-report.html")
        //  true--所有正式版构建执行规则生成崩溃的lint检查,如果有崩溃问题将停止构建
        checkReleaseBuilds true
        // 在发布版本编译时检查(即使不包含lint目标),指定问题的规则生成崩溃
        fatal 'NewApi', 'InlineApi'
        // 指定问题的规则生成错误
        error 'Wakelock', 'TextViewEdits'
        // 指定问题的规则生成警告
        warning 'ResourceAsColor'
        // 忽略指定问题的规则(同关闭检查)
        ignore 'TypographyQuotes'
    }
}

复制代码

转载于:https://juejin.im/post/5b59a25ee51d45198c01b688

你可能感兴趣的:(Gradle的使用总结)