现在Android Studio的构建速度已经比以前快了很多,但当项目较大时还是需要做一些优化处理,在优化之前需要分析Gradle执行构建生命周期的每个阶段和每个构建任务所需的时间。
1、清空构建,相当于初始化,这样可以确保能分析到完整的项目构建过程
gradlew clean
2、使用下面命令执行构建,并且生成构建过程耗时报告
gradlew --profile --recompile-scripts --offline --rerun-tasks assembleFlavorDebug
–profile:表示启用分析
–offline:禁止Gradle 更新在线依赖
3、执行完成后在project-root/build/reports/profile/目录下查看分析报告
summary:表示各个阶段
Task Execution :表示构建
Android 工具几乎在每一次更新中都会获得构建优化和新功能。
例如:
android {
...
defaultConfig {...}
buildTypes {...}
productFlavors {
dev {
minSdkVersion 21
versionNameSuffix "-dev"
applicationIdSuffix '.dev'
}
prod {
}
}
}
避免编译和打包您没有测试的资源(例如其他语言本地化和屏幕密度资源)。为此,您可以仅为“开发”风味指定一个语言资源和屏幕密度,如下面的示例中所示:
android {
...
productFlavors {
dev {
...
// The following configuration limits the "dev" flavor to using
// English stringresources and xxhdpi screen-density resources.
resConfigs "en", "xxhdpi"
}
...
}
}
如果您不需要运行 Crashlytics 报告,请按以下步骤操作来停用插件,以便加快您的调试构建的速度:
android {
...
buildTypes {
debug {
ext.enableCrashlytics = false
}
}
manifest文件始终配置静态值,因为如果您的 manifest 文件或应用资源中的值需要随着每一个构建更新,Instant Run 将无法执行代码交换 - 它必须构建和安装新的 APK。
在 build.gradle 文件中声明依赖项时,您应当避免在结尾将版本号与加号一起使用,例如 ‘com.android.tools.build:gradle:2.+’。使用动态版本号可能导致意外版本更新和难以解析版本差异,并因 Gradle 检查有无更新而减慢构建速度。您应改为使用静态/硬编码版本号。
果您的网络连接速度比较慢,那么在 Gradle 尝试使用网络资源解析依赖项时,您的构建时间可能会延长。您可以指示 Gradle 仅使用它已经缓存到本地的工件来避免使用网络资源。
android {
...
dexOptions {
preDexLibraries true
maxProcessCount 8
// Instead of setting the heap size for the DEX process, increase Gradle's
// heap size to enable dex-in-process. To learm more, read the next section.
// javaMaxHeapSize "2048m"
}
}
gradle.properties 文件中将 Gradle 的堆大小设置为 2048 MB:
org.gradle.jvmargs = -Xmx2048m
如果您无法(或者不想)将 PNG 图像转换成 WebP,仍可以通过在每次构建应用时停用自动图像压缩的方式加快构建速度。要停用此优化,请将以下代码添加到您的 build.gradle 文件中:
android {
...
aaptOptions {
cruncherEnabled false
}
}
由于构建类型或产品风味不定义此属性,在构建发布版本的应用时,您需要将此属性手动设置为 true。