目前Android开发主流的编译工具是Gradle,虽然后最快的编译工具并不是它,但它的优势就是它是亲儿子。它与Android Studio的关系非常密切,很多配置都是默认配置好的,开发起来极其方便。但是编译速度相对较慢。
了解Gradle的编译原理,学习如何优化Gradle对开发效率的提高尤为重要。
Gradle的优化,主要分为两大方面:
1、包大小优化;
2、编译速度优化。
Gradle目录(如已了解,跳过看优化)
首先,我们来了解一下Gradle的基础目录结构。
setting.gradle:定义了需要加入编译的依赖module,Android Studio里面一般都是默认生成的。如:
include ':app', ':lib_iflytek', ':BlueMoonSDK'
外层build.gradle:全局的配置文件,一般配置maven下载地址,gradle的版本配置等。我们一般不会在这里面操作太多共有的东西,保证每个module的独立性。repositories就是代码仓库,Gradle 支持三种类型的仓库:Maven,Ivy和一些静态文件或者文件夹。如:
buildscript {
repositories {
jcenter()
google()//3.0+版本默认加上的
}
dependencies {
classpath 'com.android.tools.build:gradle:3.1.3'
}
}
allprojects {
repositories {
jcenter()
google()
maven {
url "https://jitpack.io"//这里是配置maven的下载地址
}
}
}
gradle-wrapper.properties:这里配置gradle的包版本,主要跟外层build.gradle的calsspath配置的版本对应。3.1.3对应的是4.4。wrapper 有版本区分,但是并不需要你手动去下载,当你运行脚本的时候,如果本地没有会自动下载对应版本文件。如:
distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip
内层build.gradle:每个module单独的配置文件。如果这里的定义的选项和外层build.gradle
定义的相同,后者会被覆盖。大部分关于Android的配置都是在这里完成。具体还是直接根据代码来分析吧。以app目录下的build.gradle为例。
apply plugin: 'com.android.application'
android {
compileSdkVersion 23
buildToolsVersion '23.0.3'
signingConfigs {
release {
storeFile file('./Json20170206.keystore')
storePassword "storePassword"
keyAlias "keyAlias"
keyPassword "keyPassword"
}
}
defaultConfig {
applicationId "cn.com.json.toall"
minSdkVersion 16
targetSdkVersion 23
versionCode 1
versionName "1.0"
/*个推*/
manifestPlaceholders = [
GETUI_APP_ID : "GETUI_APP_ID",
]
ndk {
abiFilters "armeabi", "armeabi-v7a", "arm64-v8a", "mips", "mips64", "x86", "x86_64"
}
multiDexEnabled true
}
buildTypes {
release {
minifyEnabled false