现在Android Studio的构建速度已经比以前快了很多,但当项目较大时还是需要做一些优化处理,在优化之前需要分析Gradle执行构建生命周期的每个阶段和每个构建任务所需的时间。
分析构建耗时
1、清空构建,相当于初始化,这样可以确保能分析到完整的项目构建过程
gradlew clean
2、使用下面命令执行构建,并且生成构建过程耗时报告
gradlew --profile --recompile-scripts --offline --rerun-tasks assembleFlavorDebug
–profile:表示启用分析
–offline:禁止Gradle 更新在线依赖
3、执行完成后在project-root/build/reports/profile/目录下查看分析报告
4、报告的样式如图:
summary:表示各个阶段
Task Execution :表示构建
构建优化
保持工具处于最新版
Android 工具几乎在每一次更新中都会获得构建优化和新功能。
配置productFlavors ,创建不同的构建版本
例如:
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
如果您不需要运行 Crashlytics 报告,请按以下步骤操作来停用插件,以便加快您的调试构建的速度:
android {
...
buildTypes {
debug {
ext.enableCrashlytics = false
}
}
静态构建配置值与调试构建结合使用
manifest文件始终配置静态值,因为如果您的 manifest 文件或应用资源中的值需要随着每一个构建更新,Instant Run 将无法执行代码交换 - 它必须构建和安装新的 APK。
使用静态依赖项版本
在 build.gradle 文件中声明依赖项时,您应当避免在结尾将版本号与加号一起使用,例如 ‘com.android.tools.build:gradle:2.+’。使用动态版本号可能导致意外版本更新和难以解析版本差异,并因 Gradle 检查有无更新而减慢构建速度。您应改为使用静态/硬编码版本号。
启用离线模式
果您的网络连接速度比较慢,那么在 Gradle 尝试使用网络资源解析依赖项时,您的构建时间可能会延长。您可以指示 Gradle 仅使用它已经缓存到本地的工件来避免使用网络资源。
配置 dexOptions 和启用库预 dexing
- preDexLibraries:声明是否预 dex 库依赖项以加快您的增量构建速度。由于此功能可能减慢您的干净构建的速度,您可能需要为持续性集成服务器停用此功能。
- maxProcessCount:设置运行 dex-in-process 时要使用的最大线程数量。默认值为 4。
- javaMaxHeapSize:设置 DEX 编译器的最大堆大小。不过,您应当增加 Gradle 的堆大小(启用 dex-in-process 时,将与 DEX 编译器共享),而不是设置此属性。
- 例如
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 的堆大小并启用 dex-in-process
gradle.properties 文件中将 Gradle 的堆大小设置为 2048 MB:
org.gradle.jvmargs = -Xmx2048m
将图像转换成 WebP
停用 PNG 处理
如果您无法(或者不想)将 PNG 图像转换成 WebP,仍可以通过在每次构建应用时停用自动图像压缩的方式加快构建速度。要停用此优化,请将以下代码添加到您的 build.gradle 文件中:
android {
...
aaptOptions {
cruncherEnabled false
}
}
由于构建类型或产品风味不定义此属性,在构建发布版本的应用时,您需要将此属性手动设置为 true。
启用 Instant Run