Android Studio Gradle 打包速度优化()

由于我司的项目混合使用了原生代码和Flutter Boost, 导致打包速度不管调试还是Release模式下都很缓慢, 32G 内存固态盘电脑, 改一行原生代码也需要7,8分钟才能看到效果, 因此尝试在不改动源代码的情况下对Gradle增量打包进行了优化(首次打包耗时仍然很长). 主要优化点就是增加构建缓存, 使用守护进程daemon, 目前一次打包时间缩小到了2分钟多一点. 这些参数都需要反复实验才能看到效果, 并要根据物理CPU核心数()和内存数量进行调整(, ). 虽然根据javadoc文档提示设置为true会有很大提速, 目前发现效果并不是十分明显.

优化前

threadCount
javaMaxHeapSize
maxProcessCount
dexInProcess
app/build.gradle
    dexOptions {
    maxProcessCount 8
    javaMaxHeapSize "4g"
    preDexLibraries false
}

优化后

    dexOptions {
        maxProcessCount 16 // 最大 dx 并发进程进程数, 受电脑内存限制, 32G 内存可以写16
        javaMaxHeapSize "1024m" // Specifies the {@code -Xmx} value when calling dx. Example value is {@code "2048m"}.
        preDexLibraries true // 预编译库, 加速增量打包速度, Whether to pre-dex libraries. This can improve incremental builds, but clean builds may be slower.
        jumboMode true // Enable jumbo mode in dx ({@code --force-jumbo}). 大工程模式
        dexInProcess true // 在 Gradle 守护中运行 dx, 可以很大改善性能 Whether to run the {@code dx} compiler as a separate process or inside the Gradle daemon JVM.
              //  <p>Running {@code dx} in-process can greatly improve performance, but is still experimental.
        threadCount 8 // 默认运行 dx 的线程数, 默认值为4, 多核可加大. Number of threads to use when running dx. Defaults to 4.
    }

优化前的打包速度:
deubug 包
优化后: Gradle build finished in 2 m 9 s 717 ms

Release 包:
18:19 Gradle build finished in 3 m 32 s 492 ms
优化后:
18:23 Gradle build finished in 2 m 19 s 816 ms

Mac Mini M1 8G 内存笔记本, 固态盘上的增量打包耗时:
优化前
7m 17s
优化后
2m 15s

查看打包性能分析报告:
推荐离线打包

gradlew --profile --offline --rerun-tasks assembleDebug

gradlew --profile --rerun-tasks assembleDebug

优化前:

gradle.properties
android.enableBuildCache=true
android.useDeprecatedNdk=true
android.injected.testOnly=false
#org.gradle.jvmargs=-Xmx4608M
org.gradle.jvmargs=-Xmx3072m -XX:MaxPermSize=3072m -XX:+UseParallelGC -Dkotlin.daemon.jvm.options\="-Xmx3072m" -Dfile.encoding=UTF-8
android.enableAapt2=true
android.useAndroidX=true
android.enableJetifier=true
# https://docs.gradle.org/current/userguide/performance.html#parallel_execution
# 启用gradle缓存
org.gradle.parallel=true

优化后:

#启用gradle缓存
org.gradle.caching=true
android.enableBuildCache=true
#android.useDeprecatedNdk=true
android.injected.testOnly=false
#org.gradle.jvmargs=-Xmx4608M
org.gradle.jvmargs=-Xmx3072m -XX:MaxPermSize=3072m -XX:+UseParallelGC -Dkotlin.daemon.jvm.options\="-Xmx3072m" -Dfile.encoding=UTF-8
#启用新一代资源编译器aapt2 (增量资源处理), 默认已开启
#android.enableAapt2=true
android.useAndroidX=true
android.enableJetifier=true
org.gradle.daemon=true
#按需配置, 开启后Flutter Boost代码报错
#org.gradle.configureondemand=true
#启用新一代Dex编译器D8
android.enableD8=true
# https://docs.gradle.org/current/userguide/performance.html#parallel_execution
# 启用gradle缓存
org.gradle.parallel=true
#org.gradle.unsafe.configuration-cache=true
# Use this flag sparingly, in case some of the plugins are not fully compatible
#org.gradle.unsafe.configuration-cache-problems=warn

参考文档:
优化构建速度 https://developer.android.google.cn/studio/build/optimize-your-build.html
分析 build 性能 https://developer.android.google.cn/studio/build/profile-your-build?hl=zh-cn

