Android组件化-Gradle 语法以及配置

2 篇文章 0 订阅
2 篇文章 0 订阅

Gradle构建工程的出现让工程有无限可能

Gradle核心是基于Groovy脚本语言,Groovy脚本语言基于Java且扩展了Java。Grale需要依赖JDK和Groovy库。

和ant、maven构建有区别,Gradle是一种编程思想。

第一行代码 :

打印字符串

printlIn("hello gradle")

println "hello gradle"

通过build — toggle view 可以查看gradle 日志

 

增加自定义属性:

1.根目录下新建 config.gradle

ext {

    username = "wb"

}

2.在根目录的build.gradle下将 config.gradle 文件引入

3.在module的build gradle下,通过${username},  或者${rootProject.ext.username} 获取 配置值

gradle 为弱类型语言,可以对username 赋予任意类型的值

 

通过config.gradle文件,可以统一各个module 的sdk、 版本、等配置

例如:

// 添加多个自定义属性,可以通过ext代码块
ext {

    username = "simon"

    // 生产/开发环境(正式/测试)
    isRelease = true

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

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

    // 生产/开发环境URL
    url = [
            "debug"  : "https://11.22.33.44/debug",
            "release": "https://11.22.33.44/release"
    ]

    supportLibrary = "28.0.0" // ${xxx}
    // 第三方库
    dependencies = [
            "appcompat" : "com.android.support:appcompat-v7:${supportLibrary}",
            "recyclerview" : "com.android.support:recyclerview-v7:${supportLibrary}",
            "constraint" : "com.android.support.constraint:constraint-layout:1.1.3"
    ]
}

 

app, library  的build.gradle 下,通过config.gradle获取配置信息

apply plugin: 'com.android.application'

println("hello gradle")

// 正确的语法:${rootProject.ext.username}
// rootProject.ext.username = 163 // 弱类型语言Groovy
println "${rootProject.ext.username}"
println "${rootProject.ext.isRelease}"

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

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"

    }

}

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'

    // 依赖library库
    implementation project(":library")
//    implementation support.appcompat
//    implementation support.recyclerview
//    implementation support.constraint

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

BuildConfig中增加配置

1.app build.gradle buildTypys定义变量

buildTypes {
        debug {
            // 对构建类型设置签名信息
            signingConfig signingConfigs.debug
            buildConfigField("String", "debugUrl", "\"${url.debug}\"")
        }

        release {
            minifyEnabled false
            // 对构建类型设置签名信息
            signingConfig signingConfigs.release
            buildConfigField("String", "debugUrl", "\"${url.release}\"")
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }

2.在Java代码中,可以通过 BuildConfig.debugUrl,获取配置值

 

项目当中常用的语法

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

        // 将svg图片生成 指定维度的png图片
        // 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')
        }



        // 源集 - 设置源集的属性,更改源集的 Java 目录或者自由目录等
        sourceSets {
            main {
                if (!isRelease) {
                    // 如果是组件化模式,需要单独运行时
                    manifest.srcFile 'src/main/AndroidManifest.xml'
                    java.srcDirs = ['src/main/java']
                    res.srcDirs = ['src/main/res']
                    resources.srcDirs = ['src/main/resources']
                    aidl.srcDirs = ['src/main/aidl']
                    assets.srcDirs = ['src/main/assets']
                } else {
                    // 集成化模式,整个项目打包
                    manifest.srcFile 'src/main/AndroidManifest.xml'
                }
            }
        }

    }

    // 签名配置(隐形坑:必须写在buildTypes之前)
    signingConfigs {
        debug {
            // 天坑:填错了,编译不通过还找不到问题
            storeFile file('C:/Users/Administrator/.android/debug.keystore')
            storePassword "android"
            keyAlias "androiddebugkey"
            keyPassword "android"
        }
        release {
            // 签名证书文件
            storeFile file('D:/NetEase/netease.jks')
            // 签名证书的类型
            storeType "netease"
            // 签名证书文件的密码
            storePassword "net163"
            // 签名证书中密钥别名
            keyAlias "netease"
            // 签名证书中该密钥的密码
            keyPassword "net163"
            // 是否开启V2打包
            v2SigningEnabled true
        }
    }

    buildTypes {
        debug {
            // 对构建类型设置签名信息
            signingConfig signingConfigs.debug
            buildConfigField("String", "debug", "\"${url.debug}\"")
        }

        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'
    }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值