伴随着 Android Studio2.0的发布, Gradle 也进行了一次非常大的升级,叫Instant Run.
在 Gradle 出现以前Android 也有对应的编译工具叫 Ant。
Project和Task
每个项目的编译至少有一个 Project,一个 build.gradle就代表一个project,每个project里面包含了多个task,task 里面又包含很多action,action是一个代码块,里面包含了需要被执行的代码。
编译过程分为三个阶段:
- 初始化阶段:创建 Project 对象,如果有多个build.gradle,也会创建多个project.
- 配置阶段:在这个阶段,会执行所有的编译脚本,同时还会创建project的所有的task,为后一个阶段做准备。
- 执行阶段:在这个阶段,gradle 会根据传入的参数决定如何执行这些task,真正action的执行代码就在这里.
Gradle文件配置层级:
- 一个工程包含一个setting.gradle文件和一个build.gradle文件。可能有多个Module,每个Module有自己的一个build.gradle。
![](https://img.haomeiwen.com/i8669504/3104816109e7a8e2.png)
-
setting.gradle: setting文件定义哪些module需要加入到编译过程
-
工程的build.gradle:该build文件最终会被应用到所有Module中
gradle文件配置示例:
apply plugin: 'com.android.application'
android {
signingConfigs {
config {
keyAlias ''
keyPassword ''
storeFile file('keystore.jks')
storePassword ''
}
}
compileSdkVersion 27
defaultConfig {
applicationId ""
minSdkVersion 21
targetSdkVersion 27
versionCode 1
versionName "1.0"
multiDexEnabled true
flavorDimensions "versionCode"
renderscriptTargetApi 19
renderscriptSupportModeEnabled true
externalNativeBuild {
cmake {
cppFlags "-std=c++11 -frtti -fexceptions"
}
}
ndk {
abiFilters 'armeabi-v7a'
}
lintOptions {
abortOnError false
}
}
externalNativeBuild {
cmake {
path "CMakeLists.txt"
}
}
buildTypes {
release {
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.config
}
debug {
minifyEnabled false
signingConfig signingConfigs.config
}
}
flavorDimensions "tier"
productFlavors {
yingyongbao { dimension "tier" }
}
productFlavors.all { flavor ->
flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
}
}
android.lintOptions { //忽略中英文大小写
checkReleaseBuilds false
abortOnError false
}
allprojects {
repositories {
mavenCentral()
}
}
repositories {
flatDir {
dir 'libs'
}
}
dependencies {
implementation 'com.android.support:appcompat-v7:27.1.1'
implementation 'com.android.support:design:27.1.1'
implementation 'com.jakewharton:butterknife:7.0.1'
}
配置说明:
apply plugin:
表明应用的插件的类型,工程项目是com.android.application类型,而Module则是com.android.library
android
这是编译文件中最大的代码块,关于android 的所有特殊配置都在这里
defaultConfig
程序的默认配置
externalNativeBuild
native编译支持
常用属性
1.cmake:CMake工具编译选项。
2.ndkBuild:ndk-build选项。
buildTypes
分为release版本和debug版本
常用属性:
minifyEnabled 是否开启混淆
shrinkResources 是否去除无用资源
signingConfigs 签名配置信息
name:build type的名字
proguardFiles:混淆文件
lintOptions
Lint工具可选项参数
常用属性
abortOnError false如果发现错误,lint工具是否应该退出这个程序。true表示退出。
productFlavors
项目打包渠道配置
flavorDimensions "tier"
productFlavors {
yingyongbao { dimension "tier" }
}
productFlavors.all { flavor ->
flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
}
signingConfig
签名配置信息
signingConfigs {
config {
keyAlias ''
keyPassword ''
storeFile file('keystore.jks')
storePassword ''
}
}
keyAlias 签名key的别名
keyPassword 签名key的密码
storeFile file 签名key的路径
storePassword store签名密码
v1SigningEnabled:是否使用jar签名(又名v1签名)
v2SigningEnabled:是否使用apk签名(又名v2签名)
repositories
代码仓库:Gradle支持从maven中央仓库和JCenter上获取构件
dependencies
dependencies属于gradle 的依赖配置。它定义了当前项目需要依赖的其他库。
我们在引用库的时候,每个库名称包含三个元素:发布者标识:库名:版本号
例如:
implementation 'com.alibaba:fastjson:1.2.8'
如果为implementation 'com.alibaba:fastjson:1.2.+'表示会使用库的最新版本。但是每次编译都要去做网络请求查看是否有新版本导致编译减慢。
gradle.properties配置
-
加大可用编译内存:
org.gradle.jvmargs=-Xmx1024m -
开启编译守护进程
org.gradle.daemon=true -
开启并行编译
org.gradle.parallel=true
网友评论