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'
}
}
}
未完,待续。。。