组件化学习之gradle语法

Gradle是什么

  • Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建开源工具。它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,目前也增加了基于Kotlin语言的kotlin-based DSL,抛弃了基于XML的各种繁琐配置。面向Java应用为主。
  • Gradle是一个基于JVM的构建工具,是一款通用灵活的构建工具,支持maven,Ivy仓库,支持传递性依赖管理,而不需要远程仓库或者是pom.xml和ivy.xml配置文件,基于Groovy,build脚本使用Groovy编写。
  • Groovy 是用于Java虚拟机的一种敏捷的动态语言,它是一种成熟的面向对象编程语言,既可以用于面向对象编程,又可以用作纯粹的脚本语言。(Groovy是弱类型语言)

环境配置:Android Studio 4.0 + Gradle6.1.1

在项目中新建一个文件,名命为config.gradle

// 添加多个自定义属性,可以通过ext代码块
ext {
    username = "xyzkaye"
    // 生产/开发环境(正式/测试区分)
    isRelease = true

    // 建立Map存储,对象名、key都可以自定义,groovy糖果语法,非常灵活
    androidId = [ // 字典
            compileSdkVersion: 28,
            buildToolsVersion: "29.0.0",
            minSdkVersion    : 19,
            targetSdkVersion : 28,
            versionCode      : 1,
            versionName      : "1.0"
    ]

    appId = [
            app    : "com.xyzkaye.modular.gradle",
            library: "com.xyzkaye.modular.library"
    ]

    // 生产/开发环境URL
    url = [
            "debug"  : "https://11.22.33/debug",
            "release": "https://11.22.33/release"
    ]
    supportLibrary = "28.0.0" // ${xxx}
    
    // 第三方库
    dependencies = [
            "appcompatVersion" : "com.android.support:appcompat-v7:${supportLibrary}",
            "recyclerviewVersion" : "com.android.support:recyclerview-v7:${supportLibrary}",
            "appcompat" : "androidx.appcompat:appcompat:1.2.0",
            "recyclerview" : "androidx.recyclerview:recyclerview:1.1.0",
            "constraint" : "androidx.constraintlayout:constraintlayout:1.1.3"
    ]
}

下面打开项目根目录的build.gradle

在根目录build.gradle头部加入自定义gradle,相当于layout布局中的include
在这里插入图片描述

下面打开app下面的build.gradle

apply plugin: 'com.android.application'

println("hello gradle")

println "${username}"
// 正确的语法:${rootProject.ext.username} 
println "${rootProject.ext.username}"


// 赋值与引用
def androidId = rootProject.ext.androidId
def appId = rootProject.ext.appId
def support = rootProject.ext.dependencies

android {
    compileSdkVersion androidId.compileSdkVersion
    buildToolsVersion androidId.buildToolsVersion
    defaultConfig {
        applicationId appId.applicationId
        minSdkVersion androidId.minSdkVersion
        targetSdkVersion androidId.targetSdkVersion
        versionCode androidId.versionCode
        versionName androidId.versionName
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    
    buildTypes {
        debug {
            buildConfigField("String", "debug", "\"${url.debug}\"") //在BuildConfig中增加成员
        }
        release {
            minifyEnabled false
            buildConfigField("String", "debug", "\"${url.release}\"")
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }

}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])   
    // 标准写法
    // implementation group: 'com.android.support', name:'appcompat-v7', version:'28.0.0'
    // 简写
    // implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation project(":library") // 依赖library库
    
    implementation support.appcompat
    implementation support.recyclerview
    implementation support.constraint

    // 依赖第三方库最简洁的方式:
//    support.each { k, v -> implementation v }
}

以上就可以完成gradle统一配置,相对而言,现在看上去更加整洁干净了

点击 Sync Now 编译一下
然后就能看到编译成功以及打印的信息如下
在这里插入图片描述

经常会用的BuildCofig.DEBUG 来判断是在代码中切换相应的环境

通过在build.gradel中添加 buildConfigField(“String”, “debug”, “”${url.debug}"")

通过Build -> Build Bundle(s) / APK(s) 编译后打开BuildConfig文件查看
在这里插入图片描述

下面一些项目当中实用的语法:

apply plugin: 'com.android.application'

android {
    defaultConfig {
        ...
        
        // 开启分包
        multiDexEnabled true
        // 设置分包配置
        // multiDexKeepFile file('multidex-config.txt')

        // 将svg图片生成 指定维度的png图片(5.0版本以下)
        // vectorDrawables.generatedDensities('xhdpi','xxhdpi')
        // 使用support-v7兼容(5.0版本以上)
        vectorDrawables.useSupportLibrary = true
        // 只保留指定和默认资源
        resConfigs('zh-rCN')

        // 配置so库CPU架构(真机:arm,模拟器:x86)
        // x86  x86_64  mips  mips64
        ndk {
            // 真机
            //abiFilters('armeabi', 'armeabi-v7a')
            // 模拟器启动
            abiFilters('x86', 'x86_64')
        }
    }

    // 签名配置(必须写在buildTypes之前)
    signingConfigs {
        debug {
            // 编译不通过还找不到问题
            storeFile file('C:/Users/Administrator/.android/debug.keystore')
            storePassword "android"
            keyAlias "androiddebugkey"
            keyPassword "android"
        }
        release {
            // 签名证书文件
            storeFile file('你的签名证书文件路径.jks')
            // 签名证书的类型
            storeType "netapp"
            // 签名证书文件的密码
            storePassword "password"
            // 签名证书中密钥别名
            keyAlias "证书别名"
            // 签名证书中该密钥的密码
            keyPassword "password"
            // 是否开启V2打包
            v2SigningEnabled true
        }
    }
    buildTypes {
        debug {
            // 对构建类型设置签名信息
            signingConfig signingConfigs.debug
            buildConfigField("String", "debug", "\"${url.debug}\"") //在BuildConfig中增加成员
        }
        release {
            minifyEnabled false
            // 对构建类型设置签名信息
            signingConfig signingConfigs.release
            buildConfigField("String", "debug", "\"${url.release}\"")
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    
    // AdbOptions 可以对 adb 操作选项添加配置
    adbOptions {
        // 配置操作超时时间,单位毫秒
        timeOutInMs = 5 * 1000_0

        // adb install 命令的选项配置
        installOptions '-r', '-s'
    }
    // 对 dx 操作的配置,接受一个 DexOptions 类型的闭包,配置由 DexOptions 提供
    dexOptions {
        // 配置执行 dx 命令是为其分配的最大堆内存
        javaMaxHeapSize "4g"
        // 配置是否预执行 dex Libraries 工程,开启后会提高增量构建速度,不过会影响 clean 构建的速度,默认 true
        preDexLibraries = false
        // 配置是否开启 jumbo 模式,代码方法是超过 65535 需要强制开启才能构建成功
        jumboMode true
        // 配置 Gradle 运行 dx 命令时使用的线程数量
        threadCount 8
        // 配置multidex参数
        additionalParameters = [
                '--multi-dex', // 多dex分包
                '--set-max-idx-number=50000', // 每个包内方法数上限
                // '--main-dex-list=' + '/multidex-config.txt', // 打包到主classes.dex的文件列表
                '--minimal-main-dex'
        ]
    }
    // 执行 gradle lint 命令即可运行 lint 检查,默认生成的报告在 outputs/lint-results.html 中
    lintOptions {
        // 遇到 lint 检查错误会终止构建,一般设置为 false
        abortOnError false
        // 将警告当作错误来处理(老版本:warningAsErros)
        warningsAsErrors false
        // 检查新 API
        check 'NewApi'
    }
}

dependencies {
    ...
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值