————————

由于我司的项目混合使用了原生代码和Flutter Boost, 导致打包速度不管调试还是Release模式下都很缓慢, 32G 内存固态盘电脑, 改一行原生代码也需要7,8分钟才能看到效果, 因此尝试在不改动源代码的情况下对Gradle增量打包进行了优化(首次打包耗时仍然很长). 主要优化点就是增加构建缓存, 使用守护进程daemon, 目前一次打包时间缩小到了2分钟多一点. 这些参数都需要反复实验才能看到效果, 并要根据物理CPU核心数()和内存数量进行调整(, ). 虽然根据javadoc文档提示设置为true会有很大提速, 目前发现效果并不是十分明显.

优化前

threadCount
javaMaxHeapSize
maxProcessCount
dexInProcess
app/build.gradle
    dexOptions {
    maxProcessCount 8
    javaMaxHeapSize "4g"
    preDexLibraries false
}

优化后

    dexOptions {
        maxProcessCount 16 // 最大 dx 并发进程进程数, 受电脑内存限制, 32G 内存可以写16
        javaMaxHeapSize "1024m" // Specifies the {@code -Xmx} value when calling dx. Example value is {@code "2048m"}.
        preDexLibraries true // 预编译库, 加速增量打包速度, Whether to pre-dex libraries. This can improve incremental builds, but clean builds may be slower.
        jumboMode true // Enable jumbo mode in dx ({@code --force-jumbo}). 大工程模式
        dexInProcess true // 在 Gradle 守护中运行 dx, 可以很大改善性能 Whether to run the {@code dx} compiler as a separate process or inside the Gradle daemon JVM.
              //  <p>Running {@code dx} in-process can greatly improve performance, but is still experimental.
        threadCount 8 // 默认运行 dx 的线程数, 默认值为4, 多核可加大. Number of threads to use when running dx. Defaults to 4.
    }

优化前的打包速度:
deubug 包
优化后: Gradle build finished in 2 m 9 s 717 ms

Release 包:
18:19 Gradle build finished in 3 m 32 s 492 ms
优化后:
18:23 Gradle build finished in 2 m 19 s 816 ms

Mac Mini M1 8G 内存笔记本, 固态盘上的增量打包耗时:
优化前
7m 17s
优化后
2m 15s

查看打包性能分析报告:
推荐离线打包

gradlew --profile --offline --rerun-tasks assembleDebug

gradlew --profile --rerun-tasks assembleDebug

优化前:

gradle.properties
android.enableBuildCache=true
android.useDeprecatedNdk=true
android.injected.testOnly=false
#org.gradle.jvmargs=-Xmx4608M
org.gradle.jvmargs=-Xmx3072m -XX:MaxPermSize=3072m -XX:+UseParallelGC -Dkotlin.daemon.jvm.options\="-Xmx3072m" -Dfile.encoding=UTF-8
android.enableAapt2=true
android.useAndroidX=true
android.enableJetifier=true
# https://docs.gradle.org/current/userguide/performance.html#parallel_execution
# 启用gradle缓存
org.gradle.parallel=true

优化后:

#启用gradle缓存
org.gradle.caching=true
android.enableBuildCache=true
#android.useDeprecatedNdk=true
android.injected.testOnly=false
#org.gradle.jvmargs=-Xmx4608M
org.gradle.jvmargs=-Xmx3072m -XX:MaxPermSize=3072m -XX:+UseParallelGC -Dkotlin.daemon.jvm.options\="-Xmx3072m" -Dfile.encoding=UTF-8
#启用新一代资源编译器aapt2 (增量资源处理), 默认已开启
#android.enableAapt2=true
android.useAndroidX=true
android.enableJetifier=true
org.gradle.daemon=true
#按需配置, 开启后Flutter Boost代码报错
#org.gradle.configureondemand=true
#启用新一代Dex编译器D8
android.enableD8=true
# https://docs.gradle.org/current/userguide/performance.html#parallel_execution
# 启用gradle缓存
org.gradle.parallel=true
#org.gradle.unsafe.configuration-cache=true
# Use this flag sparingly, in case some of the plugins are not fully compatible
#org.gradle.unsafe.configuration-cache-problems=warn

参考文档:
优化构建速度 https://developer.android.google.cn/studio/build/optimize-your-build.html
分析 build 性能 https://developer.android.google.cn/studio/build/profile-your-build?hl=zh-cn