gradle 介绍:

1.gradle构建工具的出现让工程有无限可能;

2.gradle核心是基于Groovy脚本基于Java且拓展了Java。因此gradle需要依赖JDK和Groovy库;

3.和ant、maven构建有区别,gradle是一种编程思想;

第一行代码:

两种打印字符串方式:

println("hello gradle")
println "hello gradle"

打印内容 在build的时候可见,写在最上面就可以在编译的信息最上面能看到。

config用法:

项目中如果有多个model时,需要统一配置,可以在项目根目录下建立一个config.gradle文件。

同时在根目录下的bulid.gradle文件中引入

// 根目录下的build.gradle头部加入自定义config.gradle,相当于layout布局中加入include
apply from: "config.gradle"

这样在每个model中都可以使用config中配置的参数了。

在config.gradle中添加多个自定义属性可以通过ext代码块:

例如:

ext {
    username = "Android"
}

在model中的build.gradle文件中需要打印“username这个参数时只需要:

println "${username}" //这是缩写

正确的写法:

println "${rootProject.ext.username}"

两种写法都可以使用,因为gradle是一种弱类型语言。

如果需要修改 config中的参数值可以使用:

rootProject.ext.username = 163 // 弱类型语言Groovy
// 建立Map存储,对象名、key都可以自定义,groovy糖果语法,非常灵活
androidId = [
        compileSdkVersion: 28,
        buildToolsVersion: "29.0.0",
        minSdkVersion    : 19,
        targetSdkVersion : 28,
        versionCode      : 1,
        versionName      : "1.0"
]
appId = [
            app    : "com.xxx.xxxx.app",
            library: "com.xxx.xxxx.library"
    ]
      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"
    ]

注意:前面的key不能有特殊字符,会出现编译失败。

build中的使用:

// 赋值与引用
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
    }
}

dependencies {
     // 标准写法
    implementation group: 'com.android.support', name:'appcompat-v7', version:'28.0.0'
    // 简写
    implementation 'com.android.support:appcompat-v7:28.0.0'
    //第三种写法(和使用其他配置一样的写法)
    implementation support.appcompat
     // 依赖library库
    implementation project(":library")
    
    // 依赖第三方库最简洁的方式,类似lambda表达式,一行代码导入config中所有三方库
    //support = rootProject.ext.dependencies
    //类似HashMap<String,String> map = new HashMap<>();
    //通过递归循环遍历所有依赖
    support.each { k, v -> implementation v }
}

BuildConfig:

BuildConfig文件位置:app->build->generarted->buildConfig

如何在BuildConfig添加属性:

buildTypes {
//String -》类型;BUGLY_APPID -》变量名;12fd7f987f -》变量值
    //注意 string的类型值需要加"",转义字符也别忘了加;
    release {
        buildConfigField("String", "BUGLY_APPID", "\"12fddddd\"")
     
    }
    debug {
        
        buildConfigField("String", "BUGLY_APPID", "\"358bfserfwe\"")
    }

}

拓展:

// 开启分包
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'
        }
    }
}

未完,待续。。。